我正在编写以下分类器来检查 sci-kit。
...
class MyClassifier():
def fit(self, x_train, y_train):
self.x_train = x_train
self.y_train = y_train
return
def predict(self, x_test):
prediction = []
for row in x_test:
label = self.closest(row)
prediction.append(label)
return prediction
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[0])
if dist < best_dist:
best_dist = dist
best_index = i
return self.y_train[best_index]
后来,我想使用自己的分类器:
# Use my own Classifier
classifer = MyClassifier()
print(classifer)
classifer = classifer.fit(x_train, y_train)
prediction = classifer.predict(x_test)
print(prediction)
print(y_test)
当我运行它时,出现以下错误:
<__main__.MyClassifier object at 0x103ec5668>
Traceback (most recent call last):
File "/.../NewClassifier.py", line 72, in <module>
prediction = classifer.predict(x_test)
AttributeError: 'NoneType' object has no attribute 'predict'
predict() 函数有什么问题?
请您参考如下方法:
你的类方法
def fit(self, x_train, y_train):
self.x_train = x_train
self.y_train = y_train
return
不返回任何内容,因此它隐式返回None。
因此 classifer = classifer.fit(x_train, y_train) 会用 None 覆盖 .MyClassifier 类型的名为 classifer 的变量
A None 没有您可以调用的方法 - 这就是您收到的确切错误消息。
您应该将classifer = classifer.fit(x_train, y_train)更改为简单的
classifer.fit(x_train, y_train)
因此,您可以将名为 classifer 的变量保留为您的类实例,而不是使用 None“覆盖”它。
这应该可以修复它:
# Use my own Classifier
classifer = MyClassifier()
print(classifer)
classifer.fit(x_train, y_train)
prediction = classifer.predict(x_test)
print(prediction)
print(y_test)


