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