У меня есть такие данные
есть 29 столбцов, из которых я должен предсказать winPlacePerc (крайний конец информационного кадра), который находится между 1 (высокий процент) до 0 (низкий процент)
Из 29 столбца 25 являются числовыми данные 3 являются ID ( объект ) 1 является категориальными
Я удалил все столбцы Id (поскольку все они уникальны), а также закодировал категориальные (matchType) данные в одно горячее кодирование
После всего этого у меня остается 41 колонка (после одной горячей)
Вот как я создаю данные
X = df.drop(columns=['winPlacePerc'])
#creating a dataframe with only the target column
y = df[['winPlacePerc']]
Теперь у моего X есть 40 столбцов, и это мои данные метки выглядят как
> y.head()
winPlacePerc
0 0.4444
1 0.6400
2 0.7755
3 0.1667
4 0.1875
У меня также очень большой объем данных, например, 400 тыс. Данных, поэтому для целей тестирования я тренируюсь на части этого, делая это с помощью sckit
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.997, random_state=32)
, что дает почти 13 тыс. Данных для обучения
Для модели я использую Последовательная модель Keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dense, Dropout, Activation
from keras.layers.normalization import BatchNormalization
from keras import optimizers
n_cols = X_train.shape[1]
model = Sequential()
model.add(Dense(40, activation='relu', input_shape=(n_cols,)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error',
optimizer='Adam',
metrics=['accuracy'])
model.fit(X_train, y_train,
epochs=50,
validation_split=0.2,
batch_size=20)
Поскольку данные моей метки y находятся между 0 и 1, я использую слой sigmoid в качестве моего слоя вывода
это график обучения и потери и точности проверки
Я также пытался преобразовать метку в двоичный файл , используя шаг функцию и двоичную перекрестную энтропию функцию потерь
после этого данные y-метки выглядят как
> y.head()
winPlacePerc
0 0
1 1
2 1
3 0
4 0
и изменение функции потерь
model.compile(loss='binary_crossentropy',
optimizer='Adam',
metrics=['accuracy'])
этот метод был хуже, чем предыдущий
Как вы можете видеть, он не учится после определенной эпохи, и это также происходит, даже если я беру все данные, а не их часть
после того, как это не сработало, я также использовал dropout и попытался добавить еще слой , но здесь ничего не работает
Теперь мой вопрос, что я делаю неправильно, это неправильный слой или данные, как я могу улучшить это?