在 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_garng_degree,因此degreek 在传递到SVModel=SVC(kernel=i, C=j, degree=k, gamma=m) 行时变为字符串"auto"

【讨论】:

以上是关于在 SVM 上收到错误“TypeError: an integer is required”的主要内容,如果未能解决你的问题,请参考以下文章

python SVM:执行错误

pyinstaller打包任何py文件TypeError: an integer is required (got type bytes)

列表对象在 SVM 中不可调用

OpenCV SVM 在火车上抛出异常,“错误参数(只有一个类)”

Python中的libsvm:出现错误

无法运行适合 svm 的方法(通过 scikit-learn)