python - 如何使用 Python Sklearn 在逻辑回归中修复“惩罚项应该为正”?
问题描述
我正在尝试使用 Python 运行逻辑回归并循环几个 C。但是,我不断收到错误ValueError: Penalty term must be positive; 得到 (C=0.1)。这对我来说很奇怪,因为 0.1 是正数。我认为错误并不完全在 C 值上,但我不知道如何修复它。我试图查看这个问题ValueError: Penalty term must be positive但我不明白如何解决我的问题。
我很困惑,因为当试图绘制决策边界时,代码是有效的。
让我们看看我在说什么。以下代码有效:
for this_C, subplot in zip([0.1, 1, 100], subaxes):
clf = LogisticRegression(C=this_C).fit(X_train, y_train)
print('Accuracy of Logistic regression classifier on training set: {:.2f}'
.format(clf.score(X_train, y_train)))
print('Accuracy of Logistic regression classifier on test set: {:.2f}'
.format(clf.score(X_test, y_test)))
但是,下面的代码不起作用,我收到错误提示
for this_C in zip([0.1, 1, 100]):
clf = LogisticRegression(C=this_C).fit(X_train, y_train)
print('Accuracy of Logistic regression classifier on training set: {:.2f}'
.format(clf.score(X_train, y_train)))
print('Accuracy of Logistic regression classifier on test set: {:.2f}'
.format(clf.score(X_test, y_test)))
第二个代码有什么问题?为什么我收到错误ValueError: Penalty term must be positive; 得到 (C=0.1)
提前致谢。
解决方案
错误的原因在于第二个版本的循环。
查看引发您遇到的错误的源代码,我们会看到:
if not isinstance(self.C, numbers.Number) or self.C < 0:
raise ValueError("Penalty term must be positive; got (C=%r)"
% self.C)
这基本上说如果self.C
不是numbers.Number
-object 或不是正整数,那么我们会得到这个错误。
如果我们看一下第二个循环的输出,那么我们可以更好地理解为什么上面的代码行给出了错误
>>> for this_C in zip([0.1, 1, 100]):
... print(this_C)
... print(type(this_C))
...
(0.1,)
<class 'tuple'>
(1,)
<class 'tuple'>
(100,)
<class 'tuple'>
所以,错误是因为它被赋予了tuple
-object而不是numbers.Number
-object。
推荐阅读
- javascript - 无法从 JS 中的 JSON 对象生成 html 表
- npm - 为什么每次我尝试输入我的发布者名称时,我的 npm 都说我需要查看用户权限?
- excel - 为什么我的 vba 循环每次都跳到我的外部下一个?
- excel - 将字段添加到 Excel,并在 Access 中导出子表单。
- python - 合并每个 id 的后半部分行,但每个 id 的行不同
- unit-testing - 断言属性已在模拟类中设置
- javascript - Vue2获取图像src
- ruby-on-rails - 更新每个 jsonb 值
- memory - 在向 DRAM 发出读取请求时,为什么我们需要读取标签和数据,而不仅仅是数据?
- javascript - TypeError:传播不可迭代实例的无效尝试