knn algorithm - TypeError: manhattan_dist() missing 1 required positional argument

knn algorithm - TypeError: manhattan_dist() missing 1 required positional argument

我的 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])