为 scikit-learn 中的 knn 分类器提供用户定义的样本权重

Jef*_*ham 6 python nearest-neighbor knn scikit-learn

我正在使用 scikit-learn KNeighborsClassifier 对具有 4 个输出类的数据集进行分类。以下是我正在使用的代码:

knn = neighbors.KNeighborsClassifier(n_neighbors=7, weights='distance', algorithm='auto', leaf_size=30, p=1, metric='minkowski')

该模型工作正常。但是,我想为每个样本点提供用户定义的权重。该代码当前使用距离的倒数来使用metric='distance'参数进行缩放。

我想继续保持反距离缩放,但对于每个样本点,我也有一个概率权重。我想将其作为距离计算中的权重。例如,如果x是测试点并且y,z是正在计算距离的两个最近邻居,那么我希望将距离计算为 (sum|xy|)*w y和 (sum|xz|)*w z分别。

我尝试定义一个传递到weights参数中的函数,但除了用户定义的权重之外,我还想保留反距离缩放,并且我不知道反距离缩放函数。我无法从文档中找到答案。

有什么建议么?

Kai*_*ang 3

与其他估计器(例如决策树)不同,sklearn 中的 KNN 没有样本权重。就我个人而言,我认为这是令人失望的。让 KNN 支持样本权重并不难,因为预测的标签是其邻居的多数投票。一个愚蠢的做法是根据样本权重自己生成样本。例如,如果样本的权重为 2,则使其出现两次。