【问题标题】:org.apache.commons.math3.stat.regression.SimpleRegression X and Y axisorg.apache.commons.math3.stat.regression.SimpleRegression X 和 Y 轴
【发布时间】:2020-10-23 00:22:34
【问题描述】:

数据集 --> [[2019-05-01,4],[2019-05-02,9],[2019-05-03,13],[2019-05-04,17],[2019 -05-05,21],[2019-05-06,25],[2019-05-07,29],[2019-05-08,33],[2019-05-09,37],[2019 -05-10,41],[2019-05-11,45],[2019-05-12,49],[2019-05-13,53],[2019-05-14,57],[2019 -05-15,61],[2019-05-16,65],[2019-05-17,69],[2019-05-18,73],[2019-05-19,77],[2019 -05-20,81],[2019-05-21,85],[2019-05-22,89],[2019-05-23,93],[2019-05-24,97],[2019 -05-25,101],[2019-05-26,105]];

我有一个像上面这样的数据集,其中日期是 x 轴和一些在 y 轴上每天递增的随机数。

如何使用 SimpleRegression java 类 predict() 方法预测未来日期的值。

我被困在这里了。任何想法都会有所帮助。

谢谢。

【问题讨论】:

    标签: java machine-learning dataset


    【解决方案1】:
    We can add the date in milliseconds in the X-axis to get the more accurate predicted data. 
    
    Posting the whole code here.
    
    
    ============================================================
    import java.time.Instant;
    import java.time.temporal.ChronoUnit;
    
    import org.apache.commons.math3.stat.regression.SimpleRegression;
    
    public class TestRegression {
        public static void main(String args[])
        {
            SimpleRegression s = new SimpleRegression();
            Instant now = Instant.now();
    
            //s.addData(new Date(),3);
            //s.addData(3,4);
            s.addData(now.toEpochMilli(),5);
    
            now = Instant.now();
            Instant yesterday = now.minus(1, ChronoUnit.DAYS);
    
            s.addData(yesterday.toEpochMilli(),3);
    
            now = Instant.now();
            yesterday = now.minus(2, ChronoUnit.DAYS);
    
            s.addData(yesterday.toEpochMilli(),1);
    
            now = Instant.now();
            Instant 2daysFromNow = now.plus(2, ChronoUnit.DAYS);
            System.out.println(s.predict(2daysFromNow.toEpochMilli()));
    
            now = Instant.now();
            Instant nextDay = now.plus(1, ChronoUnit.DAYS);
            System.out.println(s.predict(nextDay.toEpochMilli()));
        }
    }
    
    
    ============================================================
    

    【讨论】:

      【解决方案2】:

      如果您已将数据点加载到某个可迭代集合中,则可以使用类似类型的代码进行预测:

      public Iterable<DataPoint> getNextDataPoints(long returnTime, Iterator<DataPoint> dataPointRange)
              {
                  long start = -1L;
                  long stop = -1L;
                  DataPoint first = null;
                  DataPoint second = null;
                  int count = 0;
                  SimpleRegression simpleRegression = new SimpleRegression(true);
      
                  while (dataPointRange.hasNext())
                  {
                      count ++;
                      DataPoint dp = dataPointRange.next();
                      if (second == null)
                      {
                          if (first == null)
                              first = dp;
                          else
                              second = dp;
                      }
      
                      stop = dp.getTimestamp();
                      if (start == -1L)
                          start = dp.getTimestamp();
      
                      simpleRegression.addData(dp.getTimestamp(), dp.getDoubleValue());
                  }
      
                  List<DataPoint> ret = new ArrayList<DataPoint>();
      
                  if (count == 1)
                  {
                      ret.add(first);
                  }
                  else if (count == 2)
                  {
                      ret.add(first);
                      ret.add(second);
                  }
                  else if (count != 0)
                  {
                      ret.add(m_dataPointFactory.createDataPoint(start, simpleRegression.predict(start)));
                      ret.add(m_dataPointFactory.createDataPoint(stop, simpleRegression.predict(stop)));
                  }
      
                  return (ret);
              }
      

      感谢kairosdb

      另一个例子here

      【讨论】:

      • 应该是“DataPoint”可迭代集合还是可以是任何可迭代集合?
      • @ValarMathi 如果它是任何可迭代的集合,那么您可以使用方法regression.addData(..,..) 将数据点添加到您的回归中。它接受双数据类型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多