c语言网格搜索,使用逻辑回归时怎么利用网格搜索来查找degree,c等超参数

c语言网格搜索,使用逻辑回归时怎么利用网格搜索来查找degree,c等超参数非常好的问题。如何将自定义的Pipline对象应用于sklearn内置的网格搜索确实是课程没有讲的一个sklearn使用上的语法细节:)首先,你在31行的注释分析的是正确的。由于此时,你在构建grid_search的时候,传入的算法是log_reg。而log_reg是LogisticRegression的对象,但是创建LogisticRegression是并不需要参数degree,所以,这里会报错…

大家好,欢迎来到IT知识分享网。c语言网格搜索,使用逻辑回归时怎么利用网格搜索来查找degree,c等超参数

非常好的问题。如何将自定义的Pipline对象应用于sklearn内置的网格搜索确实是课程没有讲的一个sklearn使用上的语法细节:)

首先,你在31行的注释分析的是正确的。由于此时,你在构建grid_search的时候,传入的算法是log_reg。而log_reg是LogisticRegression的对象,但是创建LogisticRegression是并不需要参数degree,所以,这里会报错。

正确的做法是,我们要对你创建的PolynomialLogisticRegression这个函数返回的对象进行网格搜索。这个函数的逻辑是返回了一个Pipeline的对象,这个Pipeline的对象中创建PolynomialFeatures时使用了degree这个参数。

为了方便起见,在这里,我为这个PolynomialLogisticRegression添加上了默认值。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这个对象进行网格搜索:)

但是,在这里,poly_log_reg中包含三部分,每部分都有自己的参数。按照你写的param_grid,参数名称直接写degree和C,GridSearchCV是无法认得这些参数名隶属于哪一部分的。所以,在这种情况下,我们在设置param_grid的时候,参数名要显示地表明这个参数属于哪个部分。表示的方法是:{$Pipeline中的对象名称}__{$参数名}

即,在Pipeline中的对象名称,加上双下换线(__),再加上参数名称。

所以,我们在网格搜索中,要搜索的两个参数名称应该是:poly__degree

log_reg__C

其中的poly和log_reg,是你在实例化这个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]

}

]

现在,就可以按照以前一样的方法使用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))

])

# 待进行网格搜索的算法

poly_log_reg = PolynomialLogisticRegression()

# 准备待搜索的参数列表

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]

}

]

# 实例化GridSearchCV进行网格搜索

grid_search = GridSearchCV(poly_log_reg, param_grid)

grid_search.fit(X_train,y_train)

看起来写了很多,但是自己整理一遍,会发现其实这个语法非常简单:)

加油!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14556.html

(0)
上一篇 2024-02-25 16:15
下一篇 2024-02-29 15:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信