python - 在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 数据集,任何帮助将不胜感激?
解决方案
isd
是您的可调用对象,但isd()
它是一个调用并计算为调用的返回值。
所以,weights=isd
不用()
.
推荐阅读
- c# - 打开网站错误
- java - 在 Spring Boot 中使用 MongoTemplate 检查 MongoDB 连接
- node.js - 如何设置节点组件包以允许导入单个组件?
- java - Android Studio:我的所有项目的“即时运行”都显示为灰色
- javascript - addClass 到数组的最后一项
- encoding - ImpEx 导入阿拉伯语文本
- angular - 在 Angular 服务的 BehaviorSubject 中编辑对象的一部分
- c# - 如何在 C# 中将 DECIMAL STRING 转换为最接近的整数
- ruby - 如何使用 Rails App 在 NGINX 中保存 SSL 证书并创建虚拟主机?
- sonarqube - SonarQube-6.7.3 我们如何聚合项目数据