使用網格搜索優化模型參數


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_))
交叉驗證最高得分:0.865

總結 :  

  • GridSearchCV本身就是將交叉驗證和網格搜索封裝在一起的方法.
  • GridSearchCV雖然是個非常強悍的功能,但是由於需要反復建模,因此所需要的計算時間更長.

 

文章引自 : 《深入淺出python機器學習》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM