【问题与解决】Python Sklearn 报错 AttributeError: ‘SGDClassifier‘ object has no attribute ‘early_stopping‘


问题描述

  • 在使用sklearn包中的随机梯度下降分类器SGDClassifier进行运算的过程中,使用了如下代码:
clf = SGDClassifier(loss='log', random_state=1, max_iter=1)
  • 但运行后,在该语句处遇到了如下图所示的错误:
    错误信息
  • 可见,给出的错误信息为:
    AttributeError: 'SGDClassifier' object has no attribute 'early_stopping'
  • 直翻错误为:属性错误:SGDClassifier对象中没有early_stopping这个属性。
  • 但是,在百度上查找该错误,发现并没有人报出此错误。于是我决定查找相关的源码探究该错误。

问题分析

  • 由于首先能够确定自己没有在程序中人为设定过该属性,因此猜测是由于sklearn的版本问题所导致的。
  • 自己在编写代码时使用的sklearn版本为0.19.0,而部署运行程序时所使用的sklearn版本为0.20.4。
  • 猜测sklearn可能是在0.19升级至0.20版本时,源码层面有较大的变化
  • 于是我找到sklearn关于SGDClassifier的官网(如下图所示)。
    sklearn关于SGDClassifier的官网
  • 可以看出,整个程序是在执行partial_fit这个函数时出现了错误。
  • 于是找到官网中对partial_fit这个函数的描述,如下图所示。
    partial_fit函数的描述
  • 点击右上角的source,查看其源码,找到出错的代码位置,如下图所示。
    partial_fit函数的源码
  • 从报错信息中可以看出,程序是在执行到self.early_stopping处时,程序认为self对象,即SGDClassifier对象下没有early_stopping属性,从而报错。并没有执行到源码中所提到的ValueError错误。

解决方法

  • 既然出错的原因是由于SGDClassifier没有early_stopping属性,那么就在SGDClassifier创建的时候手动传入该参数。如下图所示。手动传入该参数

  • 虽然此时编译器会报错,错误标签为“Unexpected argument”,但是忽略即可(猜测是由于PyCharm的编译器对 super()继承父类的参数识别不太准确所导致的Bug?)。

  • 重新运行一次程序,即可发现网页能够正常运行了,编译器的报错也消失了,问题得到解决。


欢迎各位读者在评论区中批评指正,如果对你有用的话,记得点赞收藏哦~

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MomentNi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值