我对这个问题中的所有科目都很陌生。这是我第一次尝试Keras,Tensorflow,NNs或时间序列。如果你不是新手,你会立刻注意到的。
我从一个工业过程中得到了15个样本,每2秒读取一次温度、重量和热量,大约一小时(1876行)。样本如下:
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网络:
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}')我得到了不同的结果,但通常有以下几点:
Model testing...
test_target: [ 5 0 10]
test_preds: [10 0 10]
Accuracy score: 0.666666666666666666%的准确率是迄今为止我得到的最好的。
我不确定某些超参数。由于目标(固定的),我对100时代进行了某种程度的仲裁,批量大小作为总样本,categorical_crossentropy损失函数和按照上述groups列表进行分组。
我也不确定关于LSTM的事情。我的类别不仅是数字的,而且是序数的。我可以在这里得到一个回归结果。
我应该用NN来做这个吗?基本上,任何意见都是受欢迎的。
我有5个样品。我还需要多少?
非常感谢专家们!
发布于 2020-04-06 22:06:32
每个类只有5个样本,您可能不应该使用任何神经网络。如果您能够找到一种方法将您的长时间序列总结成几个数值特性,那么您可以尝试使用一个简单的Logistic回归模型。探索数据是这里的关键,也是理解问题域的关键。例如,这个过程的物理原理是什么,或者专家如何描述获得特定分数的要求。
即便如此,我还是会尝试收集更多10倍的数据。
https://datascience.stackexchange.com/questions/71543
复制相似问题