Я делаю ANN в Python, и я ищу лучшие параметры для своего ANN с GridSearchCV (sklearn). Проблема в том, что каждый раз атрибут "best_parameters" возвращает первый элемент каждого параметра (поэтому, если я изменяю порядок моих элементов, то возврат отличается).
Вот мой код:
# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
# Importing the dataset
dataset = pd.read_csv('data.csv')
X = dataset.iloc[:, 17:27].values
y = dataset.iloc[:, 3].values
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# Find best parameters
def build_classifier(optimizer):
# Init ANN
classifier = Sequential()
# Add input and first hidden layers
classifier.add(Dense(units=6, activation="relu", kernel_initializer="uniform", input_dim=10))
# Add another hidder layer
classifier.add(Dense(units=6, activation="relu", kernel_initializer="uniform"))
# Add output layer
classifier.add(Dense(units=1, activation="sigmoid", kernel_initializer="uniform"))
# Compile ANN
classifier.compile(optimizer=optimizer, loss="mean_squared_error")
return classifier
# Looking for best parameters with GridSearchCV
classifier = KerasClassifier(build_fn=build_classifier)
parameters = {"batch_size":[1, 5, 10], "epochs":[100,200], "optimizer": ["rmsprop", "sgd", "adam"]}
grid_search = GridSearchCV(estimator=classifier, param_grid=parameters, scoring="neg_mean_squared_error", cv=10)
grid_search = grid_search.fit(X_train, y_train)
best_parameters = grid_search.best_params_
best_precision = grid_search.best_score_
Поэтому в parameters = {"batch_size":[1, 5, 10], "epochs":[100,200], "optimizer": ["rmsprop", "sgd", "adam"]}
строки parameters = {"batch_size":[1, 5, 10], "epochs":[100,200], "optimizer": ["rmsprop", "sgd", "adam"]}
меня есть параметры я хотите попробовать, а атрибут "best_parameters" всегда возвращает первый элемент каждого параметра (проверьте изображение, где я попробую несколько порядков для параметров). best_parameters возвращаются согласно порядку параметров
Я не понимаю, откуда это взялось и как его исправить.
Я нашел решение, которое было ошибкой, которую я сделал... Я использовал KerasClassifier для поиска наилучших параметров, в то время как я хотел сделать регрессию... Поэтому я думаю, что KerasClassifier не удалось сделать то, что он должен был сделать, а затем вернуть первые параметры. Поскольку я делаю регрессию, вместо этого я должен использовать KerasRegressor.