我正在处理一些包含元组和字典的复杂python列表。如何获得这样的python列表的层次结构:
[意思是:-17.71262,标准:1.74160,params:{' epsilon':0,' C':1,' gamma': 0.0001}意思是:-13.05773,标准:2.16184,params:{' epsilon':0,' C':1,' gamma':0.0101}意思是: - 17.64222,std:1.47564,params:{' epsilon':4, ' C':1,' gamma':0.0001}意思是:-13.61797,标准:1.95222,params: {' epsilon:#4;' C':1,' gamma':0.0101}]
它是一个包含4个项目的列表,每个项目是3个项目的元组,第三个元组项目是带有三个键的字典
这是scikit通过交叉验证学习网格搜索的结果,这是使用过的代码:
param_grid = {' C':np.arange(1,50000,25000)'小量':np.arange(0,8,4),'伽马':np.arange(0.0001,0.02,0.02)} opt = GridSearchCV(SVR(),param_grid,scoring =' neg_mean_absolute_error',n_jobs = 8,cv = 3,verbose = 1) opt.fit(tvr_sets [:,:2],tvr_sets [:,2]) 打印(opt.grid_scores _)
是否有可以描述此层次结构的python命令?
答案 0 :(得分:2)
这是从网格搜索和交叉验证返回的。这不是一个元组,就我而言它是一个列表,但它是相当不重要的。您有一个列表,其中包含网格搜索的每个输出。
每个元素都是特定params
GridSearch & Cross-validation => {std: float, mean: float, params: {Your grid search params}}
std/mean
来自交叉验证过程。
基于评论
将其写入文件后,我想以相同的格式再次阅读,并访问项目以绘制结果
您可以创建自己的格式
哈希你的参数如下
hash_key = '_'.join(['{0}_{1}'.format(k, v) for (k,v) in params.iteritems() ])
会产生类似这样的东西
'epsilon_0_C_1_gamma_0.0001'
我会循环返回你的结构,如下所示
import csv
with open('output.csv', 'w') as output:
csvObj = csv.writer(output)
# write headers
csvObj = csv.writerow(['params','mean','std'])
for cv_output in cv_outputs:
std = cv_output['std']
mean = cv_output['mean']
params = cv_output['params']
hash_params = '_'.join(['{0}_{1}'.format(k, v) for (k,v) in params.iteritems() ])
csvObj.writerow([hash_params, mean, std])
或者您可以将params
键拆分为列。我会留下让你决定。