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機器學習》