machine-learning - Scikit-learn - KNeighborsClassifier 的用户定义权重函数

标签 machine-learning scikit-learn nearest-neighbor

我有一个 KNeighborsClassifier,它根据 4 个属性对数据进行分类。我想手动对这 4 个属性进行加权,但总是遇到“操作数无法与形状 (1,5) (4) 一起广播”的情况。

关于 weights : [callable] : a user-defined function which accepts an array of distances, and returns an array of the same shape containing the weights. 的文档很少(来自here)

这就是我现在所拥有的:

    for v in result:
        params = [v['a_one'], v['a_two'], v['a_three'], v['a_four']]
        self.training_data['data'].append(params)
        self.training_data['target'].append(v['answer'])

    def get_weights(array_weights):
        return [1,1,2,1]

    classifier = neighbors.KNeighborsClassifier(weights=get_weights)

最佳答案

可调用 sklearn 权重的说明

import numpy as np
from sklearn.neighbors import KNeighborsClassifier

创建模型训练的样本数据

df = pd.DataFrame({'feature1':[1,3,3,4,5], 'response':[1,1,1,2,2]})

y = df.response
# [1,1,1,2,2]

X_train = df[['feature1']]
# [1,3,3,4,5]

定义自定义距离函数(打印输入数据结构)

def my_distance(weights):
    print(weights)
    return weights

将 my_distance 中传递的模型定义为权重的可调用

knn = KNeighborsClassifier(n_neighbors=3, weights=my_distance)

knn.fit(X_train,y)

knn.predict([[1]])
# [[ 0.  2.  2.]]
# array([1])

说明:显示与预测值1最接近的3个邻居(n_neighbors=3)

X_train 中距离 1 最近的三个邻居:

1, 3, 3 

距离:

[[ 0.  2.  2.]]

1 - 1 = 0 
3 - 1 = 2
3 - 1 = 2

预测类别:

array([1])

关于machine-learning - Scikit-learn - KNeighborsClassifier 的用户定义权重函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17327880/

相关文章:

python-3.x - Sklearn中如何使用KBinsDiscretizer将连续数据放入bin中?

python - 如何使用 sklearn 并行拟合梯度提升模型?

postgresql - 将分类器保存到 postrgesql 数据库,在 scikit-learn 中

python-3.x - sklearn 中的 K 最近邻 - ValueError : query data dimension must match training data dimension

python - 如何从python中的数组中确定连接线的集合

machine-learning - 提高 ValueError ("Unknown label type: %s"% repr(ys)) ValueError : Unknown label type: (array

machine-learning - 如何计算生成问题的系统的精确度和召回率?

python - 如何有效地将 Gensim 语料库转换为 numpy 数组(或 scipy 稀疏矩阵)?

python - 决策树生成具有相同类的终端叶

postgresql - PostGIS 中的 K 最近邻查询