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

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

非常好的问题。如何将自定义的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://javaforall.net/178767.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:32
下一篇 2026年3月26日 下午4:32


相关推荐

  • 【AI】OpenClaw 祛魅教程 | 面向普通人的 AI 入门指南

    【AI】OpenClaw 祛魅教程 | 面向普通人的 AI 入门指南

    2026年3月16日
    2
  • Eclipse 运行时弹出A Java Exception has occurred

    Eclipse 运行时弹出A Java Exception has occurred错误原因:较高版本的JDK编译的javaclass文件试图在较低版本的JVM上运行而产生的错误。首先,因为之前jdk版本是10,后来安装了jdk1.7,想用1.7的,但是由于eclipse的编译器中仍然使用原来的版本所以导致错误。因为我用的eclipse的编译器来编译的。因为很多编译器都自带javac,而不是采用操作系统中的编译器。如果你的编译器是eclipse的话,那么需要在项目的属性里设置j…

    2022年7月14日
    25
  • 月之暗面Kimi牵手小红书;美团独家投资具身大脑企业自变量机器人A轮融资|未来商业早参

    月之暗面Kimi牵手小红书;美团独家投资具身大脑企业自变量机器人A轮融资|未来商业早参

    2026年3月12日
    2
  • 前后端分离开发模式介绍

    前后端分离开发模式介绍1 1 什么是前后端分离前后端分离是目前一种非常流行的开发模式 它使项目的分工更加明确 后端 负责处理 存储数据前端 负责显示数据前端和后端开发人员通过接口进行数据的交换 1 2 为什么要进行前后端分离前后端可以身心愉快地专注于各自擅长的领域避免后端写前端代码 基本上 1 天时间 20 写后端代码 80 写页面 前端配置后端代码运行环境 简直是要疯 装一堆环境 而且有些开发环境是 windows 前端是 macos 装环境就要装好几天 避免前后端打架 推诿 甩锅 提高开发效率分

    2026年2月25日
    3
  • Java之单例模式

    Java之单例模式

    2021年7月21日
    56
  • RelativeLayout和LinearLayout性能比较

    RelativeLayout和LinearLayout性能比较相对布局和线性布局的性能比较 RelativeLayo 和 LinearLayout 是 Android 中常用的布局 两者的使用会极大的影响程序生成每一帧的性能 因此 正确的使用它们是提升程序性能的重要工作 1 RelativeLayo 会让子 View 调用 2 次 onMeasure LinearLayout 在有 weight 时 也会调用子 View2 次 onMeasure 2 RelativeLayo 的子 View 如果高度和 RelativeLayo 不同 则会引发效率问题 当子 View 很复杂时 这个问题会更

    2026年3月17日
    3

发表回复

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

关注全栈程序员社区公众号