Keras损失不减少的非线性回归:离群值和/或数据格式问题?

时间:2018-08-30 10:52:46

标签: machine-learning keras outliers non-linear-regression loss

我拥有一个数据表,它的两个列产生了一个看起来像这样的图。请注意,Y轴在日志中。

Don't mind the random Kanji. That's already fixed

我认为,通过机器学习使用TF和Keras进行的非线性回归显示这种关系可能是一个好主意。代码如下:

def createModel():
    model = Sequential()
    model.add(Dense(50, activation='relu', input_dim=1))
    model.add(Dense(25, activation='relu', input_dim=1))
    model.add(Dense(1, activation='linear'))

    return model

model1 = createModel()
model1.compile(SGD (lr=0.0001),loss='mse')
print(model1.summary())

Taisha_Learn=model1.fit(Heisei_Learn["竣工年月"],Heisei_Learn["平成27年まで詰めた堆砂容量_Percent"],batch_size=50, epochs=1000, validation_split=(0.08), verbose=2)

predictions = model1.predict(Heisei_Learn["竣工年月"], verbose=1)
plt.plot(Heisei_Learn["竣工年月"],predictions)
# plt.legend([ 'Predictated Y'])
plt.show()

该模型表现糟糕。损失几乎没有减少。随后,这就是预测。

Absolutely horrible prediction

我已经尝试过使用其他优化器(Adam,RMSprop),学习率和批量大小,但没有积极作用。 我在考虑是否可能由于异常而导致数据问题。我只是在相应的栏中过滤掉了NaN。

Heisei = pd.read_excel("日本ダム/平成27.xlsx")
Heisei_Learn=Heisei.dropna(subset=['平成27年まで詰めた堆砂容量_Percent'])

我确实尝试了许多更改,但通常情况下,损失看起来像这样:

Nightmarish Loss

必须有一种更好的方法来从数据中获得真实的非线性回归。关于它们,我必须改变吗?再次,请查看原始问题中发布的图表。拉力吓到我了--.....

有没有像样的人来帮助像我这样愚蠢的人?

2 个答案:

答案 0 :(得分:0)

由于您处于回归设置中,因此输出层的激活应为 linear ,并且绝对不能为softmax(通常仅用于分类);将模型的最后一层更改为

model.add(Dense(1, activation='linear'))

或者只是

model.add(Dense(1))

因为默认激活(即,如果您未指定任何内容)是线性的(docs)。

已完成此操作,开始尝试将学习率LR值设为0.001 ...

答案 1 :(得分:0)

  1. NN对回归的表现并不惊人。考虑将您的问题转换为分类问题(如果可能)
  2. 最好用LeakyReLU代替Relu
  3. 最大的问题可能是损失,由于离群值,“ mse”会造成巨大损失。尝试“ mae”。但由于第一点,请准备好取得平均结果。