【问题标题】:ML sequence classification机器学习序列分类
【发布时间】:2018-07-31 09:11:16
【问题描述】:

我正在研究在由 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

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

问题是岩石类型通常以批次/块的形式出现。这意味着您将多次拥有相同的岩石类型(不仅仅是在一个深度点)。

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

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

我也考虑过为此使用 CNN。将序列的一部分识别为特定的岩石类型。

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

【问题讨论】:

    标签: python keras conv-neural-network lstm rnn


    【解决方案1】:

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

    所以我会尝试构建存储桶(之前的 x 米)并对岩石类型分布进行编码(例如 0 型 0.45、1 型 0.15 和 2 型 0.40 或类似的东西)。这样做的好处是训练起来会更快,并且可能更容易解释/理解。您需要尝试不同的 x 值或保留多少个不同的存储桶。

    您还应该在输入中包含一个 dropout 层,以确保您的模型正确泛化。危险在于模型只查看之前的桶而忽略了其他信号(装袋无济于事)。

    【讨论】:

    • 谢谢。这是一个非常有趣的方法。通常,在岩石类型之间,存在从一种岩石类型到另一种岩石类型的过渡。 IE。序列中可能有几个点会告诉您,现在我们正在从岩石类型 0 过渡到 1。因此下一个岩石类型是 1。因此,与硬/刚性边界相比,过渡通常具有软边界说得通。对此有何意见?
    • 它应该适用于软边界和硬边界,但桶大小应该合适(您需要尝试各种值)。您还可以尝试对进入存储桶的值应用衰减(alpha ^ delta_depth,对于 [0, 1] 中的某些 alpha)。这将对最接近的样本施加更大的权重。您需要尝试各种组合,看看哪种组合效果最好。
    • 您在这里绘制的特征工程的有趣想法。我会尝试这种方法。我想这个问题没有正确的答案,但我会接受你的。谢谢。
    猜你喜欢
    • 2020-05-04
    • 2023-04-04
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2020-06-28
    • 2017-09-28
    • 2012-03-14
    相关资源
    最近更新 更多