Python 基于有限特征的精度百分比预测

Python 基于有限特征的精度百分比预测,python,tensorflow,machine-learning,keras,neural-network,Python,Tensorflow,Machine Learning,Keras,Neural Network,基于uber ride在订购后是否完成以及以何种方式完成的练习问题具有以下特点: Available Drivers int64 Placed Time float64 Response Distance float64 Car Type int32 Day Of Week int64 Response Delay float64 Order Completion int32 [target

基于uber ride在订购后是否完成以及以何种方式完成的练习问题具有以下特点:

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序列来预测目标。下面是它的样子:

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_数据是一个数据帧):

然后是预测,

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/内核SVM/随机森林/XGBoost和其他类似算法

编辑

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

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

否则,您无法将当前问题同时定义为分类问题和概率问题


我希望我已经给了您一个介绍性的见解。愉快的编码。

当您提出这个问题时,这是一个典型的机器学习分类问题

给定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,您将知道骑乘完成的概率。

否则,您不能将当前的问题同时定义为
loss: 0.3506 - accuracy: 0.8817 - val_loss: 0.3493 - val_accuracy: 0.8773