Учебный набор содержит "метки" в качестве входных данных для модели керас
Я вижу, что моя модель keras плохо обрабатывает входные столбцы, если они не являются значениями с плавающей точкой. Я хотел бы иметь возможность обучать модель, используя столбцы, которые содержат "метки", а под метками я подразумеваю идентификаторы сортов или закодированные имена строк. В идеале было бы возможно интегрировать эти столбцы меток в свою модель, решая, какие значения в этих категориальных столбцах предопределяют более высокую точность.
Например, я пытаюсь предсказать результаты соревнования (Win=1, Loss=0), и я хотел бы включить "название команды" и "имя тренера" в исторические данные. В идеале модель должна определить, какие команды и тренеры с большей вероятностью выиграют.
Тем не менее, когда я бегу model.fit
и training_set включает в себя все, кроме значений int/float (которые являются статистическими по природе, а не категориальными), он генерирует одинаковую точность для каждой эпохи с очень высоким показателем потерь.
Вот как я определил свою модель:
model = keras.Sequential([
keras.layers.Dense(1024, activation=tf.nn.relu, kernel_initializer=init_ru, bias_initializer=init_ru),
keras.layers.Dense(512, activation=tf.nn.relu, kernel_initializer=init_ru, bias_initializer=init_ru),
keras.layers.Dense(256, activation=tf.nn.relu),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(32, activation=tf.nn.relu),
keras.layers.Dense(1, activation=tf.nn.sigmoid)
])
opt = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=True)
model.compile(optimizer=opt,
loss='binary_crossentropy',
metrics=['accuracy'])
Это прекрасно работает, если я не включаю никакие категориальные данные, но я думаю, что если бы я мог заставить их работать с категориальными данными, это улучшилось бы еще больше.
2 ответа
Стандартный способ обработки категориальных данных - создать словарь допустимых значений, а затем преобразовать категорию в вектор one_hot.
Это разумная вводная статья с примерами: https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/
Предположим, что ваши независимые переменные (функции) находятся в кадре данных df
ты можешь использовать:
pd.get_dummies(df.iloc[:,columns_to_be_converted])
Пример с массивом numpy:
pd.get_dummies(np.array(["Mark","Sarah","Mark","John"]).astype(str))
Ouput:
John Mark Sarah
0 0 1 0
1 0 0 1
2 0 1 0
3 1 0 0