在Jupyter(iPython)中运行它,我有一个字典,其中键是一个复合词,值是Model类的一个实例。我正在迭代我的化合物列表,并尝试将所有单个模型添加到该化合物的Model类实例的模型列表属性中。
这是完美的,因为我总结了如果模型是好还是D_compound_Models[cpd].summation += accuracy
但是当我D_compound_Models[cpd].models.append(model)
它看起来它是为每个实例中的所有化合物累加所有模型。
当我得到len(D_compound_Model [cpd] .models)时,它应该超过len(lpo)
,应该是780
。我想出了如何通过添加到lpo for-loop之外的列表来修复它,然后在最后将该属性添加到类中,但这不是我想要的方式。
为什么列表附加操作不能正常工作?
特别是因为累积金额正常工作......
这是我的班级
class Models:
def __init__(self,compound=None,models=[],summation=0.0,duration=0.0):
self.compound = compound; self.models = models; self.summation = summation; self.duration = duration
def score(self):
return(self.summation/len(self.models))
这是我将类的实例添加到相应的化合物
的地方from sklearn.cross_validation import LeavePOut
D_compound_Models = {}
lpo = LeavePOut(len(DF_attributes.index), p=2) #All combinations of 40 index values while leaving out 2
query_compounds = ["AG1024","AG1478"]
#Check order of indices
for cpd in query_compounds:
#Create compound instance
D_compound_Models[cpd] = Models(compound=cpd)
#Get sensitivity column for compound
SR_compound = DF_compoundSensitivity[cpd]
#Create and train models
for index_values in lpo: #There should be 780 of these
#Create model
model = #Some model object
#a bunch of model training stuff that's irrelevant
accuracy = #1 or 0
#Store models
D_compound_Models[cpd].models.append(model)
D_compound_Models[cpd].summation += accuracy
这就是我在最后检查它的方式
for cpd in query_compounds:
M = D_compound_Models[cpd]
print(cpd,M.summation,len(M.models),M.score())
这是我不想这样做的正确答案(最后添加列表)
#Correct: Note how 630 and 528 are not == 780. I do some filtering so it's alright
('AG1024', 304.0, 630, 0.48253968253968255)
('AG1478', 221.0, 528, 0.4185606060606061)
使用上面的代码(附加到列表)
这是不正确的答案#Incorrect
('AG1024', 304.0, 1158, 0.26252158894645944)
('AG1478', 221.0, 1158, 0.19084628670120898)
我确保每次在Jupyter中运行时重置课程。我甚至重新启动了内核并得到了相同的结果......