KNN算法在股票预测中的应用*
王波1程福云2
(1湖北科技学院数学与统计学院湖北咸宁4371002通山县横石镇中学湖北通山437100)
摘要:利用数据的相关性,运用改进的KNN算法,通过对股票历史数据的分析并建立相应的预测模型,进行试验预测,预测结果表明该方法对预测股票价格走势是有效的。
教育期刊网 http://www.jyqkw.com
关键词 :KNN算法;股票预测;预测模型;时间序列
中图分类号:TP311.13文献标识码:Adoi:10.3969/j.issn.1665-2272.2015.16.011
股票市场依赖于国家的宏观经济政策走向以及相关行业的运营状况而随时发生变化,股票价格也是涨跌无常。掌握股票价格的变化规律并预测其后期走势,不仅是广大股民梦寐以求的事情,同时也对国家宏观调控经济金融市场有着指引作用。本文基于简单而行之有效的KNN算法进行股票价格走势预测,并给出实例分析。
1KNN算法及建立相应的预测模型
1.1KNN算法
KNN算法是一种现在已经被广泛用于多个领域的相对简单的机器学习算法,其思路是:根据距离函数计算待预测数据x和每个已知历史数据的距离,选择与待预测数据距离最小的K个数据作为x的K个最近邻,最后根据x的k个最近邻判断x的类别。
1.2构建预测模型
要对股票价格走势进行预测,首先要对历史数据进行处理后转化成向量的形式,才能满足对股票价格走势进行预测的需要。将x当成一个序列,通常用{m1(x),m2(x),…,mn(x)}表示,其中mi(x)表示序列x的第i个分量。
历史数据经过处理转化成向量形式后,有如下形式:{m1(x),m2(x),…,mn(x);y},其中,前m项表示这个历史数据的m个不同的特征,最后一项y表示该经验数据的分类或目标值。股票收盘价的表现形式为历史明细表,则每天股票的收盘价格可以看成是一个数据序列,根据时间序列对相关对象的预测方法,假定其中任意一个股票交易日的收盘价格总是与该交易日前的几个交易日的收盘价格具有相关性。则收盘价的历史值可以表示成{m1(t),m2(t),…,mn(t);y},其中,前m项分别是某个交易日的前m个交易日的收盘价的值,最后一项y表示该交易日的收盘价的值。这样,如果获得n个交易日的收盘价信息,则可以组成n-m个这样的向量,也就获得了n-m个经验数据。再对这n-m个数据利用KNN算法找出与要预测交易日数据的最邻近的k个数据,最后对这k个数据根据它们的邻近程度赋予相应的权值(即越邻近赋予的权值越大)便可得到预测值。这样对于要预测的交易日,只要能知道该交易日的前m个交易日的收盘价的值,就可以通过这种模型得出预测交易日的收盘价信息。
1.3具体计算方法
将已知的n个交易日的收盘价数据组成一个时间序列{x1,x2,…,xn-1,xn}(其中xi表示第i个交易日的收盘价),用这组历史数据去预测第n+1个交易日的收盘价xn+1。
由于任何一个交易日的收盘价总是和前几个交易日的收盘价关系最密切,所以,用长度为m的
其中,aij表示向量ai的第j个分量。那么,余弦值越大,其夹角就越小,两向量就越接近。通过计算,我们在a1,a2,a3,…an-m中找出了向量a0={xn-m+1,xn-m+2,…,xn-1,xn}的k个最近邻,记为β1,β2,…,βk-1,βk。因为是用{xn-m+1,xn-m+2,…,xn-1,xn}来预测xn+1,所以这k个向量最后一个分量的后一个元素被认为是xn+1的一个最近邻,比如,假设β1={x1,x2,…,xm-1,xm}是a0的一个最近邻,则取xm+1作为xn+1的一个最近邻(令m1=xm+1),这样便得到了xn+1的K个最近邻m1,m2,…,mk-1,mk,然后对这k个数加权平均就可以算出xn+1的预测值,即:
2改进的KNN算法
在应用KNN算法的过程中,样本的距离是根据样本所有特征计算的。而这些特征与分类的强弱性相关,这样就有可能使得邻近间的相似度会被大量的不相关特征过多使用,导致分类产生误导,而KNN算法对这种情况非常敏感,如果不能有效解决这个问题,则分类不能完全实现,从而导致预测产生较大误差。
同样,对于股票价格的实例{x1(t),x2(t),…,xn(t);y},由于其中的前m项分别是预测交易日的前m个交易日的收盘价的值,所以它们的重要程度会有所不同。一个很直观的想法就是,离预测交易日越近的日收盘价信息,对预测交易日的收盘价信息的影响就越大。这样就自然会想到离预测交易日越近的收盘价应该赋予的权重就越大。
综合以上两种权重的赋值方法,对前面预测模型的最后一步加权方法作以下改进:对xn+1的K个最近邻b1,b2,…,bk-1,bk先按照所求余弦值的大小从小到大进行排序,分别记为m1,m2,…,mk-1,mk;再按照时间的远近程度从远到近进行排序,分别记为n1,n2,…,nk-1,nk;最后对它们各自的两个名次进行求和,再按照求和的值的大小从小到大进行综合排序(对求和值相等的数据可以以距离的大小为优,即距离小的,综合排名高,也可以以时间的远近为优),这样便得到一个新的序列x1,x2,…,xk-1,xk。对于这样一种新序列的每个一xi,给出一个加权
3实例分析
本文采用的股票数据为我国上证A股华东科技(000727)从2010年7月9日至2011年1月21日共125个交易日的日收盘价。
根据前面所阐述的模型及步骤,建立起基于KNN算法的股票预测模型。其中,前115个数据用于建立相应的预测模型,最后10个数据用于检测试验得出的预测值的结果。其中m=5,w1=0.004,d=0.003,k=25。这样得出改进的KNN算法的预测值和一般的KNN算法的预测值分别在表1中。
从表1的结果中可以很明显看出改进的KNN算法的平均相对误差(%)为-3.5249157优于使用一般的KNN算法的平均相对误差(%)-7.9967950。
4结论
本文根据时间序列模型构建了一种基于KNN算法的股票预测模型,这种预测模型通过前n个交易日的收盘价来预测第n+1个交易日的收盘价,其效果达到了目前常用的时间序列和神经网络等模型,但本论文所建的这种模型更为简单,而且这种模型还可以根据实际情况来进行权值的调整,这样使得这种模型具有交互性,提高了准确性与可靠性,对现实生活具有很大的应用和参考价值。
教育期刊网 http://www.jyqkw.com
参考文献
1周大镯,吴晓丽,闫红灿.一种高效的多变量时间序列相似查询算法[J].计算机应用,28(10)
2周广旭.一种新的时间序列分析算法及其在股票预测中的应用[J].计算机应用,2005(9)
3朱国华,程传鹏.一种改进的KNN分类方法[J].河南工程学院报,2008(3)
4苏映雪,付耀文.基于KNN算法的组合式非搜索特征选择算法[J].计算机工程,2007(18)
5张鹏,李学仁,张建业,等.时间序列的夹角距离及相似性搜索[J].模式识别及人工智能,2008(6)
(责任编辑何丽)