【问题标题】:Cyclic transformation of dates日期的循环变换
【发布时间】:2020-03-28 01:09:57
【问题描述】:

我想在机器学习模型中使用一年中的某一天。由于一年中的这一天不是连续的(2019 年的第 365 天之后是 2020 年的第 1 天),我想在 link 之后执行循环(正弦或余弦)变换。

但是,在每一年中,新的转换变量没有唯一值;例如,同一年的两个值为 0.5,请参见下图。 我需要能够在模型训练和预测中使用一年中的某一天。对于正弦变换中的 0.5 值,它可以在 31.01.2019 或 31.05.2019 上,然后使用 0.5 值可能会使模型混淆。

是否可以让模型在同一年内区分0.5这两个值?

我正在使用 Maxent 软件对物种的分布进行建模。物种数据在 20 年内每天都是连续的。我需要模型来捕捉当天或季节的信号,而不是明确地将它们中的任何一个用作分类变量。

谢谢

EDIT1 基于以下furcifer的评论。但是,我发现增量建模方法对我的应用程序没有用处。解决了后续天数一致的问题;例如2018 年 12 月 30 日、2018 年 12 月 31 日和 2019 年 1 月 1 日。但这与从某个参考日(重量 = 1)开始计算天数没有什么不同。 2019 年同一日期的价值远高于 2014 年,这在生态上没有意义。我希望从所使用的日常环境条件(解释变量)中捕捉到年际变化。我需要在模型中使用天的原因是为了捕捉迁徙物种分布的季节性趋势,而没有明确使用月份或季节作为分类变量。为了预测今天合适的栖息地,我需要做出这个预测不仅取决于今天的环境条件,还取决于一年中的哪一天。

【问题讨论】:

    标签: date time maxent machine-learning-model


    【解决方案1】:

    这是一个常见问题,但我不确定是否有完美的解决方案。我要注意的一件事是,您可能希望使用日期变量对两件事进行建模:

    • 季节性影响
    • 独立于季节的趋势和自相关

    对于季节性影响,循环变换有时用于线性模型,但我看不出对 ML 模型有什么意义 - 如果数据足够多,您会期望边缘有很好的连接,那么问题是什么?我认为您链接到的帖子会分散注意力,或者至少它们没有正确解释循环转换为何以及何时有用。我只会使用 dYear 来模拟季节性影响。

    但是,不连续性可能是建模趋势/自相关/非季节性或年份间常见的时间序列变化的问题。出于这个原因,我会在模型中添加一个绝对日期,所以使用

    y = dYear + dAbsolute + otherPredictors
    

    经过良好调整的 ML 模型应该能够完成剩下的工作,但需要注意通常的注意事项,并且如果您有足够的数据。

    【讨论】:

      【解决方案2】:

      根据您的需要,这可能不是正确的选择,我想到了两个选择。

      1. 增量建模

      在这种情况下,日期以线性方式建模,例如 2018 年 12 月 12 日

      为此,您只需要某种形式的转换函数,将日期转换为数值。

      由于有许多日期需要转换为数字表示,首先要确保输出列表的顺序也与 Lukas 提到的相同。最简单的方法是为每个单位添加权重(weight_year > weight_month > weight_day)。

      def date2num(date_time):
        d, m, y = date_time.split('-')
        num = int(d)*10 + int(m)*100 + int(y)*1000 # these weights can be anything as long as 
                                                   # they are ordered
        return num
      

      现在,标准化数值很重要。

      import numpy as np
      date_features = []
      for d in list(df['date_time']):
        date_features.append(date2num(d))
      date_features = np.array(date_features)
      date_features_normalized = (date_features - np.min(date_features))/(np.max(date_features) - np.min(date_features))
      
      1. 使用日、月、年作为单独的特征。因此,我们不考虑整个日期,而是进行隔离。动机是输出与特定日期、月份等之间可能存在某种关系。例如,输出可能在夏季(特定月份)或周末(特定日期)突然增加

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 2018-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多