'<' ' function'实例之间不支持和'功能'

时间:2017-10-02 12:45:20

标签: python python-3.x machine-learning jupyter-notebook knn

在谷歌开发者关于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))

2 个答案:

答案 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函数,而不是使用ab调用它并返回结果。

如果你更新euc()来调用这样的函数:

def euc(a, b):
    return distance.euclidean(a, b)

应该可以正常工作。