我看到我的keras模型不能很好地处理输入列(如果它们不是浮点值)。我希望能够使用包含“标签”的列来训练模型,而标签指的是各种ID或编码的字符串名称。理想情况下,它将能够将这些标签列集成到其模型中,从而确定这些分类列中的哪些值表示较高的准确性。
例如,我试图预测一场比赛的结果(胜利= 1,亏损= 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'])
如果我不包含任何分类数据,效果很好,但我认为,如果我可以将其与分类数据一起使用,它将进一步改善。
答案 0 :(得分:1)
处理分类数据的标准方法是创建有效值的字典,然后将类别转换为one_hot向量。
这是一个带有示例的合理介绍性文章: https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/
答案 1 :(得分:1)
假设自变量(特征)在数据框df
中,您可以使用:
pd.get_dummies(df.iloc[:,columns_to_be_converted])
具有numpy数组的示例:
pd.get_dummies(np.array(["Mark","Sarah","Mark","John"]).astype(str))
输出:
John Mark Sarah
0 0 1 0
1 0 0 1
2 0 1 0
3 1 0 0