我正在使用sklearn的KNN实现。虽然我的输入数据有大约20个功能,但我相信其中一些功能比其他功能更重要。有办法:
在相关的说明中,我理解KNN通常不需要培训,但由于sklearn使用KDTrees实现它,因此必须从训练数据生成树。然而,这听起来像是将KNN转变为二叉树问题。是这样的吗?
感谢。
答案 0 :(得分:5)
kNN简单地基于距离函数。当你说"功能二比其他人更重要时#34;它通常意味着特征二的差异是值得的,比如,其他坐标的差异是10倍。实现这一目标的简单方法是将坐标#2乘以其重量。所以你把它放入树中而不是原始的坐标,但是坐标乘以它们各自的重量。
如果您的要素是坐标的组合,您可能需要在应用权重之前对坐标线应用适当的矩阵变换,请参阅PCA(主成分分析)。 PCA可能会帮助您解决问题2.
答案 1 :(得分:0)
问题的答案称为“度量学习”,目前尚未在Scikit-learn中实现。使用流行的Mahalanobis距离相当于使用StandardScaler重新调整数据。理想情况下,您希望指标考虑标签。