我正在尝试构建一个神经网络,以便在 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/