Python 用元组从字典中提取值

Python 用元组从字典中提取值,python,machine-learning,deep-learning,tuples,svm,Python,Machine Learning,Deep Learning,Tuples,Svm,我正在研究支持向量机,我使用gridsearchcv提取多项式、线性和RBF的最佳参数。我想分离C和degree值,这样我就可以为fit函数调用数据集的最佳参数,在这里我可以使用调整后的参数计算精度 有元组的字典是 ({'C':1,'degree':1},{'C':0.1,'degree':1},{'C':1,'degree':1}) 我试着用 for i in c.items(): value=i print(value) 但有一个错误: AttributeError

我正在研究支持向量机,我使用gridsearchcv提取多项式、线性和RBF的最佳参数。我想分离C和degree值,这样我就可以为fit函数调用数据集的最佳参数,在这里我可以使用调整后的参数计算精度

有元组的字典是

({'C':1,'degree':1},{'C':0.1,'degree':1},{'C':1,'degree':1})

我试着用

for i in c.items():
        value=i
    print(value)
但有一个错误: AttributeError:“tuple”对象没有属性“items”

我的代码的进度是:

 def svc_param_selection(self, X, y, nfolds):
    #We tune two hyperparameters C and d using svc_param_selection
    #the slack penalty hyperparameter
    Cs = [0.0001, 0.001, 0.01, 0.1, 1, 10, 100]
    #degrees of polynomial kernel of svc
    degrees = [1, 2, 3, 4, 5]
    #initialize the paremeter grid as dictionary
    param_grid = {'C': Cs, 'degree' : degrees}
    #initialize search for best parameters using input nfold cross validation
    search = grid_search.GridSearchCV(svm.SVC(kernel='poly'), param_grid, cv=nfolds)
    search1 = grid_search.GridSearchCV(svm.SVC(kernel='linear'), param_grid, cv=nfolds)
    search2 = grid_search.GridSearchCV(svm.SVC(kernel='rbf'), param_grid, cv=nfolds)
    #fit the search object to input training data
    search.fit(X, y)
    search1.fit(X, y)
    search2.fit(X, y)
    #return the best parameters
    search.best_params_
    search1.best_params_
    search2.best_params_
    print("[*] Searching for the best parameters for fitting the data.......")
    print("Parameters are :")
    #print(search.best_params_)
    #print(search1.best_params_)
    #print(search2.best_params_)
    return search.best_params_,search1.best_params_,search2.best_params_


def param_sel(self):
    X_train,y_train,X_test,y_test=self.norm()
    #self.svc_param_selection(X_train, y_train, 10)
    degree=np.array([])
    c= self.svc_param_selection(X_train, y_train, 10)
    print(c)
    for i in c.items():
        value=i
    print(value)


def fit(self):
    X_train,y_train,X_test,y_test=self.norm()
    final_svc_poly1 = svm.SVC(C=1, degree=1, kernel='poly')
    final_svc_poly2 = svm.SVC(C=1, degree=1, kernel='linear')
    final_svc_poly3 = svm.SVC(C=1, degree=1, kernel='rbf')

    final_svc_poly1.fit(X_train, y_train)
    final_svc_poly2.fit(X_train, y_train)
    final_svc_poly3.fit(X_train, y_train)
    print("[*] Computing accuracy of test dataset")
    print("Accuracy with polynomial kernel",final_svc_poly1.score(X_test, y_test))
    print("Accuracy with linear kernel",final_svc_poly2.score(X_test, y_test))
    print("Accuracy with RBF kernel",final_svc_poly3.score(X_test, y_test))
输出:

[*] Searching for the best parameters for fitting the data.......
Parameters are :
({'C': 1, 'degree': 1}, {'C': 0.1, 'degree': 1}, {'C': 1, 'degree': 1})
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-106-4be4dd58a851> in <module>
      1 if __name__=='__main__':
----> 2     main()

<ipython-input-105-7b466d716ef5> in main()
      7     #X_train,y_train=first.split_data()
      8     #print(X_train)
----> 9     param=second.param_sel()
     10     second.fit()

<ipython-input-104-57f0d958ed41> in param_sel(self)
     69         c= self.svc_param_selection(X_train, y_train, 10)
     70         print(c)
---> 71         for i in c.items():
     72             value=i
     73         print(value)
[*]搜索用于拟合数据的最佳参数。。。。。。。
参数包括:
({'C':1,'degree':1},{'C':0.1,'degree':1},{'C':1,'degree':1})
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在里面
1如果“名称”等于“主名称”:
---->2主要内容()
大体上
7#X#u列,y#u列=第一个。拆分数据()
8#打印(X#U系列)
---->9参数=第二个参数
10秒
在param_sel(self)中
69 c=自svc参数选择(X列,y列,10)
70印刷品(c)
--->71对于i in c.项():
72值=i
73打印(值)
AttributeError:'tuple'对象没有属性'items'

您的值-
C=({'C':1,'degree':1},{'C':0.1,'degree':1},{'C':1,'degree':1})
是字典的元组,因此它没有属性

您可以使用-

for item in C:
    print(item)
因此,根据澄清,确定-

c_values = []
degrees = []
for item in C:
    c_values.append(item['C'])
    degrees.append(item['degree'])  

顺便说一句,在你的循环中,你可以在每次迭代中覆盖值,或者在循环外打印它。

谢谢,我进步了一点,但仍然得到了{C:1,degree:1}和下一个迭代,我想创建一个数组,用于存储所有C值,另一个数组用于存储度。@DevanshMishra我根据您的评论编辑了我的答案。它仍然给出错误类型错误:元组索引必须是整数或切片,而不是strw当我在循环中更改时,C_值。按C_值追加(C['C'])。追加(项['C'])。它运行良好。谢谢:)