设置KNN的特征权重

时间:2013-11-10 17:07:36

标签: scikit-learn knn

我正在使用sklearn的KNN实现。虽然我的输入数据有大约20个功能,但我相信其中一些功能比其他功能更重要。有办法:

  1. 在“训练”KNN学习者时设置每个要素的要素权重。
  2. 了解有或没有预处理数据的最佳权重值。
  3. 在相关的说明中,我理解KNN通常不需要培训,但由于sklearn使用KDTrees实现它,因此必须从训练数据生成树。然而,这听起来像是将KNN转变为二叉树问题。是这样的吗?

    感谢。

2 个答案:

答案 0 :(得分:5)

kNN简单地基于距离函数。当你说"功能二比其他人更重要时#34;它通常意味着特征二的差异是值得的,比如,其他坐标的差异是10倍。实现这一目标的简单方法是将坐标#2乘以其重量。所以你把它放入树中而不是原始的坐标,但是坐标乘以它们各自的重量。

如果您的要素是坐标的组合,您可能需要在应用权重之前对坐标线应用适当的矩阵变换,请参阅PCA(主成分分析)。 PCA可能会帮助您解决问题2.

答案 1 :(得分:0)

问题的答案称为“度量学习”,目前尚未在Scikit-learn中实现。使用流行的Mahalanobis距离相当于使用StandardScaler重新调整数据。理想情况下,您希望指标考虑标签。