Получение error- IndexError: индекс 37 выходит за границы оси 0 с размером 37 при использовании GridsearchCV - PullRequest
0 голосов
/ 10 октября 2019

Моя модель начинает тренироваться и при выполнении в течение некоторого времени выдает ошибку:

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_
...