1.基本環境
編譯器:PyCharm 2019.1.2
虛擬環境:Anaconda虛擬環境
scikit-learn版本: 0.22.2.post1
2.數據歸一化
from sklearn.preprocessing import StandardScaler # 歸一化
# 歸一化操作
scaler = StandardScaler()
x_train_data = scaler.fit_transform(x_train_data)
x_test_data = scaler.transform(x_test_data)
3.模型調參
from sklearn.model_selection import GridSearchCV # 在sklearn中主要是使用GridSearchCV調參
svc_model = svm.SVC(kernel='rbf')
param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]} # param_grid:我們要調參數的列表(帶有參數名稱作爲鍵的字典),此處共有14種超參數的組合來進行網格搜索,進而選擇一個擬合分數最好的超平面係數。
grid_search = GridSearchCV(svc_model, param_grid, n_jobs=8, verbose=1) # n_jobs:並行數,int類型。(-1:跟CPU核數一致;1:默認值);verbose:日誌冗長度。默認爲0:不輸出訓練過程;1:偶爾輸出;>1:對每個子模型都輸出。
grid_search.fit(x_train_data, y_train_data.ravel()) # 訓練,默認使用5折交叉驗證
best_parameters = grid_search.best_estimator_.get_params() # 獲取最佳模型中的最佳參數
print("cv results are" % grid_search.best_params_, grid_search.cv_results_) # grid_search.cv_results_:給出不同參數情況下的評價結果。
print("best parameters are" % grid_search.best_params_, grid_search.best_params_) # grid_search.best_params_:已取得最佳結果的參數的組合;
print("best score are" % grid_search.best_params_, grid_search.best_score_) # grid_search.best_score_:優化過程期間觀察到的最好的評分。
# for para, val in list(best_parameters.items()):
# print(para, val)
svm_model = svm.SVC(kernel='rbf', C=best_parameters['C'], gamma=best_parameters['gamma']) # 最佳模型