Java Spark Naive Bayes – 预测未来时间戳

关于使用SparkML和朴素贝叶斯进行预测/预测的一个小问题。

我有一个非常简单的数据库,仅包含日期的时间戳和当天卖出的煎饼数量:

dataSetPancakes.show();+----------+-----+|      time|label|+----------+-----+|1622505600|    1||1622592000|    0||1622678400|    3||1622764800|    1||1622851200|    1||1622937600|    1||1623024000|    1||1623110400|    2||1623196800|    2||1623283200|    0|+----------+-----+only showing top 10 rows"

非常简单,我只想预测明天、后天等的煎饼销售量…

因此,我尝试了朴素贝叶斯模型,按照这里的教程 https://spark.apache.org/docs/latest/ml-classification-regression.html#naive-bayes,我编写了以下代码:

       VectorAssembler vectorAssembler = new VectorAssembler().setInputCols(new String[]{"time"}).setOutputCol("features");        Dataset<Row> vectorData = vectorAssembler.transform(dataSetPancakes); NaiveBayes naiveBayes = new NaiveBayes();        NaiveBayesModel model = naiveBayes.fit(vectorData);        Dataset<Row> predictions = model.transform(vectorData);        predictions.show();    model.predict(new DenseVector(new double[]{getTomorrowTimestamp()})));

我甚至看到了这样的结果:

-RECORD 0-------------------------------------------------------------------------------------------------------------- time          | 1622505600                                                                                             label         | 1                                                                                                      features      | [1.6225056E9]                                                                                          rawPrediction | [-0.9400072584914714,-1.0831081021321447,-1.702147310538368,-2.5494451709255714,-4.564348191467836]    probability   | [0.39062499999999994,0.33854166666666663,0.18229166666666666,0.07812500000000001,0.01041666666666667]  prediction    | 0.0                                                                                                   -RECORD 1-------------------------------------------------------------------------------------------------------------- time          | 1622592000                                                                                             label         | 0                                                                                                      features      | [1.622592E9]                                                                                           rawPrediction | [-0.9400072584914714,-1.0831081021321447,-1.702147310538368,-2.5494451709255714,-4.564348191467836]    probability   | [0.39062499999999994,0.33854166666666663,0.18229166666666666,0.07812500000000001,0.01041666666666667]  prediction    | 0.0                                                                                                   

但至于预测本身,不幸的是,它总是显示0.0为明天。

请问这个问题的原因是什么?

谢谢


回答:

你不应该用你用来预测的同一数据集进行训练。否则,你就不会进行任何预测。

Dataset<Row>[] splits = vectorData.randomSplit(new double[]{0.6, 0.4}, 1234L);Dataset<Row> train = splits[0];Dataset<Row> test = splits[1];

另外,完全有可能算法学到的是,对于任何一天,最可能的结果是0。正如你应该知道的,日期和销售数量之间没有真正的关系。这些日期不是重复出现的,因此无法进行真正的预测。贝叶斯算法也不明白这些条目实际上是一系列事件。它只是计算当“feature”值例如为“1622505600”时,“label”值的概率有多高。

我建议使用一周中的某一天作为特征,因为这些是重复出现的,这样更有意义,可以看出在哪个工作日销售量特别高。

或者,你可以添加第二个特征,比如昨天的销售量。这将使算法能够实际预测前一天的销售情况。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注