k-最近邻算法

时间:2013-03-22 09:06:26

标签: machine-learning knn

我正在智能设备上实现k-Nearest Neighbor算法,以识别识别数据中的人类活动。我将解释如何实现它。你们可以,建议我对我采取的步骤有任何改进,并回答我在路上可能会问的任何问题吗?

以下是步骤:

  1. 我下载了labelled dataset,其中包括来自加速度计的三轴加速度以及描述活动的标签。我将在此数据集中选择一些我希望识别的活动(在我的情况下是走路,坐着,站着)。
  2. 然后我将从加速度计数据的每个窗口(即数据集中包含128个加速度计数据读数的每个记录)中提取特征(平均值,最小值,最大值,我的情况下的幅度加速度的标准偏差)。数据集和我将这些功能与JSON格式的窗口标签(作为一个记录)一起存储在设备上的文本文件中。因此,训练数据集中的一个记录/样本将包括:平均值,最小值,最大值,标准差和标签
  3. 在分类步骤中,从收集的数据中我还将有一个加速度计数据窗口,我从中提取上述4个特征。因此,我需要将收集的数据的4个特征与训练数据中的每个样本进行比较。我怎么能找到它们之间的相似性,因为一条记录将包含4个特征?
  4. 作为第(3)点问题的解决方案,我想通过计算它们之间的差异然后从每个特征中挑选出多数来为每个特征获取k-最近邻。你觉得怎么样?你能提出任何优化吗?谢谢:))

2 个答案:

答案 0 :(得分:1)

相当有趣和有趣的应用程序! ; - )

当然,其中一个问题是知道何时开始和停止计算这些功能,但我想你已经有了一些解决方案(固定时间窗口或按钮......)。 你当然可以使用knn分类器来做到这一点,但这肯定不是我的首选,因为它对异常值非常敏感(如果你的措施搞砸了一个训练课程,它将永远影响你的下一个分类) 。 所以我宁愿选择高斯模型:

  1. 记录每个活动的大约10到20个示例(即,4个值的向量)
  2. 计算每个活动的平均向量和对角协方差矩阵
  3. 在测试时,您计算由三个高斯模型之一生成新观察向量的高斯可能性,并选择具有最大似然性的活动。

答案 1 :(得分:0)

我会以不同的方式解决问题。我会在更长的时间内(例如1周)采集大量样本,然后在其中找到群集。之后,只要当前测量值接近其中一个群集,用户就能够标记群集。群集的数量应限于少数活动,以便用户只需标记几个群集。

缺点:

  • 需要用户的培训数据/没有即时满足感。
  • 实施起来比较复杂。

优点:

  • 为用户自定义。
  • 不受外部/非个人训练数据的限制。
  • 使用其他数据(灯光/温度/ GPS /时间/声音/相机)。
  • 可能更准确。
  • 可以对算法进行连续的重新训练。
  • 随着可用数据的增加,准确度会随着时间的推移而提高。
  • 可以将标记数据上传到中央服务器,并在未来版本的应用中使用。