Есть несколько проблем с вашим кодом.
Начнем с того, что вечность - это first clf.fit
(то есть поиск по сетке), и поэтому вы не увидели никаких изменений при установке max_iter
и tol
в вашу секунду clf.fit
.
Во-вторых, часть clf=SVR()
не будет работать, потому что:
- Вы должны импортировать его,
SVR
не распознается
- У вас есть куча недопустимых аргументов (
decision_function_shape
, probability
, random_state
и т. Д.) - проверьте документы на наличие допустимых SVR
аргументов.
В-третьих, вам не нужно явно подбирать лучшие параметры; Вы должны просто запросить refit=True
в своем GridSearchCV
определении и затем использовать clf.best_estimator_
для своих прогнозов (РЕДАКТИРОВАТЬ после комментария: просто clf.predict
также будет работать).
Итак, переместив материал за пределы любого определения функции, вот рабочая версия вашего кода:
from sklearn.svm import SVR
# other imports as-is
# data loading & splitting as-is
param_C = [0.01, 0.1]
param_grid = {'C': param_C, 'kernel': ['poly', 'rbf'], 'gamma': [0.1, 0.01]}
clf = GridSearchCV(SVR(degree=5, max_iter=10000), cv = 5, param_grid= param_grid, refit=True,)
clf.fit(inputs_train, targets_train)
a = clf.best_estimator_.predict(inputs_test[0])
# a = clf.predict(inputs_test[0]) will also work
print(a)
# [ 21.89849792]
Кроме degree
, все остальные допустимые значения аргументов, которые вы используете, на самом деле являются соответствующими значениями по умолчанию, поэтому единственными аргументами, которые вам действительно нужны в вашем определении SVR
, являются degree
и max_iter
.
Вы получите пару предупреждений (, а не ошибки), т.е. после установки:
/ databricks / питон / Библиотека / python3.5 / сайт-пакеты / sklearn / SVM / base.py: 220:
ConvergenceWarning: Solver завершился рано (max_iter = 10000). Рассматривать
предварительная обработка данных с помощью StandardScaler или MinMaxScaler.
и после прогнозирования:
/ databricks / питон / Библиотека / python3.5 / сайт-пакеты / sklearn / Utils / validation.py: 395:
DeprecationWarning: Передача 1d массивов, поскольку данные устарели в 0,17
и повысит ValueError в 0,19. Изменить ваши данные либо с помощью
X.reshape (-1, 1), если ваши данные имеют одну функцию или X.reshape (1, -1)
если он содержит один образец. DeprecationWarning)
, который уже содержит некоторые советы о том, что делать дальше ...
Последнее, но не менее важное: вероятностный классификатор (т. Е. Производящий вероятностей вместо жестких меток ) является допустимым, но "вероятностная" регрессионная модель не ...
Протестировано с Python 3.5 и scikit-learn 0.18.1