python - knn 算法 - 类型错误:manhattan_dist() 缺少 1 个必需的位置参数
问题描述
我的 knn 算法 python 脚本有问题。我将算法中使用的指标更改为曼哈顿指标。所以这就是我写的:
def manhattan_dist(self, data1, data2):
return sum(abs(data1 - data2))
X = df.iloc[:, :-1].values
y = df.iloc[:, 36].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
knn = KNeighborsClassifier(n_neighbors=5, metric=manhattan_dist)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(classification_report(y_test, y_pred))
问题是当我运行这个脚本时,我有这个错误:
TypeError: manhattan_dist() missing 1 required positional argument: 'data2'
此错误与该行有关
knn.fit(X_train, y_train)
在欧几里德距离下一切正常。如果您需要有关我的数据集的任何信息,请询问我。代码很长。
我对python还不是很熟练,现在是我使用knn算法的时候了。你有什么建议吗?
解决方案
函数定义中不需要 self 。有关使用自定义距离度量的示例,请参见以下代码。
from sklearn.neighbors import KNeighborsClassifier
def manhattan_dist(data1, data2):
return sum(abs(data1 - data2))
X = [[0, 1, 2],
[3, 4, 5],
[8, 9, 1],
[11, 7, 9]]
y = [0, 1, 1, 0]
knn = KNeighborsClassifier(n_neighbors=3, metric=manhattan_dist)
knn.fit(X, y)
knn.predict(X) # array([1, 1, 1, 1])
推荐阅读
- java - How to verify service.methodA called in service.methodB from controller test?
- python - 计算excel文件中的电子邮件(python)
- oracle - ORA-06550: 必须声明标识符
- vba - 将块插入到 (p1,p2) 点的中点并划分 (p1,p2) 距离并插入块
- javascript - 面临文本缩进第二行和更多行的问题
- angular - 如何将 propertiesArray 初始化为数组
- javascript - 如何在 QML 的自定义 ComboBox 中突出显示所选项目?
- gpu - 使用 rtx 3080 进行简单的 F64 模拟
- python - pymongo:如何用字典列表替换许多文档
- python-3.x - ParallelSSHClient - Python - 处理身份验证错误