问题描述
我的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,0]
knn = KNeighborsClassifier(n_neighbors=3,metric=manhattan_dist)
knn.fit(X,y)
knn.predict(X) # array([1,1])