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

时间:2018-03-22 03:47:43

标签: python scikit-learn knn nearest-neighbor

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

ApplicationWindow { id:main_win visible: true width: 640 height: 480 title: qsTr("Player") property int idx: 0 property bool isActive: true Text { id:text1 anchors.top: parent.top width: 240 height: 35 text: myModel.folder.toString() font.family: "Helvetica" font.pointSize: 20 color: "blue" focus: true } GridView { id: grid_main // annchors anchors{ bottom: parent.bottom right: parent.right left: parent.left top: text1.bottom } cellWidth: 100; cellHeight: 100 focus: true currentIndex: 0 ... }

模型正常运行。但是,我想为每个样本点提供用户定义的权重。代码当前使用距离的倒数来使用knn = neighbors.KNeighborsClassifier(n_neighbors=7, weights='distance', algorithm='auto', leaf_size=30, p=1, metric='minkowski')参数进行缩放。

我想继续保持逆距离缩放,但对于每个样本点,我也有一个概率权重。我想在距离计算中将其作为权重应用。例如,如果metric='distance'是测试点,而x是计算距离的两个最近邻居,那么我希望将距离计算为(sum | xy |)* w < sub> y 和(sum | xz |)* w z

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

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

sklearn中的

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

答案 1 :(得分:0)

sklearn.neighbors.KNeighborsClassifier.score()有一个sample_weight参数。那是您要找的东西吗?