SMARTWATCH 学习手册有 C 基础 · 嵌入式从零开始
五 A / 原型学习与个性化 / 01

先画二维点,再亲手算一个类别中心

把每份特征看成平面上的一点,先求平均,再判断新点。图上能看到的变化,之后才变成数组运算。

接续上一篇:换个人佩戴,怎样让模型适应新的动作习惯

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) 的判断变化,然后用图和程序核对。

资料与代码

配套文件

先复制到独立练习目录;用法见 支线示例说明。