我的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算法了。你有什么建议吗?
发布于 2020-10-19 17:11:25
您不需要在函数定义中使用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])https://stackoverflow.com/questions/64424217
复制相似问题