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