我正在使用 scikit-learn 进行 GMM 培训,并试图改变混合组件的数量。我遇到了问题,已修复 here 。
我最终得到了这个代码:
from sklearn.mixture import GMM
class_names = ['name1','name2','name3']
covs = ['spherical', 'diagonal', 'tied', 'full']
num_comp = [1,2,3]
models = dict()
for c in class_names:
for cov in covs:
models[c,cov] = values = []
for num in num_comp:
values.append(GMM(n_components=num,covariance_type=cov, init_params='wmc',n_init=1, n_iter=10))
print models
我稍后再次使用模型 dict() 并且遇到问题,因为我不知道如何使用 dict。
training_data={'name1':'path2data1', 'name2': path2data2, 'name3': path2data3}
for cov in covs:
for c in class_names:
for num in num_comp:
models[c][cov].fit(training_data[c])
我收到错误“KeyError:'name1'”
我也试过 models[c,cov].fit(training_data[c]) 但后来我得到错误“AttributeError: 'list' object has no attribute 'fit'”
提前感谢您的任何提示!
最佳答案
在这里,您通过元组为 dict 赋值( c, cov
等效于 (c, cov)
):
models[c,cov] = values = []
因此,在这里您应该通过元组访问 dict 值:
for cov in covs:
for c in class_names:
for num in num_comp:
models[(c, cov)].fit(training_data[c])
AttributeError
抛出,因为您实际上访问了列表:models[(c,cov)]
是您之前创建的列表 (values
)更新评论,试试这个:
for c in class_names:
models[c] = {}
for cov in covs:
models[c][cov] = values = []
for num in num_comp:
values.append(GMM(n_components=num,covariance_type=cov, init_params='wmc',n_init=1, n_iter=10))
但在这里你会在
list
中得到 models[c][cov]
并且应该迭代它:for cov in covs:
for c in class_names:
for num in num_comp:
for f in models[c][cov]
f.fit(training_data[c])
关于Python:关键错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20400523/