Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Python 从上一日期预测:价值数据_Python_Algorithm_Statistics_Prediction - Fatal编程技术网

Python 从上一日期预测:价值数据

Python 从上一日期预测:价值数据,python,algorithm,statistics,prediction,Python,Algorithm,Statistics,Prediction,我有一些类似时期的数据集。这是人们在那一天的演讲,时间大约是一年。这些数据并不是定期收集的,而是相当随机的:每年15-30个条目,来自5个不同的年份 根据每年的数据绘制的图表大致如下所示: 用matplotlib制作的图形。 我有datetime.datetime,int格式的数据 是否有可能以合理的方式预测未来的情况?我最初的想法是计算所有先前事件的平均值,并预测它将是这样。不过,这并没有考虑到当年的任何数据(如果一直高于平均水平,猜测可能会略高) 数据集和我的统计知识是有限的,所以每一个见解

我有一些类似时期的数据集。这是人们在那一天的演讲,时间大约是一年。这些数据并不是定期收集的,而是相当随机的:每年15-30个条目,来自5个不同的年份

根据每年的数据绘制的图表大致如下所示: 用matplotlib制作的图形。 我有
datetime.datetime,int
格式的数据

是否有可能以合理的方式预测未来的情况?我最初的想法是计算所有先前事件的平均值,并预测它将是这样。不过,这并没有考虑到当年的任何数据(如果一直高于平均水平,猜测可能会略高)

数据集和我的统计知识是有限的,所以每一个见解都是有用的

我的目标是首先创建一个原型解决方案,尝试我的数据是否足以完成我正在尝试的工作,在(潜在的)验证之后,我将尝试一种更完善的方法


编辑:不幸的是,我从来没有机会尝试我收到的答案!不过我还是很好奇,如果有机会的话,这些数据是否足够,我会记住这一点。谢谢你的回答。

预测很难。您可能想尝试一下,但随着距离“已知”区域越来越远,估计错误将急剧增加

另一种可能的解决方案是尝试使用算法,但它需要收集大量数据

从数据中提取要素(例如,要素是一天中的条目数)。并对算法进行训练。(例如,给它一个远过去的数据a特征,现在作为预测字段)

我不了解python,但在java中,有一个名为的开源库,它实现了机器学习中使用的大部分功能和算法

稍后您可以估计此方法的准确度



话虽如此,这个问题通常被称为趋势检测,是目前研究的一个热点领域,因此。

在您的案例中,数据变化很快,您可以立即观察到新数据。可以使用指数平滑实现快速预测

更新公式:

m_t
是您拥有的数据,例如每次
t
的人数
v_t
是一阶导数,即
m
的趋势
alpha
beta
是两个衰减参数。顶部有
tilde
的变量表示预测值。在维基百科页面上查看算法的详细信息

由于您使用的是
python
,因此我可以向您展示一些示例代码来帮助您处理数据。顺便说一句,我使用一些合成数据如下:

data_t = range(15)
data_y = [5,6,15,20,21,22,26,42,45,60,55,58,55,50,49]
上面的
数据\u t
是从时间0开始的连续数据点序列<代码>数据_y是每次演示时观察到的人数序列

数据如下所示(我试图使其接近您的数据)

该算法的代码很简单

def holt_alg(h, y_last, y_pred, T_pred, alpha, beta):
    pred_y_new = alpha * y_last + (1-alpha) * (y_pred + T_pred * h)
    pred_T_new = beta * (pred_y_new - y_pred)/h + (1-beta)*T_pred
    return (pred_y_new, pred_T_new)

def smoothing(t, y, alpha, beta):
    # initialization using the first two observations
    pred_y = y[1]
    pred_T = (y[1] - y[0])/(t[1]-t[0])
    y_hat = [y[0], y[1]]
    # next unit time point
    t.append(t[-1]+1)
    for i in range(2, len(t)):
        h = t[i] - t[i-1]
        pred_y, pred_T = holt_alg(h, y[i-1], pred_y, pred_T, alpha, beta)
        y_hat.append(pred_y)
    return y_hat 
好,现在让我们调用预测器,并根据观察结果绘制预测结果:

import matplotlib.pyplot as plt
plt.plot(data_t, data_y, 'x-')
plt.hold(True)

pred_y = smoothing(data_t, data_y, alpha=.8, beta=.5)
plt.plot(data_t[:len(pred_y)], pred_y, 'rx-')
plt.show()
红色显示每个时间点的预测结果。我将
alpha
设置为0.8,因此最近的观察确实会对下一次预测产生很大影响。如果您想赋予历史数据更多权重,只需使用参数
alpha
beta
。还要注意的是,红线上最右边的数据点
t=15
是最后一次预测,此时我们还没有观察到

顺便说一句,这远远不是一个完美的预测。这只是一些你可以很快开始的东西。这种方法的缺点之一是,你必须能够获得观测结果,否则预测结果会越来越差(可能所有实时预测都是如此)。希望能有帮助


这个问题实际上不是关于代码,更多的是关于数学,你如何定义这种意义上的预测?这种曲线/图形的数学方法是什么?我不认为这是回答这个问题的正确地方。@Inbar我知道这并不完全符合代码部分,但这是我从的唯一角度。我相信这里的人有足够的专业知识为我提供解决方案的方向。这个问题更适合机器学习真的需要大量数据吗?我的意思是,对于线性回归之类的东西,它可能不会(我只做了一点,所以我基本上是在问)@darkphoenix:从个人经验来看,你拥有的数据越多,算法得到的结果就越好。此外,为了证明它确实有效,你可以通过统计测试来证明。这些通常需要数百或数千个分类实例。对于python,有scikets.learn,我相信您也可以使用orange。两者都依赖numpy。