我正在尝试构建一个NN,以便在Tensorflow中使用Keras进行回归。
我试图基于一组功能来预测歌曲的图表排名,并且确定了低特征1,高特征2和高特征3与高特征之间的强烈相关性图表上的排名(较低的排名,例如排名1)。
但是,在训练完我的模型后,MAE在训练和测试集上都达到3500(非常高)。在其中添加一些值时,对于所有三个要素中的低值观察值,似乎给出最低的输出排名。
我认为这可能与我规范数据的方式有关。将其桥接到每个功能都有一列的pandas数据框后,我使用以下代码进行归一化:
def normalise_dataset(df):
return df-(df.mean(axis=0))/df.std()
我正在使用一个顺序模型,其中一个密集输入层具有64个神经元,一个密集输出层具有一个神经元。这是它的定义代码:
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
答案 0 :(得分:2)
第一个明显的事情是您以错误的方式规范了数据。正确的方法是
return (df - df.mean(axis=0))/df.std()
我只是更改了括号,但基本上是将(数据-平均值)除以标准差,而将平均值除以标准差。