首页 > 解决方案 > 如何在 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 之后,准确率和损失变得恒定。

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 的新手。任何帮助表示赞赏。

标签: machine-learningkeras

解决方案


model.add(layers.Dense(4, activation = 'softmax'))在最后一层试试这个。

如果你有超过 2 个分类类,你最终需要一个 softmax 层。这是一个函数,输出 4 个不同类别的概率(全部加为 1),概率最高的将是您的类别。这样,您的网络将能够学习所有 4 个不同的类,而不仅仅是两个。


推荐阅读