如何在Keras中对系列数据进行分类?

时间:2018-04-28 13:05:13

标签: machine-learning keras

输入数据的结构是:

print(df.col)
0    [262, 330, 392, 522, 784, 0, 0]
1    [262, 290, 330, 392, 522, 784, 0]
2    [262, 330, 392, 522, 784, 0, 0]
3    [250, 262, 330, 392, 522, 784, 0]
4    [262, 290, 306, 330, 392, 784, 0]
.
.
.

我有可变大小的数据,所以我最后添加了一个0的填充来修复输入数据的形状。

输出栏是:

print(df.predict)

array([[0., 0., 0., 1.],
       [1., 0., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 1., 0., 0.],...])

输出是一个热编码。

以下是我的模特:

model = Sequential()
model.add(Dense(7, activation='relu', input_dim = 7))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(4))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X_train, y_train, epochs=500, batch_size=10,  verbose=2)

精确度和损失在2-3个时期后变得不变。

Epoch 1/500
0s - loss: 5.8413 - acc: 0.1754
Epoch 2/500
0s - loss: 5.7398 - acc: 0.1754
Epoch 3/500
0s - loss: 5.7190 - acc: 0.1754
Epoch 4/500
0s - loss: 5.6885 - acc: 0.1754
Epoch 5/500
0s - loss: 5.6650 - acc: 0.1754
Epoch 6/500
0s - loss: 5.6403 - acc: 0.1754
Epoch 7/500
0s - loss: 5.6164 - acc: 0.2456
Epoch 8/500
0s - loss: 5.5900 - acc: 0.2456
Epoch 9/500
0s - loss: 5.5730 - acc: 0.2456
...
0s - loss: 5.3727 - acc: 0.1754
Epoch 499/500
0s - loss: 5.3727 - acc: 0.1754
Epoch 500/500
0s - loss: 5.3727 - acc: 0.1754

我有72个数据点和4个类(每个类约18个样本) 数据相当简单。为什么准确度如此之低?

模型设计正确吗? 我是ML和Keras的新手。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

在最后一层尝试此model.add(layers.Dense(4, activation = 'softmax'))

如果您有两个以上的分类类,最后需要一个softmax图层。这是一个函数,它输出4个不同类的概率(全部加1),概率最高的概率将是你的类。通过这种方式,您的网络将能够学习所有4个不同的课程,而不仅仅是两个课程。