Я полагаю, что вы применили технику уменьшения размерности к исходным данным, имеющим 98 функций, и, следовательно, вы используете 8-мерную функцию ввода в вашей модели.
У меня есть несколько замечаний относительно вашей реализации:
[Как проблема классификации]
Поскольку вы упомянули, что ваши выборки принадлежат к 50 разным классам, проблема, безусловно, является проблемой мультиклассовой классификации.Итак, вам нужно сначала закодировать вашу метку следующим образом:
from keras.utils import to_categorical
y = to_categorical(y, num_classes=50, dtype='float32')
В этом случае вам нужно изменить номер выходного узла (представляющего класс) и функцию активации в последнем слое следующим образом:
classifier.add(Dense(units = 50, activation='softmax'))
Кроме того, вы должны использовать categorical_crossentropy
как функцию потерь при компиляции вашей модели.
classifier.compile(optimizer ='adam',loss='categorical_crossentropy', metrics =['accuracy'])
[В качестве проблемы регрессии]
Вы можететакже рассматривайте эту проблему как проблему множественной регрессии, поскольку выходные данные находятся в диапазоне от 0 до 50 (непрерывно) и могут сохранять один выходной узел в конечном слое, как вы это сделали.Но в этом случае вы должны использовать linear
функцию активации вместо sigmoid
.
Итак, конечный слой должен выглядеть так:
classifier.add(Dense(units = 1)) # default activation is linear
Дополнительно, в случае регрессиипроблема, mean_squared_error
является наиболее релевантной функцией стоимости (при условии, что в вашем наборе данных не так много выбросов), а accuracy
в качестве показателя производительности не имеет значения (скорее вы можете использовать mean_absolute_error
, который аналогичен потерям).Следовательно, вторая модификация:
classifier.compile(optimizer ='adam',loss='mean_squared_error')