簡體   English   中英

打印參數和分數 GridSearchCV

[英]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*nlen(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM