【问题标题】:Python Attribute Error for Nearest Neighbor Classifier最近邻分类器的 Python 属性错误
【发布时间】:2019-09-15 14:57:34
【问题描述】:

在此处获取属性错误。

我似乎找不到最近邻分类器的实现有什么问题。使用不同的分类器,我的效果很好,准确率 > 90%,所以它确实必须是第 14 行。任何帮助将不胜感激,试图确保它在 Python 3 中运行。

第 14 行:

label = self.closest(row)

我得到错误:

AttributeError: 'DavesKNN' 对象没有属性 'closest'

完整代码:

from scipy.spatial import distance

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

class DavesKNN():
    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:
                    best_dist = dist
                    best_index = i
            return self.y_train[best_index]

#Import a Dataset
from sklearn import datasets
iris = datasets.load_iris()

# Features and Labels
X = iris.data
y = iris.target

# Partition Features and Labels into New Sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .5)

# from sklearn.neighbors import KNeighborsClassifier
# my_classifier = KNeighborsClassifier()
my_classifier = DavesKNN()

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 scikit-learn


    【解决方案1】:

    "def nearest(self, row):" 只是在不应该缩进的时候缩进了。我觉得自己像个白痴。现在可以了。

    【讨论】:

      【解决方案2】:

      您尚未为 DavesKNN() 定义“最近”属性。这意味着类似于一个函数,当你初始化类时,你必须传递属性closest。如果您从其他地方复制 DavesKNN(),那么您需要导入它。

      详细说明如何合并closest属性:

      您需要在类的开头添加一个__init__() 函数,这样您就可以在括号内传递属性并像这样声明它们:

      def __init__(self, closest):
          self.closest = closest
      

      在课堂内。

      【讨论】:

      • 它现在告诉我 TypeError: __init__() missing 1 required positional argument: 'closest'
      • 对。那是因为你必须修改你初始化 DavesKNN() 对象的行以包含最接近的,并且你必须有一个最接近的变量
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2013-10-12
      • 1970-01-01
      • 2011-06-23
      相关资源
      最近更新 更多