Учебный набор содержит «метки» в качестве входных данных для модели керас - PullRequest
0 голосов
/ 27 февраля 2019

Я вижу, что моя модель 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 ]

0 голосов
/ 27 февраля 2019

Предположим, что ваши независимые переменные (функции) находятся в кадре данных 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
0 голосов
/ 27 февраля 2019

Стандартный способ обработки категориальных данных - создать словарь допустимых значений и затем преобразовать категорию в вектор one_hot.

Это разумная вводная статья с примерами: https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/

...