首页 文章

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

提问于
浏览
1

我正在使用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 |)* wy和(sum | xz |)* wz分别 .

我试图定义一个传递给 weights 参数的函数,但是我还希望除了用户定义的权重之外还保持逆距离缩放,我不知道反距离缩放函数 . 我无法从文档中找到答案 .

有什么建议?

1 回答

  • 0

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

相关问题