Machine learning I';我试图用Python从头开始创建KNearestNeighbors算法,但收到一个属性错误

Machine learning I';我试图用Python从头开始创建KNearestNeighbors算法,但收到一个属性错误,machine-learning,Machine Learning,错误是指第45行(prediction=my_classifier.predict(features_test))。但是,随后错误将继续执行属性error,该属性随后引用第41行(my_classifier=scrastykn())。它声明对象没有“predict”属性: from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.neighbors import K

错误是指第45行
(prediction=my_classifier.predict(features_test))。但是,随后错误将继续执行属性error,该属性随后引用第41行
(my_classifier=scrastykn())
。它声明对象没有“predict”属性:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from scipy.spatial import distance

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

class ScrappyKNN():
    def fit(self, features_train, labels_train):
        self.features_train = features_train
        self.labels_train = labels_train

        def predict(self, features_test):
            predictions = []
            for item in features_test:
                label = self.closest(item)
                predictions.append(label)

                return predictions

            def closest(self, item):
                best_dist = euc(item, self.features_train[0])
                best_index = 0
                for i in range(1, len(self.features_train)):
                    dist = euc(item, self.features_train[i])
                    if dist < best_dist:
                        best_dist = distance
                        best_index = i

                return self.labels_train[best_index]

iris = datasets.load_iris()

features = iris.data
labels = iris.target

features_train, features_test, labels_train, labels_test =           train_test_split(features, labels, test_size=.5)

my_classifier = ScrappyKNN()
# my_classifier = KNeighborsClassifier()
my_classifier.fit(features_train, labels_train)

prediction = my_classifier.predict(features_test)

print(accuracy_score(labels_test, prediction))

iris1 = [[7.1, 2.9, 5.3, 2.4]]
iris_prediction = my_classifier.predict(iris1)

# Conditional Code

if iris_prediction[0] == 0:
    print("Setosa")

if iris_prediction[0] == 1:
    print("Versicolor")

if iris_prediction[0] == 2:
    print("Virginica")
从sklearn导入数据集
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.neighbors导入KNeighborsClassifier
从sklearn.metrics导入准确性\u分数
从scipy.spatial导入距离
def euc(a、b):
返回距离。欧几里德(a,b)
类%ykn():
def配合(自身、功能、标签):
self.features\u train=features\u train
self.labels\u train=标签\u train
def预测(自测试、特性测试):
预测=[]
对于功能测试中的项目:
标签=自我最近(项目)
预测。追加(标签)
回归预测
def(自我,项目):
最佳距离=euc(项目、自身特征\u序列[0])
最佳指数=0
对于范围内的i(1,len(自特性)
dist=euc(项目、自身特征\u序列[i])
如果距离<最佳距离:
最佳距离=距离
最佳指数=i
返回自我标签列车[最佳索引]
iris=数据集。加载\u iris()
特征=iris.data
标签=iris.target
特性测试、特性测试、标签测试、标签测试=特性测试拆分(特性、标签、测试大小=.5)
my_分类器=scrastykn()
#my_分类器=KNeighborsClassifier()
my\u classifier.fit(功能\u系列、标签\u系列)
预测=我的分类器。预测(特征测试)
打印(准确度\分数(标签\测试、预测))
iris1=[[7.1,2.9,5.3,2.4]]
iris\u prediction=我的分类器.predict(iris1)
#条件码
如果iris_预测[0]==0:
打印(“Setosa”)
如果iris_预测[0]==1:
打印(“彩色”)
如果iris_预测[0]==2:
印刷品(“维吉尼亚”)

我在课堂上做了类似的事情。我有K个最近邻的答案键,还有iris数据。也许这能给你一个更好的指导,让你知道你在做什么。如果您滚动到E部分,您将看到KNN。
我在课堂上做了类似的事情。我有K个最近邻的答案键,还有iris数据。也许这能给你一个更好的指导,让你知道你在做什么。如果您滚动到E部分,您将看到KNN。
弄清楚那是什么。。。除了间距问题(谢谢Gary!),我没有输入best_dist=dist,而是输入best_dist=dist。非常感谢您的投入!!亲爱的Gwenevere,您提供的信息,我将在我的下一个项目中使用,谢谢

弄清楚那是什么。。。除了间距问题(谢谢Gary!),我没有输入best_dist=dist,而是输入best_dist=dist。非常感谢您的投入!!亲爱的Gwenevere,您提供的信息,我将在我的下一个项目中使用,谢谢

你的缩进是错的。缩进
def predict(…)
及其后的所有内容,向左缩进一个制表符宽度,然后再向左缩进一次
def closest(…)
。谢谢你,Gary!顺便说一句,我叫伯特。你认为这就是我收到错误的原因吗?再次感谢,祝你和你的家人节日快乐!是的,因为您是在函数内部定义函数,而不是为类定义函数。嗨,Gary,,,我按照您的建议排列了代码;但是,我收到了其他错误,例如:prediction=my\u classifier.predict(features\u test)文件“C:\Users\BBrag\Desktop\Machine Learning App\flowers.py”的第45行“C:\Users\BBrag\Desktop\Machine Learning App\flowers.py”,predict label=self.closest(item)文件的第18行“C:\Users\BBrag\Desktop\Machine Learning App\flowers.py”,第28行,如果最近距离def predict(…)
及其后的所有内容向左一个选项卡宽度,然后
def closest(…)
再次向左边。谢谢你,Gary!我的名字是Burt,顺便说一句。你认为这就是我收到错误的原因吗?再次感谢你,祝你和你的家人节日快乐!是的,因为你是在函数内部定义函数,而不是为类定义函数。嗨,Gary,,,我按照你的建议排列了代码;但是,我收到了其他代码er错误,例如:prediction=my_分类器中第45行的文件“C:\Users\BBrag\Desktop\Machine Learning App\flowers.py”。predict(功能测试)文件“C:\Users\BBrag\Desktop\Machine Learning App\flowers.py”,predict label=self.Closes(项目)文件“C:\Users\BBrag\Desktop\Machine Learning App\flowers.py”中第18行,第28行,在最近的if dist