在 SVM 上收到错误“TypeError: an integer is required”
Posted
技术标签:
【中文标题】在 SVM 上收到错误“TypeError: an integer is required”【英文标题】:Getting an error "TypeError: an integer is required" on SVM 【发布时间】:2022-01-08 13:15:13 【问题描述】:我对编码还很陌生,所以我对我的代码的实际含义和指示有点困惑,如果这是一个愚蠢的问题或者我很难理解答案,非常抱歉!
这是我遇到问题的代码:
krn= ['linear', 'poly', 'rbf', 'sigmoid']
rng_C = np.arange(1,101,20)
rng_degree=np.arange(2,5)
rng_ga= ['auto', 'scale']
rng_m=np.arange(0.001,10,0.5)
best_score=0
for i in krn:
for j in rng_C:
for k in rng_ga:
for m in rng_m:
SVModel=SVC(kernel=i, C=j, degree=k, gamma=m)
SVModel.fit(x_train, y_train)
acc_score= accuracy_score(y_test, SVModel.predict(x_test))
if best_score<acc_score:
best_score=acc_score
bi=i
bj=j
bk=k
bm=m
print(best_score, bi, bj, bk, bm)
我得到的错误屏幕是:
TypeError Traceback (most recent call last)
<ipython-input-9-5eb9a5279e65> in <module>
5 for m in rng_m:
6 SVModel=SVC(kernel=i, C=j, degree=k, gamma=m)
----> 7 SVModel.fit(x_train, y_train)
8 acc_score= accuracy_score(y_test, SVModel.predict(x_test))
9 if best_score<acc_score:
~\anaconda3\lib\site-packages\sklearn\svm\_base.py in fit(self, X, y, sample_weight)
224
225 seed = rnd.randint(np.iinfo('i').max)
--> 226 fit(X, y, sample_weight, solver_type, kernel, random_seed=seed)
227 # see comment on the other call to np.iinfo in this file
228
~\anaconda3\lib\site-packages\sklearn\svm\_base.py in _dense_fit(self, X, y, sample_weight, solver_type, kernel, random_seed)
275 self.support_, self.support_vectors_, self._n_support, \
276 self.dual_coef_, self.intercept_, self._probA, \
--> 277 self._probB, self.fit_status_ = libsvm.fit(
278 X, y,
279 svm_type=solver_type, sample_weight=sample_weight,
sklearn\svm\_libsvm.pyx in sklearn.svm._libsvm.fit()
TypeError: an integer is required
从我目前所读到的内容来看,问题似乎是我以某种方式获得了一个字符串,并且它在我实际需要一个整数的地方获得了输入。我不确定如何做到这一点,以及我将在哪里添加解决问题所需的潜在代码。如果有人有任何见解,我将不胜感激!
【问题讨论】:
一方面,假设您在这里使用 sklearn,您可以使用内置的GridSearchCV 而不是手动循环,以获得更好的性能和更简单的界面。其次,当需要int
更多关于“学位”含义的文档:scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html。 degree 必须是 int。
【参考方案1】:
您在for k in rng_ga:
行中混淆了rng_ga
和rng_degree
,因此degree
值k
在传递到SVModel=SVC(kernel=i, C=j, degree=k, gamma=m)
行时变为字符串"auto"
【讨论】:
以上是关于在 SVM 上收到错误“TypeError: an integer is required”的主要内容,如果未能解决你的问题,请参考以下文章
pyinstaller打包任何py文件TypeError: an integer is required (got type bytes)