先画二维点,再亲手算一个类别中心
把每份特征看成平面上的一点,先求平均,再判断新点。图上能看到的变化,之后才变成数组运算。
1 · 先明确每个点来自什么
假设一个教学例子的两个坐标分别描述某两种变化,走路样本是 (0.9,0.1)、(0.8,0.2),跑步样本是 (0.1,0.9)、(0.2,0.8)。这些坐标是为了手算而设置的人工数值,不是实际手表特征的真实分布。
把同类点放在一张图上,原型可以先取均值。走路中心为 (0.85,0.15),跑步中心为 (0.15,0.85)。遇到新点 (0.7,0.3),先凭图预测它更接近谁,再计算。
2 · 均值怎样写成数组操作
axis=0 跨样本求每个坐标的平均
import numpy as np
walking = np.array([[0.9, 0.1], [0.8, 0.2]])
running = np.array([[0.1, 0.9], [0.2, 0.8]])
center_walk = walking.mean(axis=0)
center_run = running.mean(axis=0)
print(center_walk, center_run)形状 [样本,坐标] 中,一行是一份特征。mean(axis=0) 保留两个坐标,不能把所有数混成单个平均值。真实 128 维也按每个坐标分别求平均。
3 · 先用距离观察,再比较项目的方向相似度
二维距离可以用勾股关系计算。项目实际采用归一化后的方向相似度,下一篇解释区别;先把“中心靠近哪边”看清。下方实验采用项目的方向比较方式,并允许加入一份标错的样本。
中心会随参与计算的数据移动,所以标签错误不是只影响这一条记录。原型更新的简单,也意味着它依赖采样质量与类内分布。
4 · 一个中心什么时候不够
同一类若形成两个相距很远的簇,中间的平均点可能不代表任何真实动作。不同速度、不同佩戴方向都可能造成分布复杂。先看独立样本图,再决定固定特征是否合适;不能仅凭多采几条就承诺一个中心足以覆盖所有情况。
二维图用于直觉,真实高维分布不能直接从两条任意坐标推断。评估仍依据完整特征和独立标签;需要可视化降维时,另行解释它可能改变距离关系。
5 · 把每个计算步骤读出来
下载示例依次验证输入、求均值、归一化、计算相似度、取最大类别。它保留小函数是因为后面重复使用同一数学操作,每个函数定义都能在同一文件读到。
手算两个均值,加入一个 (0,1) 却被标为走路的点,再算中心。预测对 (0.7,0.3) 的判断变化,然后用图和程序核对。
资料与代码
配套文件
先复制到独立练习目录;用法见 支线示例说明。