首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间序列连续分类

时间序列连续分类
EN

Data Science用户
提问于 2020-04-01 11:45:35
回答 1查看 85关注 0票数 1

Intro

我对这个问题中的所有科目都很陌生。这是我第一次尝试Keras,Tensorflow,NNs或时间序列。如果你不是新手,你会立刻注意到的。

问题

我从一个工业过程中得到了15个样本,每2秒读取一次温度、重量和热量,大约一小时(1876行)。样本如下:

代码语言:javascript
复制
      temp   weight     heat
t
0  31.9661  9.09606 -0.834733
2  31.9905  9.09503 -0.839906
4  32.0967  9.09374 -0.854042
6  32.3021  9.09315 -0.877126
8  32.5371  9.09390 -0.917037

这15个样本中的每一个都已由一位专家进行了分析,其中5个被评为糟糕(0),另5个被评为中等(5),第三批被评为完美(10)。我的目标是分析更多的样本,并做出相应的评估。

对数据的统计分析显示,唯一显示差异的特性是热流,所以我将重点放在这一栏。列名为calor (西班牙语中的“热”)。我还检测到尾部周围有非常同步的活动,但中间部分有很大差异,所以我也关注该部分(第1250至3250行)。

溶液

我正在将CSV读入字典,然后用以下代码将其传递给Keras网络:

代码语言:javascript
复制
sequences = [data[k][['calor']].loc[1250:3250].values for k in data.keys()]
final_seq = np.array(sequences)

targets = [5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10]
groups = [1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3]

train = np.array([final_seq[i] for i in range(len(groups)) if groups[i] == 1])
test = np.array([final_seq[i] for i in range(len(groups)) if groups[i] == 2])
validation = np.array([final_seq[i] for i in range(len(groups)) if groups[i] == 3])

train_target = np.array([targets[i] for i in range(len(groups)) if groups[i] == 1])
test_target = np.array([targets[i] for i in range(len(groups)) if groups[i] == 2])
validation_target = np.array([targets[i] for i in range(len(groups)) if groups[i] == 3])

# Building the model
model = Sequential()
model.add(LSTM(11, input_shape=train[0].shape))
model.add(Dense(11, input_shape=(11,), activation='softmax'))

adam = Adam(lr=0.001)

chk = ModelCheckpoint('best_model.pkl', monitor='val_accuracy', save_best_only=True, mode='max', verbose=1)

model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])

train_binary = to_categorical(train_target)
validation_binary = to_categorical(validation_target)
model.fit(train, train_binary, batch_size=len(train), epochs=100, callbacks=[chk], validation_data=(validation, validation_binary))

model = load_model('best_model.pkl')
test_preds = model.predict_classes(test)
print(f'test_target: {test_target}\ntest_preds: {test_preds}')
acc = accuracy_score(test_target, test_preds)
print(f'Accuracy score: {acc}')

我得到了不同的结果,但通常有以下几点:

代码语言:javascript
复制
Model testing...
test_target: [ 5  0 10]
test_preds: [10  0 10]
Accuracy score: 0.6666666666666666

66%的准确率是迄今为止我得到的最好的。

问题

我做得对吗?

我不确定某些超参数。由于目标(固定的),我对100时代进行了某种程度的仲裁,批量大小作为总样本,categorical_crossentropy损失函数和按照上述groups列表进行分组。

我也不确定关于LSTM的事情。我的类别不仅是数字的,而且是序数的。我可以在这里得到一个回归结果。

我应该用NN来做这个吗?基本上,任何意见都是受欢迎的。

,我需要更多的数据,对吗?

我有5个样品。我还需要多少?

非常感谢专家们!

EN

回答 1

Data Science用户

发布于 2020-04-06 22:06:32

每个类只有5个样本,您可能不应该使用任何神经网络。如果您能够找到一种方法将您的长时间序列总结成几个数值特性,那么您可以尝试使用一个简单的Logistic回归模型。探索数据是这里的关键,也是理解问题域的关键。例如,这个过程的物理原理是什么,或者专家如何描述获得特定分数的要求。

即便如此,我还是会尝试收集更多10倍的数据。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/71543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档