`
hh.凝望
  • 浏览: 63894 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

预测算法用java实现

阅读更多
    最近事情比较多,所以很久没有来更新日志了,关于预测,有太多的说法,意义也重大。由其是关乎我们切身利益的股票走势,彩票等等,所以一个预测系统有很大的经济价值。我们完全可以此为切入点进行创业。
    常见的预测算法有1.简易平均法,包括几何平均法、算术平均法及加权平均法;2.移动平均法,包括简单移动平均法和加权移动平均法;3,指数平滑法,包括一次指数平滑法和二次指数平滑法,三次指数平滑法;4,线性回归法,包括一元线性回归和二元线性回归,下面我一一的简单介绍一下各种方法。
    一,简易平均法,是一种简便的时间序列法。是以一定观察期的数据求得平均数,并以所求平均数为基础,预测未来时期的预测值。简易平均法是最简单的定量预测方法。简易平均法的运算过程简单,不需要进行复杂的模型设计和数学运用,常在市场的近期预测、短期预测中使用。
  1、算术平均法
  算术平均法,就是以观察期数据之和除以求和时使用的数据个数(或资料期数),求得平均数进行预测的方法。

  运用算术平均法求平均数,有两种形式:

  (一)以最后一年的每月平均值或数年的每月平均值,作为次年的每月预测值

  为了确定合理的误差,用公式估计出预测的标准差。

  按公式计算某种可靠程度要求时的预测区间。

  (二)以观察期的每月平均值作为预测期对应月份的预测值

  当时间序列资料在年度内变动显著或呈季节性变化时,用第一种方法求平均值进行预测的话,势必影响预测值的精确度,同时也不能反映出年度内不同月、季的情况。

  2、几何平均法
  几何平均法,就是运用几何平均数求出预测目标的发展速度。

  几何平均数,就是将观察期n个环比速度资料数相乘,开n次方,所得的n次方根。

  根据几何平均数建立预测模型进行预测。

  3、加权平均法
  加权平均法,就是在求平均数时,根据观察期各资料重要性的不同,分别给以不同的权数后加以平均的方法。

  其特点是:所求得的平均数,已包含了长期趋势变动。


二,移动平均法
移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动,是非常有用的。移动平均法根据预测时使用的各元素的权重不同

  移动平均法是一种简单平滑预测技术,它的基本思想是:根据时间序列资料、逐项推移,依次计算包含一定项数的序时平均值,以反映长期趋势的方法。因此,当时间序列的数值由于受周期变动和随机波动的影响,起伏较大,不易显示出事件的发展趋势时,使用移动平均法可以消除这些因素的影响,显示出事件的发展方向与趋势(即趋势线),然后依趋势线分析预测序列的长期趋势。

移动平均法的种类
  移动平均法可以分为:简单移动平均和加权移动平均。

1、简单移动平均法
  简单移动平均的各元素的权重都相等。简单的移动平均的计算公式如下: Ft=(At-1+At-2+At-3+…+At-n)/n式中,

•Ft--对下一期的预测值;
•n--移动平均的时期个数;
•At-1--前期实际值;
•At-2,At-3和At-n分别表示前两期、前三期直至前n期的实际值。
2、加权移动平均法
  加权移动平均给固定跨越期限内的每个变量值以不同的权重。其原理是:历史各期产品需求的数据信息对预测未来期内的需求量的作用是不一样的。除了以n为周期的周期性变化外,远离目标期的变量值的影响力相对较低,故应给予较低的权重。 加权移动平均法的计算公式如下:

  Ft=w1At-1+w2At-2+w3At-3+…+wnAt-n式中,

•w1--第t-1期实际销售额的权重;
•w2--第t-2期实际销售额的权重;
•wn--第t-n期实际销售额的权
•n--预测的时期数;w1+ w2+…+ wn=1
  在运用加权平均法时,权重的选择是一个应该注意的问题。经验法和试算法是选择权重的最简单的方法。一般而言,最近期的数据最能预示未来的情况,因而权重应大些。例如,根据前一个月的利润和生产能力比起根据前几个月能更好的估测下个月的利润和生产能力。但是,如果数据是季节性的,则权重也应是季节性的。

移动平均法的优缺点
  使用移动平均法进行预测能平滑掉需求的突然波动对预测结果的影响。但移动平均法运用时也存在着如下问题:

  1、 加大移动平均法的期数(即加大n值)会使平滑波动效果更好,但会使预测值对数据实际变动更不敏感;

  2、 移动平均值并不能总是很好地反映出趋势。由于是平均值,预测值总是停留在过去的水平上而无法预计会导致将来更高或更低的波动;

  3、 移动平均法要由大量的过去数据的记录。
什么是指数平滑法
  指数平滑法是布朗(Robert G..Brown)所提出,布朗(Robert G..Brown)认为时间序列的态势具有稳定性或规则性,所以时间序列可被合理地顺势推延;他认为最近的过去态势,在某种程度上会持续到最近的未来,所以将较大的权数放在最近的资料。

 三,指数平均法
指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。

  也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。
    指数平滑法的基本公式是:St=ayt+(1-a)St-1 式中,

•St--时间t的平滑值;
•yt--时间t的实际值;
•St − 1--时间t-1的平滑值;
•a--平滑常数,其取值范围为[0,1];
  由该公式可知:

  1.St是yt和 St − 1的加权算数平均数,随着a取值的大小变化,决定yt和 St − 1对St的影响程度,当a取1时,St = yt;当a取0时,St = St − 1。

  2.St具有逐期追溯性质,可探源至St − t + 1为止,包括全部数据。其过程中,平滑常数以指数形式递减,故称之为指数平滑法。指数平滑常数取值至关重要。平滑常数决定了平滑水平以及对预测值与实际结果之间差异的响应速度。平滑常数a越接近于1,远期实际值对本期平滑值影响程度的下降越迅速;平滑常数a越接近于 0,远期实际值对本期平滑值影响程度的下降越缓慢。由此,当时间数列相对平稳时,可取较大的a;当时间数列波动较大时,应取较小的a,以不忽略远期实际值的影响。生产预测中,平滑常数的值取决于产品本身和管理者对良好响应率内涵的理解。

  3.尽管St包含有全期数据的影响,但实际计算时,仅需要两个数值,即yt和 St − 1,再加上一个常数a,这就使指数滑动平均具逐期递推性质,从而给预测带来了极大的方便。

  4.根据公式S1=ay1+(1-a)S0,当欲用指数平滑法时才开始收集数据,则不存在y0。无从产生S0,自然无法据指数平滑公式求出S1,指数平滑法定义S1为初始值。初始值的确定也是指数平滑过程的一个重要条件。

  如果能够找到y1以前的历史资料,那么,初始值S1的确定是不成问题的。数据较少时可用全期平均、移动平均法;数据较多时,可用最小二乘法。但不能使用指数平滑法本身确定初始值,因为数据必会枯竭。

  如果仅有从y1开始的数据,那么确定初始值的方法有:

  1)取S1等于y1;

  2)待积累若干数据后,取S1等于前面若干数据的简单算术平均数,如:S1=(y1+ y2+y3)/3等等。

指数平滑的预测公式
  据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑法和三次指数平滑法等。
(一) 一次指数平滑预测
  当时间数列无明显的趋势变化,可用一次指数平滑预测。其预测公式为:

  yt+1'=ayt+(1-a)yt' 式中,

•yt+1'--t+1期的预测值,即本期(t期)的平滑值St ;
•yt--t期的实际值;
•yt'--t期的预测值,即上期的平滑值St-1 。
  该公式又可以写作:yt+1'=yt'+a(yt- yt')。可见,下期预测值又是本期预测值与以a为折扣的本期实际值与预测值误差之和。

(二) 二次指数平滑预测
  二次指数平滑是对一次指数平滑的再平滑。它适用于具线性趋势的时间数列。其预测公式为:

  yt+m=(2+am/(1-a))yt'-(1+am/(1-a))yt=(2yt'-yt)+m(yt'-yt) a/(1-a)

  式中,yt= ayt-1'+(1-a)yt-1

  显然,二次指数平滑是一直线方程,其截距为:(2yt'-yt),斜率为:(yt'-yt) a/(1-a),自变量为预测天数。

(三) 三次指数平滑预测
  三次指数平滑预测是二次平滑基础上的再平滑。其预测公式是:

  yt+m=(3yt'-3yt+yt)+[(6-5a)yt'-(10-8a)yt+(4-3a)yt]*am/2(1-a)2+ (yt'-2yt+yt')*a2m2/2(1-a)2

  式中,yt=ayt-1+(1-a)yt-1

  它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权,新数据给较大的权,旧数据给较小的权。

[编辑]指数平滑法的趋势调整
  一段时间内收集到的数据所呈现的上升或下降趋势将导致指数预测滞后于实际需求。通过趋势调整,添加趋势修正值,可以在一定程度上改进指数平滑预测结果。调整后的指数平滑法的公式为:

  包含趋势预测(YITt)=新预测(Yt)+趋势校正(Tt)

  进行趋势调整的指数平滑预测有三个步骤:

  1、 利用前面介绍的方法计算第t期的简单指数平滑预测(Yt);

  2、 计算趋势。其公式为: Tt=(1-b)Tt-1+b(Yt-Yt-1)其中,

•Tt=第t期经过平滑的趋势;
•Tt-1=第t期上期经过平滑的趋势;
•b=选择的趋势平滑系数;
•Yt=对第t期简单指数平滑预测;
•Yt-1=对第t期上期简单指数平滑预测。
  3、计算趋势调整后的指数平滑预测值(YITt)。计算公式为:YITt=Yt+Tt。
四,线性回归法
1. 一元线性回归预测模型
 一元线性回归预测法是分析一个因变量与一个自变量之间的线性关系的预测方法。 常用统计指标:平均数、增减量、平均增减量。

  确定直线的方法是最小二乘法 最小二乘法的基本思想:最有代表性的直线应该是直线到各点的距离最近。然后用这条直线进行预测。

1、选取一元线性回归模型的变量 ;   
2、绘制计算表和拟合散点图 ;   
3、计算变量间的回归系数及其相关的显著性 ;   
4、回归分析结果的应用 。

、经济意义检验:就是根据模型中各个参数的经济含义,分析各参数的值是否与分析对象的经济含义相符。   
2、回归标准差检验   
3、拟合优度检验  
4、回归系数的显著性检验
利用回归预测模型进行预测
  可以分为:点预测和置信区间预测法   
1、点预测法:将自变量取值带入回归预测模型求出因变量的预测值。  
 2、置信区间预测法:估计一个范围,并确定该范围出现的概率。置信区间的大小的影响的因素:a、因变量估计值;b、回归标准差;C、概率度t。
模型分析
  一元线性回归分析预测法,是根据自变量x和因变量Y的相关关系,建立x与Y的线性回归方程进行预测的方法。由于市场现象一般是受多种因素的影响,而并不是仅仅受一个因素的影响。所以应用一元线性回归分析预测法,必须对影响市场现象的多种因素做全面分析。只有当诸多的影响因素中,确实存在一个对因变量影响作用明显高于其他因素的变量,才能将它作为自变量,应用一元相关回归分析市场预测法进行预测。一元线性回归分析法的预测模型为:yt=b+axt 式中,xt代表t期自变量的值;yt代表t期因变量的值; a、b代表一元线性回归方程的参数。 a、b参数由下列公式求得(用代表):  为简便计算,我们作以下定义:   (2)   式中:   这样定义a、b后,参数由下列公式求得:   将a、b代入一元线性回归方程Yt = a + bxt,就可以建立预测模型,那么,只要给定xt值,即可求出预测值。   在回归分析预测法中,需要对X、Y之间相关程度作出判断,这就要计算相关系数Y,其公式如下:   相关系数r的特征有:   ①相关系数取值范围为:-1≤r≤1 。   ②r与b符合相同。当r>0,称正线性相关,Xi上升,Yi呈线性增加。当r<0,称负线性相关,Xi上升,Yi呈线性减少。   ③|r|=0,X与Y无线性相关关系;|r|=1,完全确定的线性相关关系;0<|r|<1,X与Y存在一定的线性相关关系;|r|&gt;0.7,为高度线性相关;0.3<|r|≤0.7,为中度线性相关;|r|≤0.3,为低度线性相关.
     以上的内容介绍了各种预测方法的基本概念及相关公式。接一下才是重点所在,就是这些算法如何用编程语言实现,这儿我只介绍用java实现的方法,由于已经有很多内容了,所以具体实现方法我会写在另一篇文章中( http://csuagui-hotmail-com.iteye.com/blog/760810),敬请期待......


分享到:
评论
2 楼 罗春桉 2010-10-07  
真的貌似专业的数学家!
1 楼 欧阳晓 2010-09-20  
这不是数学家吗

相关推荐

    BP.rar_BP_bp 神经网络 java 算法_bp 预测_java BP预测算法_预测算法java

    总的来说,这个BP神经网络Java实现为理解和实践预测算法提供了一个基础平台,对于学习和研究神经网络算法的开发者来说,是一个有价值的资源。通过深入研究源代码,我们可以更深入地理解BP算法的工作原理,以及如何在...

    几个推荐算法的java实现

    - Slope One是一种简单的协同过滤预测算法,它通过计算用户对物品的平均评分差来预测未知评分。具体来说,对于两个物品i和j,slope one会计算已知评分的平均差异,并用这个差异来预测用户对物品j的评分。 - 在Java...

    数据趋势预测ARIMA算法实现

    总结来说,ARIMA模型是一种强大的工具,能够处理各种类型的时间序列数据,而Java实现则提供了在实际业务场景中应用此模型的可能性。理解并掌握ARIMA模型的原理和实现细节,对于进行数据趋势预测分析具有重要意义。

    时间序列算法java实现

    本篇文章将深入探讨时间序列预测的基本原理,Java实现的关键步骤,以及如何通过实际的代码示例进行实践。 时间序列数据是按特定时间顺序收集的数值序列,例如股票价格、销售数据或天气温度。这些数据具有内在的时间...

    一次,二次,三次指数平滑预测算法java

    java代码实现指数平滑算法,其中包括一次,二次,三次

    预测系统的设计与实现(附预测算法源码)

    这篇博客“预测系统的设计与实现(附预测算法源码)”提供了一种深入理解如何构建预测模型和实现系统的途径,并且附带了实际的源代码,这对于学习者和开发者来说是一份宝贵的资源。 预测系统的核心是预测算法,它们...

    Java 实现 时序预测 ARIMA模型 DEMO

    这个Java实现的DEMO将帮助我们理解如何在编程环境中构建和应用ARIMA模型进行时间序列预测。以下是关于ARIMA模型和Java实现的相关知识点: 1. **ARIMA模型介绍**: - **自回归项(AR)**:ARIMA模型基于历史观测值...

    arima 算法 JAVA 实现.zip

    总之,ARIMA模型是时间序列预测的重要工具,通过Java实现可以将这种统计方法集成到数据分析系统中。理解模型背后的理论,结合适当的库和编程技巧,可以在各种领域,如金融、气象预报、销售预测等,应用ARIMA模型进行...

    Java实现随机森林算法

    在Java中实现随机森林算法通常需要使用机器学习库,比如Weka或者Apache Spark的MLlib。下面我将展示一个使用Weka库的简单示例,来说明如何使用随机森林算法对数据进行分类。 首先,你需要在项目中引入Weka库。如果...

    决策树ID3算法(Java实现)

    总的来说,ID3算法是理解和实现机器学习基础的重要步骤,它的Java实现可以帮助开发者更深入地掌握数据分类和决策树的构建原理。通过分析和调试这个代码,可以提高对决策树算法的理解,为进一步探索更复杂的算法如C...

    ARIMA模型销售预测JAVA版

    5. **JAVA实现**:在JAVA环境下实现ARIMA模型,开发者通常会使用统计计算库如JFreeChart、Apache Commons Math或者专用的预测库如Openforecast。这些库提供了方便的API接口,用于构建和训练ARIMA模型,并进行预测。 ...

    Java实现kNN算法

    总之,Java实现kNN算法涉及数据预处理、距离计算、最近邻搜索和预测等多个环节。在设计和优化算法时,需要考虑到性能、准确性和适用场景,确保算法在实际应用中的有效性。同时,理解kNN算法背后的理论基础,可以帮助...

    java实现logistic回归算法

    综上所述,Java实现Logistic回归涉及了数据处理、模型构建、优化算法等多个方面,需要对机器学习基础理论和Java编程有一定了解。在实际项目中,我们通常会结合现有的库来简化开发过程,并注重模型的评估和调优。

    SVM 算法 java 实现

    支持向量机(Support Vector Machine,简称SVM)是一种广泛应用于分类和回归分析的机器学习算法。...总的来说,Encog为Java开发者提供了一个强大且易用的SVM实现工具,使得在Java环境中应用SVM算法变得简单而高效。

    java mrp算法实现

    在这个Java实现中,MRP系统可能包括以下几个关键部分: 1. **物料数据库**:系统会维护一个包含所有物料信息的数据库,如物料编码、描述、库存量、安全库存、预测需求等。在本案例中,数据存储在MySQL数据库中,...

    JAVA实现FIFO、LRU、OPT页面置换算法,有界面

    4. JAVA实现带界面的页面置换算法: 在这个项目中,开发者使用Java编程语言实现了上述三种页面置换算法,并提供了一个图形用户界面(GUI)。用户可以设定页面数量,生成随机页面序列,并在指定的物理块中观察页面...

    java实现朴素贝叶斯算法

    总结来说,Java实现朴素贝叶斯算法涉及到数据预处理、概率计算、模型建立、预测以及模型评估等多个环节。通过理解算法原理并结合Java编程技巧,我们可以创建一个高效、可扩展的分类系统。在实际应用中,还需要考虑...

    SMO算法实现 java代码

    描述中提到的博客文章提供了SMO算法的Java实现,这对于学习和理解算法的内部工作原理非常有帮助。通常,一个完整的Java SMO实现会包含以下几个关键步骤: 1. 初始化:设置参数,如惩罚参数C,选择初始的拉格朗日...

    kriging插值算法java实现-Java代码类资源

    总的来说,kriging插值算法在Java中的实现提供了一种强大工具,用于处理空间数据的预测和分析,尤其在环境科学、地质学、气象学等领域有着广泛的应用。通过理解和掌握kriging方法,开发者可以更好地处理和理解复杂的...

    KrigingCore_java_克里金插值算法实现_克里金算法_

    在给定的Java项目“KrigingCore_java_克里金插值算法实现”中,开发者提供了一个开源的实现,让我们深入探讨一下克里金插值的基本原理和这个Java实现的关键部分。 **1. 克里金插值原理** 克里金插值由南非矿业...

Global site tag (gtag.js) - Google Analytics