我有一组来自传感器的表格数据,测量了各种特征。当传感器“关闭”时,它会报告值为零。我正在训练一些机器学习模型,如kNN、XGBoost和神经网络,用于分类。这是我面临的问题:我可以逐行训练和预测;然而,最好是将一个范围作为整体进行分类,而不是逐行。另一个问题是,这个范围的大小可能变化。作为一个非常基本的例子,请看这个图表,展示了这个范围。
我有一个基本的Keras模型:
model = Sequential()model.add(Dense(100, activation='relu'))model.add(Dense(100, activation='relu'))model.add(Dense(100, activation='relu'))model.add(Dense(num_classes, activation='softmax'))print(model.summary())model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
训练数据的形状为20个特征和4个类别。我该如何:1.) 格式化我的训练数据2.) 调整输入数据以作为一个“整体”进行分类,而不是逐行3.) 虽然这里讨论的是使用Keras。相同的输入形状/训练是否可以应用于XGBoost或kNN?
回答:
我假设图表中的蓝色线条代表你的目标。我认为预测范围整体而不是样本一个一个预测存在一个根本问题。
假设有一些合理的逻辑可以将样本范围压缩成一个(比如每个特征取平均值,或连接,或其他什么…),显然你首先需要识别这个范围本身。然而,这个范围识别步骤依赖于对目标的了解(至少从所展示的图表来看是这样的)。
如果预处理步骤依赖于对目标的了解,你也需要在预处理数据和进行预测之前知道测试集的目标。换句话说,你需要在进行预测之前知道结果,这将毫无意义。
你已经说明你正在尝试进行分类,但你的目标似乎是连续的。我不知道你的类别是什么,或者它们与什么模式相关,但你需要在开始解决这个问题作为分类问题之前对目标进行分箱。这样做你可能会丢失很多信息。
因此,我建议从解决回归问题开始。尝试预测每个样本的连续目标。一旦你做到了,你可以应用一些模式匹配逻辑来识别给定样本/范围的类别(例如,你可以切片前一步的目标/预测序列,将每个切片与所需的类别相关联,并使用这些数据作为一些分类算法的新数据集)。
至于可变长度的输入。一些深度学习架构允许你处理可变长度的输入,比如RNN或自适应池化。你可以尝试在知道如何预测之前提到的连续目标后再做这个。非深度学习算法通常期望所有样本具有相同的形状,因此没有通用/自动的方式在它们和处理可变长度输入的深度学习算法之间重用相同的输入。