Python列表层次结构

时间:2016-12-09 02:54:32

标签: python

我正在处理一些包含元组和字典的复杂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命令?

1 个答案:

答案 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键拆分为列。我会留下让你决定。