Моя модель начинает тренироваться и при выполнении в течение некоторого времени выдает ошибку:
IndexError: индекс 37 выходит за пределы оси 0 с размером 37
вот некоторые подробности:
shape of X_train-(64345, 14)
shape of y_train-(64345,)
error image
https://i.stack.imgur.com/7dgxI.jpg
это количество классов и их появление в наборе данных:
Haze 42209
Smoke 19839
Mist 3394
Clear 3128
Fog 2760
Widespread Dust 2497
Scattered Clouds 2199
Partly Cloudy 2077
Shallow Fog 1860
Mostly Cloudy 1537
Light Rain 1082
Thunderstorms and Rain 432
Rain 377
Blowing Sand 377
Light Drizzle 344
Overcast 323
Patches of Fog 277
Partial Fog 253
Heavy Fog 205
Thunderstorm 179
Light Thunderstorms and Rain 176
Drizzle 108
Light Thunderstorm 44
Heavy Rain 27
Light Fog 26
Heavy Thunderstorms and Rain 22
Thunderstorms with Hail 9
Light Sandstorm 6
Squalls 6
Volcanic Ash 4
Light Rain Showers 4
Light Haze 4
Sandstorm 2
Rain Showers 2
Funnel Cloud 2
Light Freezing Rain 1
Light Hail Showers 1
Heavy Thunderstorms with Hail 1
Name: conds, dtype: int64
iЯ уже пытался использовать одно горячее кодирование, но я получил ошибку:
Метрики классификации не могут обрабатывать сочетание целей с несколькими метками и мультиклассами.
Работает правильнодля моей модели без использования gridsearchCV с фиксированными параметрами.
вот как предварительная обработка набора данных-
target=df['conds']
dataset=df.drop('conds',axis=1)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
dataset= sc.fit_transform(dataset)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(dataset,target,random_state=1)
sc = StandardScaler()
X_train= sc.fit_transform(X_train)
X_test=pd.DataFrame(X_test)
вот код поиска по сетке
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
from keras.models import Sequential
from keras.layers import Dense
def build_classifier(optimizer, nb_layers,unit):
classifier = Sequential()
classifier.add(Dense(units = unit, kernel_initializer = 'uniform', activation = 'relu', input_dim = 14))
i = 1
while i <= nb_layers:
classifier.add(Dense(activation="relu", units=unit, kernel_initializer="uniform"))
i += 1
classifier.add(Dense(units = 37, kernel_initializer = 'uniform', activation = 'softmax'))
classifier.compile(optimizer = optimizer, loss = 'categorical_crossentropy', metrics = ['accuracy'])
return classifier
classifier = KerasClassifier(build_fn = build_classifier)
parameters = {'batch_size': [10,25,32,64,128,256],
'epochs': [50,100, 200,500,1000,1500,2000],
'optimizer': ['adam'],
'nb_layers': [2,3,4,5,6],
'unit':[28,40,48,57]
}
grid_search = GridSearchCV(estimator = classifier,
param_grid = parameters,
scoring = 'accuracy',
cv=10,n_jobs=-1)
grid_search = grid_search.fit(X_train, y_train)
best_parameters = grid_search.best_params_
best_accuracy = grid_search.best_score_