ML序列分类

ML sequence classification

我正在研究一个问题,用于在包含 8 列的日志中对特定类型的岩石 (rock_type) 进行分类。日志是一个序列,其中一列是深度。

例如

depth    f_1   f_2   ...   f_n       rock_type
 0       0.4   0.3         14.5        0 
1.3      0.2   0.1         13.8        0
2.4      0.8   0.3         9.7         1
3.2      1.4   0.3         12.5        1
4.9      1.8   2.6         15.2        1

我有一个上面列出的训练集,每个点都有标签。

问题是岩石类型一般出现在batches/chunks。这意味着您将多次拥有相同的岩石类型(不仅仅是在一个深度点)。

到目前为止,我采用的方法是使用普通的 ML 分类模型 (RF/XGBoost),它提供了一个公平的性能,但该模型没有考虑到这是一个时间序列问题,正如我所看到的它 - 因为如果点 t-1 是 rock_type 0,那么下一个点 (t) 很可能也是 rock_type 0)。因此,我想到了为此使用 LSTM (Keras/tensorflow) 或类似模型。

我的测试集是一个连续的序列,我想将序列的某些部分分成不同类型的岩石。 (例如,300-450 米的深度是岩石 0,700-780 米的深度是岩石 1 等)。

我也曾为此使用 CNN。将序列的某些部分识别为特定的岩石类型。

有人对如何解决这个问题有建议吗?

LSTM 应该可以工作,但可能有点矫枉过正。当顺序很重要时,LSTM 的效果非常好(想想单词中的字母)。在您的问题中,您可能更关心岩石类型的分布,而不是岩石类型的确切顺序。

所以我会尝试构建水桶(之前的 x 米)并对岩石类型分布进行编码(例如 0 型的 .45、1 型的 .15 和 2 型的 .40 或类似的东西)。这样做的好处是训练速度也会更快,而且可能更容易 explain/understand。您需要尝试不同的 x 值或保留多少个不同的桶。

您还应该在输入中包含一个丢失层,以确保您的模型能够正确概括。危险在于模型只查看之前的桶而忽略其他信号(套袋无济于事)。