#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)