0

一个基于在订购后是否以及以何种准确性/概率完成 uber 乘车的练习题具有以下特征:

Available Drivers     int64
Placed Time           float64
Response Distance     float64
Car Type              int32
Day Of Week           int64
Response Delay        float64
Order Completion      int32 [target]

我的方法是使用 tf.Keras Sequential 来预测目标。这是它的样子:

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(16, activation='relu', input_shape=input_shape),
    tf.keras.layers.Dense(16, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

adam_optimizer = tf.keras.optimizers.Adam(learning_rate=LEARNING_RATE)

binary_crossentropy_loss = tf.keras.losses.BinaryCrossentropy()

model.compile(optimizer=adam_optimizer,
              loss=binary_crossentropy_loss,
              metrics=['accuracy'])
early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=ES_PATIENCE)

history = model.fit(train_dataset, validation_data=validation_dataset, epochs=EPOCHS, verbose=2,
                        callbacks=[early_stop])

我像这样规范化数据(注意 train_data 是一个数据框):

    train_data = tf.keras.utils.normalize(train_data)

然后进行预测,

predictions = model.predict_proba(prediction_dataset, batch_size=None)

训练结果:

loss: 0.3506 - accuracy: 0.8817 - val_loss: 0.3493 - val_accuracy: 0.8773

但这仍然给了我相应发生的低质量概率。这是错误的方法吗?

对于这样的问题,你会建议什么方法,我做错了吗?对于这个解决方案,神经网络是不是一个坏主意?非常感谢!

4

2 回答 2

1

正如您提出的问题,这是一个经典的机器学习分类问题

给定 N 个特征(自变量),您必须预测 1(一个)因变量。

您构建神经网络的方式很好。

由于您有一个二元分类问题,因此 sigmoid 激活是正确的。

关于模型的复杂性(层数、每层神经元的数量),它在很大程度上取决于您的数据集。

如果您有一个包含大量特征和大量示例的综合数据集(示例是数据框中的一行,具有 X1、X2、X3...Y),其中 X 是特征,Y 是因变量,您的模型可以复杂性不同。

如果您的数据集较小且具有一些特征,则建议使用小型模型。总是从一个小模型开始。

如果遇到欠拟合的问题(训练集以及验证集和测试集的准确性较差),您可以逐渐增加模型的复杂性(添加更多层,每层添加更多神经元)。

如果遇到过拟合问题,实施正则化技术可能会有所帮助(Dropout、L1/L2 正则化、噪声添加、数据增强)。

你必须考虑的是,如果你有一个小数据集,那么经典的机器学习算法可能会胜过深度学习模型。发生这种情况是因为神经网络非常“饥饿”--->与机器学习模型相比,它们需要更多的数据才能正常工作。您可以选择 SVM/Kernel SVM/Random Forest/ XGBoost 和其他类似的算法。

编辑!

是否以及以何种准确度/概率自动将问题分成两部分,而不仅仅是一个简单的分类。

我个人会做的是:由于概率发生在 0% 和 100% 之间,如果你在 X 列中有概率作为特征(你没有),那么根据数据点的数量(行) 您可以执行以下操作:我将为每个概率部分分配一个标签:1 到 (0%,25%), 2 到 (25%, 50%), 3 到 (50%,75%), 4至 (75%, 100%)。但这完全取决于先验概率信息(如果您将概率作为特征)。然后,如果你推断并得到标签 3,你就会知道骑行完成的概率。

否则,您不能将当前的问题既是分类问题又是概率问题。

我希望我给了你一个介绍性的见解。快乐编码。

于 2019-11-29T08:04:52.963 回答
1

如果您正在进行分类,您可能需要研究集成方法(森林、提升等)

如果您正在计算概率,您可能需要研究概率图形模型(贝叶斯网络等)

于 2019-11-29T15:03:41.997 回答