Я новичок в оптимизации и пытаюсь научиться случайному поиску. Изучив некоторую теорию, я попытался реализовать ее в MLPClassifier, над которым ранее работал.
def hyperparameter_tune(clf, parameters, iterations, X, y):
randomSearch = RandomizedSearchCV(clf, param_distributions=parameters, n_jobs=-1, n_iter=iterations, cv=6)
randomSearch.fit(X,y)
params = randomSearch.best_params_
score = randomSearch.best_score_
return params, score
этот метод возвращает лучший набор параметров и лучший результат после выполнения рандомизированного поиска по заданному набору данных.
parameters = {
'nohn': [150,200,250,300],
'solver': ['sgd', 'adam', 'lbfgs'],
'activation': ['relu', 'tanh']
}
clf = MLPClassifier(batch_size=256, verbose=True, early_stopping=True)
parameters_after_tuning, score_after_tuning = hyperparameter_tune(MLPClassifier, parameters, 20, X_train_pca, y);
print(score)
Сначала я просто хотел оптимизировать количество скрытых нейронов, решатель и функцию активации для MLPClassifier. Поэтому я назначил другие параметры, такие как batch_size фиксированное значение при создании классификатора. Но когда я передаю классификатор методу hyperparamter_tune, я получаю следующую ошибку
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-a0c800c38881> in <module>()
1 clf = MLPClassifier()
----> 2 parameters_after_tuning, score_after_tuning = tuning(MLPClassifier, parameters, 20, X_train_pca, y);
3 print(score)
/usr/local/lib/python3.6/dist-packages/sklearn/base.py in clone(estimator, safe)
65 "it does not seem to be a scikit-learn estimator "
66 "as it does not implement a 'get_params' methods."
---> 67 % (repr(estimator), type(estimator)))
68 klass = estimator.__class__
69 new_object_params = estimator.get_params(deep=False)
TypeError: Cannot clone object '<class 'sklearn.neural_network._multilayer_perceptron.MLPClassifier'>' (type <class 'abc.ABCMeta'>): it does not seem to be a scikit-learn estimator as it does not implement a 'get_params' methods.
Может кто-нибудь мне помочь. Скорее всего, есть много вещей, которые я мог бы сделать лучше в моем коде. Я хотел бы услышать любые предложения.