[英]Print parameters and scores GridSearchCV
我不明白為什么我不能在 GridSearchCV 中打印具有不同參數的所有分數。
代碼:
from sklearn.svm import SVC
pipe_svm = Pipeline([
('sc', StandardScaler()),
('SVM', SVC())
])
params_svm = {'SVM__C': np.logspace(-2, 10, 13),
'SVM__kernel': ['rbf', 'poly', 'sigmoid']}
search_svm = GridSearchCV(estimator=pipe_svm,
param_grid=params_svm,
cv = 5,
return_train_score=True)
search_svm.fit(X_train, y_train)
print(search_svm.best_score_)
print(search_svm.best_params_)
輸出:
0.9004240532229588
{'SVM__C': 1.0, 'SVM__kernel': 'rbf'}
這很棒,但我想用給定的參數打印所有不同的分數(與最好的進行比較)。 下面是我嘗試過的,它缺少許多不同的參數組合與相應的分數。
代碼:
scores_svm = search_svm.cv_results_['mean_test_score']
for score, C, kernel in zip(scores_svm, np.logspace(-2, 10, 13), ['rbf', 'poly', 'sigmoid']):
print(f"{C, kernel}: {score:.10f}")
輸出:
0.01, rbf: 0.8500203678
0.1, poly: 0.6785667684
1.0, sigmoid: 0.8364788196
所需的輸出將包括具有不同內核的np.logspace(-2, 10, 13)
所有 C 值並分配相應的分數。 像這樣的東西:
0.001, rbf: corresponding score
0.01, rbf: corresponding score
1.0, rbf: corresponding score
10.0, rbf: corresponding score
.
.
.
等等
這應該是:
kernels = ['rbf', 'poly', 'sigmoid']
C = np.logspace(-2, 10, 13)
for idx, kernel in enumerate(kernels):
for score, c in (zip(scores_svm[idx*len(C): (idx+1)*len(C)], C)):
print(f"{c, kernel}: {score:.10f}")
實際上len(scores_svm)
是13*n
而len(np.logspace(-2, 10, 13))
是13
。
當它們的長度不同時,如何將它們拉在一起。 這就是為什么將它們壓縮在一起時,您只能得到其中的三個。 因為 zip 內的最小 len 為 3。
示例代碼:
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
import numpy as np
from sklearn.model_selection import GridSearchCV
X_train = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1], [3, 1], [3, 2], [2, 3]])
y_train = np.array([1, 1, 2, 2, 1, 2, 1])
pipe_svm = Pipeline([
('sc', StandardScaler()),
('SVM', SVC())
])
params_svm = {'SVM__C': np.logspace(-2, 10, 13),
'SVM__kernel': ['rbf', 'poly', 'sigmoid']}
search_svm = GridSearchCV(estimator=pipe_svm,
param_grid=params_svm,
cv = 2,
return_train_score=True)
search_svm.fit(X_train, y_train)
print(search_svm.best_score_)
print(search_svm.best_params_)
# 0.41666666666666663
# {'SVM__C': 0.01, 'SVM__kernel': 'rbf'}
scores_svm = search_svm.cv_results_['mean_test_score']
for score, C, kernel in zip(scores_svm, np.logspace(-2, 10, 13), ['rbf', 'poly', 'sigmoid']):
print(f"{C, kernel}: {score:.10f}")
(0.01, 'rbf'): 0.4166666667
(0.1, 'rbf'): 0.4166666667
(1.0, 'rbf'): 0.4166666667
(10.0, 'rbf'): 0.4166666667
(100.0, 'rbf'): 0.4166666667
(1000.0, 'rbf'): 0.4166666667
(10000.0, 'rbf'): 0.4166666667
(100000.0, 'rbf'): 0.4166666667
(1000000.0, 'rbf'): 0.4166666667
(10000000.0, 'rbf'): 0.4166666667
(100000000.0, 'rbf'): 0.4166666667
(1000000000.0, 'rbf'): 0.4166666667
(10000000000.0, 'rbf'): 0.4166666667
(0.01, 'poly'): 0.4166666667
(0.1, 'poly'): 0.4166666667
(1.0, 'poly'): 0.4166666667
.
.
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.