栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

贝叶斯分类对股票走势预测

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

贝叶斯分类对股票走势预测

    上一文介绍了K均值对股票K线分类,该文对它做一个应用,通过贝叶斯分类器进行股票走势的预测。    好多炒股的大牛都说看K线判断次日的涨跌,按照这个思路,我们将前六根k线做为输入,涨幅超过2个点为1作为输出训练贝叶斯分类器,然后输入当日的前六根K线作为输入,来预测明日的股票走势。    首先介绍一下贝叶斯分类器。    贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。(摘自百度百科)说白了就是贝叶斯公式:    P( C = ci | X = x) = P( X = x | C = ci) * P( C = ci) / P( X = x)    其中X = ( X1 , X2 , ... , Xn)表示输入的特征,也就是我们的6根K线,C为类集合( c1 , c2 , ... , cm),当输入为x,输出为ci类的概率最大即为输出的类别,即:    P( C = ci | X = x) = Max{ P( C = c1 | X = x) , P( C = c2 | X = x ) , ... , P( C = cm | X = x ) }    这里我们假定输入的K线相互独立,那么    P( X = x | C = ci)  = P( x= x1 | C = ci)*P( x= x2 C = ci)... P( x= xn | C = ci)    又因为对于确定的输入X,P(X=x)为常数,所以判别函数可以修改为:        F(P( C = ci | X = x)) = G(Max{  P( X = x | C = c1) * P( C = c1),  P( X = x | C = c2 * P( C = c2), ... ,  P( X = x | C = cm) * P( C = cm)});        其中,G为判别函数。按照上面的思路,我们编码,这里直接贴代码吧,看不懂 都可以留言:
function Bayes(){}Bayes.prototype.train = function(trainMatrix,trainCategory){var cateMaps = new Map();for(var i = 0;i < trainCategory.length;i++){    if(!cateMaps.containsKey(trainCategory[i])){        cateMaps.put(trainCategory[i],0);    }    cateMaps.put(trainCategory[i],cateMaps.get(trainCategory[i]) + 1);}cateMaps.each(function(key,value){    cateMaps.put(key,cateMaps.get(key)/trainCategory.length);});var labelsTree = new Map();var labelsCount = new Map();for(var i = 0;i 

上述是基于javascript贝叶斯分类器。
接下来根据上一文的K均值聚类归类好的K线构建构建训练数据集,实现方法:

function inputMean(series,close){        var data = [],labels = [],x = [];        var kcount = 6;//k线数量        var cast = 1;        for(var i = 0;i < series.length - kcount - cast + 1;i++){            var tmp = [];            for(var j = 0;j < kcount;j++){                tmp.push(series[i + j]);            }            labels[i] = ((close[i + kcount + cast] - close[i + kcount])/close[i + kcount]*100 > 2)?'1':'0';            data.push(tmp);        }        for(var i = 0;i < series.length - kcount+1;i++){            var tmp = [];            for(var j = 0;j < kcount;j++){                tmp.push(series[i + j]);            }            x.push(tmp);        }        return[data,labels,x];    }

上面代码将计算6根K线作为输入,次日涨幅超过2%为1类,否则为0类,输出训练集data与结果集label,接下来我们将输入集与结果集输入贝叶斯分类器训练。

        dt = inputMean(result.cluster,close);        var bayes = new Bayes();        bayes.train(dt[0],dt[1]);

将训练后的分类器对数据进行分类:

        var test = [];        var tx = [];        for(var i = 0;i < dt[2].length;i++){            test.push(((bayes.predict(dt[2][i]).get(1) > bayes.predict(dt[2][i]).get(0))?1:0));            //test.push(bayes.predict(dt[2][i]).get(1))            tx.push(date[i + 6]);        }


对历史数据的预测准确率基本可以达到80%以上(这里包括训练集,所以不太准确)。
综上,贝叶斯分类与K均值聚类可以作为股票买卖的参考,当然不值得迷信(哈哈)。因为自己一直在研究,源码有点乱,等整理好了再上传git吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/245953.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号