python - Tensorflow 神经网络的简单回归误差非常高

标签 python tensorflow machine-learning keras data-science

我正在尝试构建一个神经网络,以便在 Tensorflow 中使用 Keras 进行回归。

我尝试根据一组特征来预测歌曲的排行榜排名,我发现低特征 1、高特征 2 和高特征 3 与高特征之间存在很强的相关性。图表上的位置(输出排名较低,例如位置 1)。

然而,在训练我的模型之后,训练集和测试集的 MAE 都约为 3500(非常非常高)。添加一些值后,对于所有 3 个特征中值较低的观测值,它似乎给出了最低的输出排名。

我认为这可能与我标准化数据的方式有关。将其放入 pandas 数据框中(每个功能都有一列)后,我使用以下代码进行标准化:

def normalise_dataset(df):
    return df-(df.mean(axis=0))/df.std()

我使用的顺序模型包含一个包含 64 个神经元的密集输入层和一个包含 1 个神经元的密集输出层。这是其定义代码:

model = keras.Sequential([
    keras.layers.Dense(64, activation=tf.nn.relu, input_dim=3),
    keras.layers.Dense(1)
])
optimizer = tf.train.RMSPropOptimizer(0.001)
model.compile(loss='mse', optimizer=optimizer, metrics=['mae'])

我是一名软件工程师,而不是数据科学家,所以我不知道这个模型设置是否是解决我的问题的正确配置,我非常愿意接受有关如何使其更好地适合我的使用的建议案件。

谢谢

编辑:这是我的训练数据的前几个整体,大约有 100,000 个整体。最后的 col (finalPos) 包含标签,这是我试图预测的字段。

chartposition,tagcount,artistScore,finalPos
256,191,119179,4625
256,191,5902650,292
256,191,212156,606
205,1480523,5442
256,195,5675757,179
256,195,933171,7745

最佳答案

第一个明显的事情是您以错误的方式规范化数据。正确的做法是

return (df - df.mean(axis=0))/df.std()

我刚刚更改了括号,但基本上它是(数据 - 平均值)除以标准差,而您是将平均值除以标准差。

关于python - Tensorflow 神经网络的简单回归误差非常高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52095862/

相关文章:

python - 为什么我的训练损失在使用预先训练的权重训练 AlexNet 最后一层时会出现振荡?

machine-learning - 如何通过 LibSVM Weka 实现预处理数据集以获得最大效率

Python问号正则表达式

python - 如何使用 Tweepy 仅存储推文文本

python - 将 int 格式化为 int,但将 float 格式化为 %.3f

android - 如何在 Android Things 上运行 TensorFlow Inference,例如对图像进行分类?

tensorflow - tf.group中的操作是否按顺序执行?

javascript - 返回的 python 值在插入 javascript 数组后会破坏 html 表

docker - 如何在Mac上从Docker保存结果

machine-learning - 自动学习集群