Получение ошибки «TypeError: требуется целое число» в SVM

#python #scikit-learn #integer #typeerror #svm

#python #scikit-learn #целое число #ошибка типа #svm

Вопрос:

Я довольно новичок в программировании, поэтому я немного запутался в том, что на самом деле означает и диктует мой код, поэтому извините, если это глупый вопрос или я с трудом понимаю ответы!

Итак, вот код, с которым у меня возникли проблемы:

 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:

~anaconda3libsite-packagessklearnsvm_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 

~anaconda3libsite-packagessklearnsvm_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,

sklearnsvm_libsvm.pyx in sklearn.svm._libsvm.fit()

TypeError: an integer is required

 

Из того, что я прочитал до сих пор, проблема, похоже, заключается в том, что я каким-то образом получаю строку, и она вводит данные там, где мне действительно нужно целое число. Я не уверен, как это сделать, и куда я бы добавил потенциальный код, необходимый для устранения проблемы. Если у кого-нибудь есть какое-либо представление, я был бы очень признателен!

Комментарии:

1. Во-первых, предполагая, что вы используете sklearn здесь, вы можете использовать встроенный GridSearchCV вместо ручного цикла, чтобы повысить производительность и упростить интерфейс. Во-вторых, вы передаете строку для degree ( rng_ga= ['auto', 'scale']; for k in rng_ga:... degree = k ), когда она принимает int

2. Дополнительная документация о значении «степени»: scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html . степень должна быть int.

Ответ №1:

Вы перепутали rng_ga и rng_degree в строке for k in rng_ga: , поэтому degree значение k становится строкой "auto" при передаче в строку SVModel=SVC(kernel=i, C=j, degree=k, gamma=m)