【问题标题】:Binary classification in Keras and LSTMKeras 和 LSTM 中的二进制分类
【发布时间】:2018-11-23 04:46:53
【问题描述】:

我有一个二元分类问题,这让我对 LSTM 建模的输入、输出感到非常困惑。 我想输入 5 行数据集,并获得第 6 行的标签颜色。 我的 X 有 5 个功能:rb、us、ls、Volume、pos 我的 Y 是 1 或 0 的标签 我的数据框:

         rb        us        ls    Volume  pos  color
0  0.080071  1.000000  0.964286  0.020507    1      1
1  0.017798  0.857143  0.857143  0.017643    1      1
2  0.026698  0.642857  0.500000  0.031085    4      1
3  0.029666  0.833333  1.000000  0.011411    2      0
4  0.008899  0.500000  1.000000  0.008371    4      0

我制作了一个这样的 5 行序列:

[[1.77976353e-02 8.57142857e-01 8.57142857e-01 1.76426968e-02
   1.00000000e+00]
  [2.66977791e-02 6.42857143e-01 5.00000000e-01 3.10845400e-02
   4.00000000e+00]
  [2.96664095e-02 8.33333333e-01 1.00000000e+00 1.14109866e-02
   2.00000000e+00]
  [8.89918602e-03 5.00000000e-01 1.00000000e+00 8.37062257e-03
   4.00000000e+00]
  [1.48316083e-02 8.33333333e-01 1.00000000e+00 8.47275749e-03
   2.00000000e+00]]

我应该如何对第 6 行的 Y 进行分类?我的意思是如何对第 6 行或下一个序列的第一个下一项进行分类?我是否需要以某种方式向网络声明它? 我的网络输入/输出有问题吗?如何获得第 6 项标签颜色的标签(二进制分类)? 我的代码:

import pandas as pd
from Util import window_nd as Reshape
from keras.utils import to_categorical
from keras.layers import Dense,RNN,LSTM,Activation,Dropout
from keras.models import Sequential


df = pd.read_csv('./EURUSD_DATAFRAME.csv')
print(df.head())
df['pos'] = df['pos'].astype('int')
dat = df.values

X = dat[0:30004,0:5]
Y = dat[0:30000,5]
X = Reshape(X,5)  #It's a custom function which reshaped the X to serialized (5,5) 
#Shape of X is  (30000, 5, 5)

Y = to_categorical(Y,num_classes=2)

model = Sequential()
model.add(LSTM(25,input_shape=(5,5),return_sequences=True))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(LSTM(1))
model.add(Activation('relu'))
model.add(Dense(2))
model.add(Activation('sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(X,Y,batch_size=5,epochs=10,validation_split=0.2)
p = model.predict(X)
print(p)

【问题讨论】:

  • 当前型号有什么问题?好像没问题,你试过运行吗?
  • @nuric 是的,我运行它。我有 85% 的准确率。但我无法弄清楚,输出是什么。它是否对下一个序列的第一个元素进行分类?或者它对整个下一个序列进行分类?我手动测试了它,我得到了前 50 行 50% 的正确答案。

标签: python tensorflow keras deep-learning classification


【解决方案1】:

我不确定“如何对第 6 行进行分类”是什么意思。让我试着从总体上澄清一些事情。也许这会有所帮助。

您的输入是一个 5x5 矩阵(按 5 个时间步长解释,每个时间步长 5 个特征),您的输出是您尝试分类的 2 个类的 logits。这两个类是否对应“第6行”取决于你。更准确地说,取决于您如何设置 Y。如果您的 Y 是“第 6 行”的类别,那么网络将学习预测。

你也可以看看这个类似的问题:Understanding Keras LSTMs

【讨论】:

    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多