我对Python还是很陌生,所以我确定这不是最有效的编码方法。我遇到的问题是我有第二个For循环,该循环在另一个for循环内运行。第一次运行良好,但是在第二次迭代中,第二个for循环不会注册数据并跳过数据,因此它永远不会再次运行。我使用了一个压缩的元组,它看起来完全失去了价值。
class Model:
def predict(self, data):
prediction = []
distances = []
for item in data:
distances.clear()
for trainedItem in self.Train_Data:
distances.append([(abs((item[0] - trainedItem[0][3])) + abs((item[1] - trainedItem[0][1])) + abs((item[2] - trainedItem[0][2])) + abs((item[3] - trainedItem[0][3]))), trainedItem[1]])
distances.sort()
targetNeighbors = []
for closest in distances[:self.K]:
targetNeighbors.append(closest[1])
prediction.append(Counter(targetNeighbors).most_common()[0][0])
return prediction
class HardcodedClassifier:
def fit(X_Train, Y_Train, k):
Model.Train_Data = zip(X_Train, Y_Train)
Model.K = k
return Model`
答案 0 :(得分:1)
迭代器已耗尽。尝试PDF
,以便每次在内部for循环中进行迭代。
答案 1 :(得分:0)
根据我所看到的,您正在调用Model类构造函数,而不是实例化模型对象并访问其数据。当声明一个类时,该声明仅创建一个构造函数对象。构造函数将返回您在调用时定义的类型的新对象。
class Bacon:
tasty = true
def __init__():
self.salty = true
Bacon
>> <class constructor object at #memoryaddress>
Bacon.tasty
>> True
Bacon.salty
>> Error: Attribute not found
baconstrip = Bacon()
baconstrip
>> <Bacon object at #memoryaddress>
baconstrip.tasty
>> True
baconstrip.salty
>> True
baconstrip对象是Bacon类型,具有内存和为其分配的自己的名称空间来存储变量。培根变量是构造函数,您也可以像访问对象一样访问它,但这不是它本身的实际实例。
输入您的代码
class HardcodedClassifier:
def __init__(self, model): # to initialize the class, provide a model.
self.model = model
def fit(X_Train, Y_Train, k):
self.model.Train_Data = zip(X_Train, Y_Train)
self.model.K = k
# no need to return a value. The state of the object is preserved.
mymodel = Model()
myclassifier = HardcodedClassifier(mymodel)