我有一个 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/