1.簡單網格搜索法
- Lasso算法中不同的參數調整次數

############################# 使用網格搜索優化模型參數 #######################################
#導入套索回歸模型
from sklearn.linear_model import Lasso
#導入數據集拆分工具
from sklearn.model_selection import train_test_split
#導入紅酒數據集
from sklearn.datasets import load_wine
#載入紅酒數據集
wine = load_wine()
#將數據集差分為訓練集與測試集
X_train,X_test,y_train,y_test = train_test_split(wine.data,wine.target,random_state=38)
#設置初始分數為0
best_score = 0
#設置alpha參數遍歷0.01,0.1,1,10
for alpha in [0.01,0.1,1.0,10.0]:
#最大迭代數遍歷100,1000,5000,10000
for max_iter in [100,1000,5000,10000]:
lasso = Lasso(alpha=alpha,max_iter=max_iter)
#訓練套索回歸模型
lasso.fit(X_train,y_train)
score = lasso.score(X_test,y_test)
#令最佳分數為所有分數中的最高值
if score > best_score:
best_score = score
#定義字典,返回最佳參數和最佳最大迭代數
best_parameters = {'alpha':alpha,'最大迭代次數':max_iter}
#打印結果
print('模型最高分為:{:.3f}'.format(best_score))
print('最佳參數設置:{}'.format(best_parameters))
模型最高分為:0.889
最佳參數設置:{'alpha': 0.01, '最大迭代次數': 100}
#將數據集差分為訓練集與測試集
X_train,X_test,y_train,y_test = train_test_split(wine.data,wine.target,random_state=0)
#設置初始分數為0
best_score = 0
#設置alpha參數遍歷0.01,0.1,1,10
for alpha in [0.01,0.1,1.0,10.0]:
#最大迭代數遍歷100,1000,5000,10000
for max_iter in [100,1000,5000,10000]:
lasso = Lasso(alpha=alpha,max_iter=max_iter)
#訓練套索回歸模型
lasso.fit(X_train,y_train)
score = lasso.score(X_test,y_test)
#令最佳分數為所有分數中的最高值
if score > best_score:
best_score = score
#定義字典,返回最佳參數和最佳最大迭代數
best_parameters = {'alpha':alpha,'最大迭代次數':max_iter}
#打印結果
print('模型最高分為:{:.3f}'.format(best_score))
print('最佳參數設置:{}'.format(best_parameters))
模型最高分為:0.830
最佳參數設置:{'alpha': 0.1, '最大迭代次數': 100}
2.與交叉驗證結合的網格搜索
#導入numpy
import numpy as np
#導入交叉驗證工具
from sklearn.model_selection import cross_val_score
#設置alpha參數遍歷0.01,0.1,1,10
for alpha in [0.01,0.1,1.0,10.0]:
#最大迭代數遍歷100,1000,5000,10000
for max_iter in [100,1000,5000,10000]:
lasso = Lasso(alpha=alpha,max_iter=max_iter)
#訓練套索回歸模型
lasso.fit(X_train,y_train)
scores = cross_val_score(lasso,X_train,y_train,cv=6)
score = np.mean(scores)
if score > best_score:
best_score = score
#定義字典,返回最佳參數和最佳最大迭代數
best_parameters = {'alpha':alpha,'最大迭代次數':max_iter}
#打印結果
print('模型最高分為:{:.3f}'.format(best_score))
print('最佳參數設置:{}'.format(best_parameters))
模型最高分為:0.865
最佳參數設置:{'alpha': 0.01, '最大迭代次數': 100}
#用最佳參數模型擬合數據
lasso = Lasso(alpha=0.01,max_iter=100).fit(X_train,y_train)
#打印測試數據集得分
print('測試數據集得分:{:.3f}'.format(lasso.score(X_test,y_test)))
測試數據集得分:0.819
#導入網格搜索工具
from sklearn.model_selection import GridSearchCV
#將需要遍歷的參數定義為字典
params = {'alpha':[0.01,0.1,1.0,10.0],'max_iter':[100,1000,5000,10000]}
#定義網格搜索中使用的模型和參數
grid_search = GridSearchCV(lasso,params,cv=6,iid=False)
#使用網格搜索模型擬合數據
grid_search.fit(X_train,y_train)
#打印結果
print('模型最高分:{:.3f}'.format(grid_search.score(X_test,y_test)))
print('最有參數:{}'.format(grid_search.best_params_))
模型最高分:0.819
最有參數:{'alpha': 0.01, 'max_iter': 100}
#打印網格搜索中的best_score_屬性
print('交叉驗證最高得分:{:.3f}'.format(grid_search.best_score_))
總結 :
- GridSearchCV本身就是將交叉驗證和網格搜索封裝在一起的方法.
- GridSearchCV雖然是個非常強悍的功能,但是由於需要反復建模,因此所需要的計算時間更長.
文章引自 : 《深入淺出python機器學習》
