Я получаю ошибку ValueError при выполнении байесовской оптимизации для LinearSVC в задаче классификации с несколькими метками.
logger = JSONLogger(path=LOGS_PATH)
lSVC_param = {'C':(0.001, 0.01, 0.1, 1, 10),
'penalty':('l1','l2'),
'loss':('hinge','squared_hinge')}
def optimise_bayes_opt(X, y):
def target(C_param,penalty_param,loss_param):
clf = LinearSVC(C=C_param,penalty=penalty_param,loss=loss_param)
text_clf = Pipeline([('tfidf', TfidfVectorizer(ngram_range=(1,1),
norm='l2',
min_df=1,
use_idf=True)),
('clf', OneVsRestClassifier(clf))])
cv_results = cross_val_score(text_clf, X_test, y_test, scoring='accuracy',cv=5)
print("CV",cv_results,cv_results.mean())
return cv_results.mean()
optimizer = BayesianOptimization(
f=target,
pbounds={'C_param':lSVC_param['C'],
'penalty_param':lSVC_param['penalty'],
'loss_param':lSVC_param['loss']},
verbose=2,
random_state=1)
optimizer.subscribe(Events.OPTMIZATION_STEP, logger)
optimizer.maximize(init_points=2, n_iter=2)
return optimizer
with warnings.catch_warnings():
warnings.simplefilter("ignore")
optimizer = optimise_bayes_opt(X_train,y_train)
best_params = optimizer.max
print(best_params)
Ошибка
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-269-dc7962d023ef> in <module>
34 with warnings.catch_warnings():
35 warnings.simplefilter("ignore")
---> 36 optimizer = optimise_bayes_opt(X_train,y_train)
37 best_params = optimizer.max
38
<ipython-input-269-dc7962d023ef> in optimise_bayes_opt(X, y)
26 'loss_param':lSVC_param['loss']},
27 verbose=2,
---> 28 random_state=1)
29 optimizer.subscribe(Events.OPTMIZATION_STEP, logger)
30 optimizer.maximize(init_points=2, n_iter=2)
~/.local/lib/python3.6/site-packages/bayes_opt/bayesian_optimization.py in __init__(self, f, pbounds, random_state, verbose)
71 # Data structure containing the function to be optimized, the bounds of
72 # its domain, and a record of the evaluations we have done so far
---> 73 self._space = TargetSpace(f, pbounds, random_state)
74
75 # queue
~/.local/lib/python3.6/site-packages/bayes_opt/target_space.py in __init__(self, target_func, pbounds, random_state)
47 self._bounds = np.array(
48 [item[1] for item in sorted(pbounds.items(), key=lambda x: x[0])],
---> 49 dtype=np.float
50 )
51
ValueError: setting an array element with a sequence.
Я понял это значениеError после ссылки на вопрос .Кроме того, в этой строке упоминается, что значения должны иметь тип float.Таким образом, значения C_param верны, а другие не верны.Теперь я не знаю, как оптимизировать параметры с не плавающими значениями, такими как штраф, убыток и т. Д.