在谷歌开发者关于youtube的ML食谱后,我编写了这段代码并试图使用jupyter python3 notebook.Link运行:https://www.youtube.com/watch?v=AoeEHqVSNOw
我无法获得结果,因为我收到此错误'<' ' function'实例之间不支持和'功能'
from scipy.spatial import distance
def euc(a,b):
return distance.euclidean
class KNN():
def fit(self,X_train,y_train):
self.X_train=X_train
self.y_train=y_train
def predict(self,X_test):
predictions=[]
for row in X_test:
label=self.closest(row)
predictions.append(label)
return predictions
def closest(self,row):
best_dist=euc(row, self.X_train[0])
best_index=0
for i in range(1,len(self.X_train)):
dist=euc(row,self.X_train[i])
if (dist < best_dist): # <--error here
best_dist=dist
best_index=i
return self.y_train[best_index]
#KNeighbors Classifier
my_classifier=KNN()
my_classifier.fit(X_train,y_train)
predictions=my_classifier.predict(X_test)
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test,predictions))
答案 0 :(得分:0)
def euc(a,b):
return distance.euclidean
您的功能euc
正在重新调整对功能 distance.euclidean
的引用。
您想要调用:
def euc(a,b):
return distance.euclidean(a, b)
答案 1 :(得分:0)
错误在于,在Python中,一个函数不能比另一个函数更大 - 这是有道理的!你需要一些值来比较,看看是否有更大的值。
在您的函数euc()
中,您只需返回distance.euclidean
函数,而不是使用a
和b
调用它并返回结果。
如果你更新euc()
来调用这样的函数:
def euc(a, b):
return distance.euclidean(a, b)
应该可以正常工作。