【问题标题】:Training set contains "labels" as inputs to keras model训练集包含“标签”作为 keras 模型的输入
【发布时间】:2019-02-26 22:38:43
【问题描述】:

如果输入列不是浮点值,我发现我的 keras 模型不能很好地处理它们。我希望能够使用包含“标签”的列来训练模型,标签是指排序 ID 或编码字符串名称。理想情况下,它将能够将这些标签列集成到其模型中,从而确定这些分类列中的哪些值表示更高的准确度。

例如,我想预测一场比赛的结果(赢=1,输=0),我想在历史数据中包含“球队名称”和“教练姓名”。理想情况下,该模型将确定哪些球队和教练更有可能获胜。

但是,当我运行 model.fit 并且 training_set 包含除 int/float 值(本质上是统计的,而不是分类的)以外的任何值时,它会为每个 epoch 生成相同的准确度,并且损失分数非常高。

这是我定义模型的方式:

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'])

如果我不包含任何分类数据,它会很好用,但我认为如果我可以让它与分类数据一起使用,它会改进得更多。

【问题讨论】:

    标签: python tensorflow keras training-data tf.keras


    【解决方案1】:

    处理分类数据的标准方法是创建一个包含有效值的字典,然后将类别转换为 one_hot 向量。

    这是一篇带有示例的合理介绍性文章: https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/

    【讨论】:

    • 这很有帮助,尤其是因为我使用的是 keras。我能够像这样转换数据框中的列:df['colA'] = keras.utils.to_categorical(df['colA'], num_classes=None, dtype='int')
    【解决方案2】:

    假设您的自变量(特征)在数据框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
    

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2017-10-25
      相关资源
      最近更新 更多