"LSTM具有更多特征/类别"

2024-09-28 19:26:44 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用Python中的Sequential from Keras模型在LSTM上使用多个特性/类作为输入/输出?在

更具体地说,我想将其用作网络的输入和输出:[featureu][FeatureB][FeatureC]。 FeatureA是一个分类类,有100个不同的可能值,表示收集数据的传感器; 特征B为开/关指示灯,为0或1; FeatureC也是一个有5个唯一值的分类类。在

数据示例:

 1. 40,1,5
 2. 58,1,2
 3. 57,1,5
 4. 40,0,1
 5. 57,1,4
 6. 23,0,3

当使用原始数据时,在模型.编译,损耗大于10.0。在

将数据标准化为0-1之间的值并使用损失均方误差时,损失时的平均值为0.27。但当对其进行预测测试时,结果毫无意义。在

有什么建议或教程我可以参考吗? 提前谢谢。在


Tags: 数据from模型网络分类传感器特性keras
1条回答
网友
1楼 · 发布于 2024-09-28 19:26:44
  1. 您需要将FeatureC转换为二进制类别。均方误差是用于回归的,我能告诉你的最好结果是试图预测传感器和状态的某个组合属于哪个类。因为有5个可能的类,你可以认为你在试图预测类是红色、绿色、蓝色、黄色还是紫色。现在这些都是用数字来表示的,但是对于一个回归模型来说,你要预测3.24这样的值是没有意义的。在

    实际上,您将FeatureC的值转换为5列二进制值。因为类似乎是独占的,所以应该有一个1,一行的其余列将是0。因此,如果第一行是“red”,那么它将是[1,0,0,0]

  2. 为了获得最佳效果,您还应该将FeatureA转换为二进制分类特征。出于与上述相同的原因,传感器80不是传感器20的4倍,而是不同的实体。

  3. 模型的最后一层应该是softmax类型,有5个神经元。基本上,你的模型最终会试图预测每个类的概率。

因为有索引,所以看起来你在处理一个数据帧。因此,我会尝试:

import keras
import numpy as np
import pandas as pd # assume that this has probably already been done though

feature_a = data.loc[:, "FeatureA"].values  # pull out feature A
labels = data.loc[:, "FeatureC"].values   # y are the labels that  we're trying to predict
feature_b = data.loc[:, "FeatureB"].values  # pull out B to make things more clear later

# make sure that feature_b.shape = (rows, 1) otherwise reset the shape
# so hstack works later
feature_b = feature_b.reshape(feature_b.shape[0], 1)

labels -= 1  # subtract 1 from all labels values to zero base (0 - 4)
y = keras.utils.to_categorical(labels)
# labels.shape should be (rows, 5)

# convert 1-100 to binary columns
# zero base again
feature_a -= 1  

# Before: feature_a.shape=(rows, 1)
feature_a_data = keras.utils.to_categorical(feature_a)
# After: feature_a_data.shape=(rows, 100)

data = np.hstack([feature_a_data, feature_b])
# data.shape should be (rows, 101)
# y.shape should be (rows, 5)

现在您已经准备好训练/测试分割等等。在

以下是一些有多类预测的东西:

https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py

相关问题 更多 >