预测模型的建立
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/study/science/create_forecast_model.html
最近工作中遇到不少涉及数据“预测”的需求,这个“预测”并不一定是预估未来某个指标的发展趋势,也可能是基于某些已知的数据去建立计算模型,计算某些量变化后的结果。
其实这些事情都涉及一个工作,就是预测模型的建立。
对于数据趋势预测和数据模型预测的建模方式当然不一样,因为它们的目标和基础并不一样。
对于数据趋势预测,信息论有一个基础理论,新数据的参考价值大于旧的数据,所以对待趋势趋势,考虑过多的陈旧数据反而会导致预测的精度大大下降,正确的做法应该是仅考虑最近的数据,或者大大弱化旧数据的影响权值。
如果只有最新的一部分数据,如何去拟合?一般情况下数据趋势都是一个冲击扰动系统,很少的几个数据根本无法靠多项式去拟合,但是引入遗传算法迭代复杂表达式其实效果并不怎么样,但是算法复杂度就高了。
很简单的办法就是叠加数据,让参与计算的数据成为单调的,最简单的叠加算子就是,Y[X[1]]=Y[X[1]], Y[X[2]]=Y[X[1]]+Y[X[2]],以此类推,Y[X[i]]=Y[X[1]]+…+Y[X[i]]。
获得新的Y序列再放入坐标系,然后进行拟合,这样多项式足以获得非常好的拟合度,因为处理后的曲线一定是单调的,同时没有任何数据丢失。
拟合到曲线后,计算下一个点只要用下一个点的X代入,就可以算出Y,然后Y减去前面所有的Y之和,就可以得到自己真实的值,这样的预测结果将会有很好的精确度。
再说说数据模型预测,这已经不是一个信息论问题,而是一个统计问题,对离散的统计数据建模,以计算未被统计到的数据。这种情况下,每个统计值都具有等同的价值。这时候就需要考虑全部已知数据来修正模型,面对这种场景最好的办法就是遗传算法,迭代表达式来获得更好的拟合度。关于遗传算法,我又一篇博文《遗传算法聚类程序》,给出了一个遗传算法的例子。对于拟合的遗传算法模型,就是首先预置一些基础表达式,都假设为拟合结果,算一下拟合相似度,选出最匹配的表达式做一个“杂交”,就是将其中的变量替换成另一个表达式,这样再算,选出最优的几个,继续交换,最终就会慢慢逼近结果,达到满意的拟合度后,就可以停止。如果能预置一些曲线库,那就更好了。
具体怎么做呢?首先需要采集到一个矩阵,
A[1,1] A[1,2] … A[1,n] T[1]
A[2,1] A[2,2] … A[2,n] T[2]
…
A[m,1] A[m,2] … A[m,n] T[m]
A[i,j]是第i个数据中第j个变量的值,T[i]是这组数据的目标结果。
然后我们就可以建模F(A[1],A[2], … , A[n])=T,将所有的数据代入就可以得到一个多维映射,然后的工作就是解出这个映射的表达式。这个过程有一些现成的软件,例如Matlab之类的。
希望可以和我们现实中的情况结合起来,解决问题才是最重要的。
[回复]