【问题标题】:'<' not supported between instances of 'function' and 'function''function' 和 'function' 的实例之间不支持 '<'
【发布时间】:2018-03-13 12:54:16
【问题描述】:

按照 youtube 上的 google 开发人员 ML 食谱,我编写了这段代码并尝试使用 jupyter python3 notebook 运行。链接:https://www.youtube.com/watch?v=AoeEHqVSNOw

我无法获得结果,因为我收到此错误 '

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))

【问题讨论】:

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


    【解决方案1】:

    错误是说在 Python 中一个函数不能大于另一个函数——这是有道理的!你需要一些值来比较,看看是否更大。

    在您的函数 euc() 中,您只是返回 distance.euclidean 函数,而不是使用 ab 调用它并返回结果。

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

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

    它应该可以正常工作。

    【讨论】:

      【解决方案2】:
      def euc(a,b):
          return distance.euclidean
      

      您的函数 euc 正在重新调整对 函数 distance.euclidean 的引用。

      你想调用它:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-22
        • 2020-11-13
        • 2021-11-25
        • 1970-01-01
        • 1970-01-01
        • 2018-09-08
        • 2020-07-28
        • 2020-05-19
        相关资源
        最近更新 更多