我正在为一个类使用KNN算法(指示使用这个算法,可能不是你期望的应用程序,见下文)
基本上,我们设置了覆盆子pi来收集6个本地WIFI路由器Mac地址的信号强度 . 在我们建筑物楼层的不同位置,我们在.csv文件中记录了这些信号强度 .
使用python我创建了一个使用此页面上的函数的脚本 . http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
我适合如下:
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1, algorithm = 'auto')
knn.fit(strengths, labels)
其中strength是一个嵌套数组,如下所示:
[[Loc1strengths],[Loc2strengths],[Loc3strengths],[Loc4strengths],[Loc5strengths],[Loc6strengths]]
标签设置如下:
[Loc1, Loc2, Loc3, Loc4, Loc5, Loc6]
稍后在脚本中,我收集了6个本地WIFI路由器Mac地址的信号强度,并尝试使用knn.predict()预测我的pi的位置,并希望获得pi的位置,例如Location1 .
结果不是很好,它确定它的位置相对较差 .
我想知道是否有办法对knn.predict()的功能进行加权,以便最近位置的邻居权重更大,pi不会移动到地板的另一侧而不会越过其他点 .
任何帮助,将不胜感激!
1 回答
它有点hacky,但您可以使用
KNeighborsClassifier
中的weights
参数执行此操作 . 如果您将时间添加为额外功能,然后编写自定义距离功能,则可以使用时间对样本之间的距离进行加权 . 这里显示了一个非常简单的示例一些虚拟数据
测试我们的加权距离是否有意义:
Output:
这就是我期望看到的,如果某个东西的时间距离是原来的两倍,它就是距离的两倍 . 所以现在检查它是否适用于
KNeighborsClassifier
Output:
这也是我期望看到的 . 所以看起来并不太痛苦 . 我建议花点时间考虑如何设置距离函数,因为这会影响结果 .