天天看點

Scikit-learn_模型評估和參數調優_參數調優一.描述二.執行個體

一.描述

  • 網格搜尋法
    • 是周遊多個參數多個取值的全部組合,使用每一組參數組合做訓練和評估測試,記錄評估結果,最終找出最優評估結果,該結果對應的參數就是最優參數。
    • 訓練的時間與資料集大小、訓練次數、參數數量以及每個參數的取值數量正相關。當資料集較大時,網格搜尋法耗時非常長。是以使用網格搜尋法參數調優(調參)時,應盡可能減少參與調參的參數個數,限制每一個參數的取值數量
  • 随機搜尋法
    • 随機搜尋法類似于網格搜尋法,隻是不需要給出每個參數的取值,而是給出每個參數的取值範圍。該方法會在每個參數的取值範圍内随機取值,得到參數組合并對其進行訓練和評估。
    • 随機搜尋發适用于參數取值不确定,需要再較大的範圍内尋找最優參數的場合

二.執行個體

import numpy as np
x, y = np.mgrid[-2:2:50j, -2:2:50j]
z = x * np.exp(-x ** 2 -y ** 2)
_x = np.random.random(1000) * 4 - 2
_y = np.random.random(1000) * 4 - 2
_z = _x * np.exp(-_x ** 2 - _y ** 2) + (np.random.random(1000) - 0.5) * 0.1
# 訓練樣本集
X_train = np.stack((_x, _y), axis=1)
# 訓練标簽集
y_train = _z
# 測試樣本集
X_test = np.stack((x.ravel(), y.ravel()), axis=1)
# 測試标簽集
y_test = z.ravel()
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV
args = {
    # 指定參數的7種取值
    'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000],
    'gamma': [0.001, 0.01, 0.1, 1, 10, 100, 1000]
}
# 執行個體化網格搜尋器
gs = GridSearchCV(SVR(), args, cv=5)
gs.fit(X_train, y_train)
# 評估網格搜尋器
gs.score(X_test, y_test)
# 目前最優參數
gs.best_params_
%matplotlib
# 對測試集做回歸分析
z_gs = gs.predict(X_test)
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
plt.figure(figsize=(8, 8))
ax = plt.subplot(111, projection='3d')
ax.scatter3D(_x, _y, _z, c='r')
ax.plot_surface(x, y, z_gs.reshape(x.shape), cmap=plt.cm.hsv, alpha=0.5)
plt.show()