Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 日期的循环变换_Date_Time_Maxent_Machine Learning Model - Fatal编程技术网

Date 日期的循环变换

Date 日期的循环变换,date,time,maxent,machine-learning-model,Date,Time,Maxent,Machine Learning Model,我想在机器学习模型中使用一年中的某一天。由于一年中的某一天不是连续的(2019年的第365天之后是2020年的第1天),因此我想在此之后执行循环(正弦或余弦)变换 然而,在每一年中,新转换变量没有唯一的值;例如,同一年0.5的两个值,见下图。 我需要能够在模型训练和预测中使用一年中的某一天。对于正弦变换中的0.5值,它可能在2019年1月31日或2019年5月31日,那么使用0.5值可能会使模型混淆 是否可以使模型在同一年内区分0.5的两个值 我正在用Maxent软件模拟一个物种的分布。物种数据

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

然而,在每一年中,新转换变量没有唯一的值;例如,同一年0.5的两个值,见下图。 我需要能够在模型训练和预测中使用一年中的某一天。对于正弦变换中的0.5值,它可能在2019年1月31日或2019年5月31日,那么使用0.5值可能会使模型混淆

是否可以使模型在同一年内区分0.5的两个值

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

谢谢

EDIT1
根据furcifer下面的评论。但是,我发现增量建模方法对我的应用程序没有用处。它解决了后续日期之间一致差异的问题;e、 g.2018年12月30日、2018年12月31日和2019年1月1日。但它与计算某一参考日的天数(权重=1)没有区别。2019年同一天的价值比2014年高得多,这在生态上没有意义。我希望从所使用的日常环境条件(解释变量)中捕捉年际变化。我之所以需要在模型中使用day,是为了捕捉迁徙物种分布的季节趋势,而无需明确使用月份或季节作为分类变量。为了预测适合今天的栖息地,我需要做出这样的预测,这不仅取决于今天的环境条件,还取决于一年中的哪一天。

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

  • 增量建模
  • 在这种情况下,日期以线性方式建模,比如2018年12月12日<2019年12月12日

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

    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))
    
    由于有许多日期需要转换为数字表示,首先要确保输出列表的顺序与Lukas提到的相同。最简单的方法是将重量添加到每个单位(重量年>重量月>重量日)

    现在,规范化数值很重要

    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))
    
  • 使用日、月、年作为单独的功能。因此,我们不考虑整个日期,而是将日期分开。其动机可能是产出与特定日期、月份等之间存在某种关系。例如,产出可能在夏季(特定月份)或周末(特定天数)突然增加

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

    • 季节效应
    • 季节独立趋势和自相关
    对于季节性效应,循环变换有时用于线性模型,但我看不出ML模型的意义-有足够的数据,你会期望在边缘有一个很好的连接,那么问题是什么?我认为你链接到的帖子会分散你的注意力,或者至少它们没有正确地解释为什么和什么时候循环转换是有用的。我只想用dYear来模拟季节效应

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

    y = dYear + dAbsolute + otherPredictors
    
    如果您有足够的数据,一个经过良好调优的ML模型应该能够完成剩下的工作,并提供通常的警告