c语言网格搜索,使用逻辑回归时怎么利用网格搜索来查找degree,c等超参数
非常好的問題。如何將自定義的Pipline對象應(yīng)用于sklearn內(nèi)置的網(wǎng)格搜索確實(shí)是課程沒有講的一個sklearn使用上的語法細(xì)節(jié):)
首先,你在31行的注釋分析的是正確的。由于此時,你在構(gòu)建grid_search的時候,傳入的算法是log_reg。而log_reg是LogisticRegression的對象,但是創(chuàng)建LogisticRegression是并不需要參數(shù)degree,所以,這里會報錯。
正確的做法是,我們要對你創(chuàng)建的PolynomialLogisticRegression這個函數(shù)返回的對象進(jìn)行網(wǎng)格搜索。這個函數(shù)的邏輯是返回了一個Pipeline的對象,這個Pipeline的對象中創(chuàng)建PolynomialFeatures時使用了degree這個參數(shù)。
為了方便起見,在這里,我為這個PolynomialLogisticRegression添加上了默認(rèn)值。def?PolynomialLogisticRegression(degree?=?1,?C?=?0.1):
return?Pipeline([
('poly',?PolynomialFeatures(degree=degree)),
('std_scaler',?StandardScaler()),
('log_reg',?LogisticRegression(C=C))
])
poly_log_reg?=?PolynomialLogisticRegression()
我們需要針對poly_log_reg這個對象進(jìn)行網(wǎng)格搜索:)
但是,在這里,poly_log_reg中包含三部分,每部分都有自己的參數(shù)。按照你寫的param_grid,參數(shù)名稱直接寫degree和C,GridSearchCV是無法認(rèn)得這些參數(shù)名隸屬于哪一部分的。所以,在這種情況下,我們在設(shè)置param_grid的時候,參數(shù)名要顯示地表明這個參數(shù)屬于哪個部分。表示的方法是:{$Pipeline中的對象名稱}__{$參數(shù)名}
即,在Pipeline中的對象名稱,加上雙下?lián)Q線(__),再加上參數(shù)名稱。
所以,我們在網(wǎng)格搜索中,要搜索的兩個參數(shù)名稱應(yīng)該是:poly__degree
log_reg__C
其中的poly和log_reg,是你在實(shí)例化這個Pipeline對象的時候,給每一部分起的那個名稱。
綜上,此時我們的param_grid,要這樣聲明:C_PARM?=?[0.1,0.2,0.3,0.4,0.5]
param_grid?=?[
{
'poly__degree':?[i?for?i?in?range(1,?11)],
'log_reg__C':?[i?for?i?in?C_PARM]
}
]
現(xiàn)在,就可以按照以前一樣的方法使用GridSearchCV啦:)grid_search?=?GridSearchCV(poly_log_reg,?param_grid)
grid_search.fit(X_train,y_train)
整理一遍,我們的整個代碼就是這樣的:def?PolynomialLogisticRegression(degree?=?1,C?=?0.1):
return?Pipeline([
('poly',?PolynomialFeatures(degree=degree)),
('std_scaler',?StandardScaler()),
('log_reg',?LogisticRegression(C=C))
])
#?待進(jìn)行網(wǎng)格搜索的算法
poly_log_reg?=?PolynomialLogisticRegression()
#?準(zhǔn)備待搜索的參數(shù)列表
C_PARM?=?[0.1,0.2,0.3,0.4,0.5]
param_grid?=?[
{
'poly__degree':?[i?for?i?in?range(1,?11)],
'log_reg__C':?[i?for?i?in?C_PARM]
}
]
#?實(shí)例化GridSearchCV進(jìn)行網(wǎng)格搜索
grid_search?=?GridSearchCV(poly_log_reg,?param_grid)
grid_search.fit(X_train,y_train)
看起來寫了很多,但是自己整理一遍,會發(fā)現(xiàn)其實(shí)這個語法非常簡單:)
加油!
總結(jié)
以上是生活随笔為你收集整理的c语言网格搜索,使用逻辑回归时怎么利用网格搜索来查找degree,c等超参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【微课堂】汽车软件工程解决方案(现场实录
- 下一篇: 如何统计项目代码行数