python - 基于有限特征预测百分比准确度

标签 python tensorflow machine-learning keras neural-network

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

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

但这仍然给我提供了相应发生的较差质量概率。这是错误的做法吗?

对于这样的问题,您建议采取什么方法?我这样做完全错误吗?神经网络对于这个解决方案来说是一个坏主意吗?非常感谢!

最佳答案

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

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

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

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

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

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

如果您有一个包含少量特征的小型数据集,建议使用小型模型。始终从小模型开始。

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

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

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

编辑!

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

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

否则,您无法将当前问题同时构建为分类问题和概率问题。

我希望我已经为您提供了介绍性的见解。快乐编码。

关于python - 基于有限特征预测百分比准确度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100163/

相关文章:

python pandas dataframe 仅为阈值中的数据创建 bin

Python:用句点(或其他字符)替换字符串中除第 n 个字母外的每个字母

python - 如何将异步操作映射到有序数据流并获得相同顺序的结果?

python-2.7 - ImportError : libnvidia-fatbinaryloader. so.375.39:无法打开共享对象文件:没有这样的文件或目录

pandas - 如何更改 tensorflow 的 numpy 数组的数据类型

python-3.x - 通过取预测输出的绝对值来改进线性回归模型?

python - 单词聚类列表列表

python - 我找不到一种方法来使用 sklearn pandas 中数据框中的数据来避免值错误

python - 没有隐藏层和线性激活函数的神经网络应该近似线性回归?

python - 根据 reg 分数为回归模型选择最佳变量组合