首页 > 解决方案 > 在python中具有平方iverse权重的Knn分类器(权重是一个可调用函数)

问题描述

我正在尝试使用 sklearn.neighbors.KNeighborsClassifier 包应用具有平方反权重的 kNN 分类器。根据文档,我们可以为权重定义一个函数。我定义了以下函数来获得距离的平方倒数作为权重:

import numpy as np
def isd():
    w= []
    for i in range(len(x_train)):
        # first we compute the euclidean distance
        distance = np.sqrt(np.sum(np.square(x_test 
        x_train[i,:])))
        # add it to list of distances
        w.append([1/(np.square(distance)), i]) 
        return w

然后我使用 KNeighborsClassifier 如下:

neighbors = list(range(1,11))
#making an empty vector to store accuracy scores
ac_scores3= []
# fitting the model
for K in neighbors:
    K_value = K+1
    knn3= KNeighborsClassifier(K_value,weights=isd())
    knn3.fit(x_train,y_train.values.ravel()) 
    y_pred3=knn3.predict(x_test)
    ac_scores3.append(accuracy_score(y_test,y_pred3))

# finding test error by subtracting ac from 1
TE3 = [1 - x for x in ac_scores3]

我收到以下错误:

ValueError:无法识别权重:应该是“统一”、“距离”或可调用函数

顺便说一句,我使用的是 usps 数据集,任何帮助将不胜感激?

标签: pythonpython-3.xscikit-learn

解决方案


isd是您的可调用对象,但isd()它是一个调用并计算为调用的返回值。

所以,weights=isd不用().


推荐阅读