我正在尝试使用Python运行逻辑回归并遍历多个C。 但是,我不断收到错误 ValueError:惩罚期限必须为正。得到了(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:惩罚期限必须为正;得到了(C = 0.1)
谢谢。
答案 0 :(得分:1)
错误的原因在于第二个版本中的循环。
查看它在哪里引发错误的源代码,我们会看到:
bookingRes.snapshotChanges().subscribe(res => {
this.Bookings = [];
res.forEach(item => {
let a = item.payload.toJSON();
a['$key'] = item.key;
this.Bookings.push(a as Appointment);
})
})
这基本上表明,如果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
因此,错误是因为给了它一个>>> 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
对象。