小白量化彩票实战(7)用sklearn神经网络预测彩票号码和特征

106 篇文章 119 订阅
104 篇文章 107 订阅

小白量化彩票实战(7)用sklearn神经网络预测彩票号码和特征
我写彩票的博客,不是鼓励大家去买彩票,读者要以学习编程娱乐的思想来看待。兴趣是学习最大的动力!

神经网络是目前比较热门的技术,人工神经网络(Artificial Neural Networks,ANN)系统是 20 世纪 40 年代后出现的。它是由众多的神经元可调的连接权值连接而成,具有大规模并行处理、分布式信息存储、良好的自组织自学习能力等特点。我们尝试依赖小白量化提供的金融模块以及sklearn库来搭建几个神经网络程序,来预测一下号码。
神经网络模型分类很多,我们这里采用的比较简单的神经网络模型,对于程序预测结果,大家纯粹当作神经网络模型学习实践和娱乐。神经网络模型分类很多,例如浅层神经网络,深度学习神经网络,卷积神经网络等。
神经网络模型对于初学者来说,没必要完全搞懂原理,只要求清楚怎么用就可以了,等你有兴趣,能力提高了,再去深入学习和优化改进。这就像程序中使用sin(x)函数,不需要理解这个函数的计算原理一样的。
简单来说,神经网络程序运行过程:
1、大量数据采集,需要学习样本。
2、特征提取。例如彩票蓝号单双,股票涨跌等。
3、数据变换。股票上的指标计算,或者有些深度学习模型本身需要数据变换,如数据归一化处理, 即把数据变为(0,1)之间的小数等等。
4、学习数据train和测试数据test划分。
5、选择神经网络模型用学习数据train进行学习。
6、用测试数据test进行验证,看看是否准确。如有必要可修改模型或调参处理。
7、用当前数据,预测未来结果。

我们用用sklearn神经网络的几个模型来研究一下能否预测彩票号码。我们仍以双色球彩票为例。
首先我们打算直接预测双色球彩票蓝号的下一期出号,如果随机选号概率1/16=0.0625。
按照上面神经网络程序运行过程顺序来做程序,程序预测号码的成功率是多少。
1、准备数据。

import math
import datetime as dt
import pandas as pd  
import numpy  as np
import matplotlib.pyplot as plt
import HP_plt as hplt   #小白量化指标绘图模块
from HP_formula import *  #小白量化仿通达信公式函数库
import HP_cp as hcp   #小白量化彩票模块
import HP_global as g  #小白量化全局变量库
import HP_plt as hplt   #小白量化指标绘图模块

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#白底色
g.ubg='w'
g.ufg='b'
g.utg='b'
g.uvg='#1E90FF'

code="双色球彩票"  #品种

#获取本地ssq.csv双色球数据
df=pd.read_csv('ssq.csv'  , encoding='gbk')
df=df.drop(df.columns[0], axis=1)

2、特征提取。

# 彩票特征

# 和数
df['sumh']=df['h1']+df['h2']+df['h3']+df['h4']+df['h5']+df['h6']  
# 和数的5期平均线
df['ma5']=MA(df['sumh'],5)
# 和数的20期平均线
df['ma20']=MA(df['sumh'],20)

# 全和数
df['suma']=df['h1']+df['h2']+df['h3']+df['h4']+df['h5']+df['h6'] +df['lh']

#跨度 
df['kd']=df['h6']-df['h1']

#计算奖号AC值
df['ac']=[hcp.ac(hcp.str2num(x)) for x in df.hh.astype(str)]
df['maac']=MA(df['ac'],5)  #AC值的平均线

#2段编码器
bm2=hcp.bmq2()

#计算奖号红号奇偶比,单双比
df['dsb']=[hcp.qab(hcp.str2num(x)) for x in df.hh.astype(str)]
df['dsb2']=[bm2[x] for x in df.dsb.astype(str)]   #文本转为数字

#计算奖号红号质合比
df['zhb']=[hcp.zhb(hcp.str2num(x)) for x in df.hh.astype(str)]
df['zhb2']=[bm2[x] for x in df.zhb.astype(str)]   #文本转为数字

#计算奖号红号大小比
df['dxb']=[hcp.dxb(hcp.str2num(x)) for x in df.hh.astype(str)]
df['dxb2']=[bm2[x] for x in df.dxb.astype(str)]   #文本转为数字

#计算蓝号单双号,奇偶号
df['lhds']=[x%2 for x in df.lh.astype(int)]   #文本转为数字

#计算蓝号质数
df['lhzs']=[hcp.zhishu(x) for x in df.lh.astype(int)]   #文本转为数字

#计算蓝号平均
df['lhma5']=MA(df.lh,5)
df['lhma10']=MA(df.lh,10)

def dx(x):
    y=0
    if x>8:
        y=1
    return y

#计算蓝号大号
df['lhdx']=[dx(x) for x in df.lh.astype(int)]   #文本转为数字

3、数据变换。

#小白量化数据格式化
df['open']=df['h1']
df['low']=df['h1']
df['high']=df['h6']
df['close']=df['h6']
mydf=df.copy()
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']

#RSI指标
def RSI(N1=5):
    LC = REF(CLOSE, 1)
    RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100.00
    return RSI1

#计算RSI指标值
mydf['rsi']=RSI(6)
mydf['rsi2']=RSI(12)

def DMI(M1=14, M2=6):
    """
    DMI 趋向指标
    """
    TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1)
    HD = HIGH - REF(HIGH, 1)
    LD = REF(LOW, 1) - LOW
    DMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1)
    DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1)
    DI1 = DMP * 100 / TR
    DI2 = DMM * 100 / TR
    ADX = MA(ABS(DI2 - DI1) / (DI1 + DI2) * 100, M2)
    ADXR = (ADX + REF(ADX, M2)) / 2
    return DI1, DI2, ADX, ADXR
mydf['di1'],mydf['di2'],mydf['adx'],mydf['adxr']=DMI()  #DMI指标

#设置学习和预测标签
mydf['label']=mydf['lh']  ##预测蓝号
#mydf['label']=mydf['lhds']  ##预测蓝号单双
#mydf['label']=mydf['lhzs']  ##预测蓝号质合
#mydf['label']=mydf['lhdx']  ##预测蓝大小

4、学习数据train和测试数据test划分。

## 数据集划分为训练数据和测试数据
x_train,x_test,y_train,y_test=hcp.sk_init(mydf)

test_size=len(x_test)/(len(x_train)+len(x_test))
print('神经网络数据已准备好了!')
print('test_size=%.4f,训练%d条,测试%d条。'%(test_size,len(x_train),len(x_test)))

5、选择神经网络模型用学习数据train进行学习。我们分别选择KNN分类器算法,随机森林分类法决策树分类法进程测试。

#################################################
##      () KNN分类算法
from sklearn import neighbors, datasets
print('KNN分类算法')
clf = neighbors.KNeighborsClassifier(10, weights= 'distance')
#################################################
#训练的代码
print('神经网络开始数据学习!')
clf.fit(x_train, y_train)

6、用测试数据test进行验证,看看是否准确。如有必要可修改模型或调参处理。

#训练的代码
print('神经网络开始数据学习!')
clf.fit(x_train, y_train)    #神经网络学习


result =clf.predict(x_test)  #进行预测
print('测试数据的结果:',result[-10:-1])
print('真实数据的结果:',y_test[-10:-1])

score = clf.score(x_test, y_test)  #计算成功率
print('测试数据评估score :',score)

程序运行结果:

神经网络数据已准备好了!
test_size=0.1002,训练2397条,测试267条。
KNN分类算法
神经网络开始数据学习!
测试数据的结果: [ 5  6  6 11 13 15 14 12 11]
真实数据的结果: [1, 6, 6, 7, 10, 2, 6, 8, 2]
测试数据评估score : 0.08239700374531835

从这个程序的预测结果看,KNN分类器程序预测0.0823高于随机概率0.0625。

我们在选择决策树算法,看看预测结果。修改[5、选择神经网络模型]

#################################################
#      () 决策树算法
from sklearn import tree
##决策树
print('决策树')
clf = tree.DecisionTreeClassifier()

程序运行结果:

神经网络数据已准备好了!
test_size=0.1002,训练2397条,测试267条。
决策树
神经网络开始数据学习!
测试数据的结果: [ 7 12 12  9 12  2  8 10 14]
真实数据的结果: [1, 6, 6, 7, 10, 2, 6, 8, 2]
测试数据评估score : 0.07865168539325842

从这个程序的预测结果看,决策树分类器程序预测0.0786(每次值不同)高于随机概率0.0625。

我们在选择随机森林分类器,看看预测结果。修改[5、选择神经网络模型]

#################################################
#      () 随机森林分类器算法
from sklearn.ensemble import RandomForestClassifier   #导入随机森林分类器
print('随机森林分类器')
#clf = RandomForestClassifier()
clf = RandomForestClassifier(n_estimators=10)

程序运行结果:

神经网络数据已准备好了!
test_size=0.1002,训练2397条,测试267条。
随机森林分类器
神经网络开始数据学习!
测试数据的结果: [ 2  3  5 10  9  2  3 10  4]
真实数据的结果: [1, 6, 6, 7, 10, 2, 6, 8, 2]
测试数据评估score : 0.08614232209737828

从这个程序的预测结果看,随机森林分类器程序预测0.0861(每次值不同)高于随机概率0.0625。
从上面深度学习程序比较结果来看,也许是学习样本太少缘故,或不可预测,直接预测号码不现实。我们改成预测单双,这个随机概率为50%,机器预测会是多少。我们修改学习标签mydf[‘label’]值就可以了。

#设置学习和预测标签
#mydf['label']=mydf['lh']  ##预测蓝号
mydf['label']=mydf['lhds']  ##预测蓝号单双
#mydf['label']=mydf['lhzs']  ##预测蓝号质合
#mydf['label']=mydf['lhdx']  ##预测蓝大小

我们下面给出全部预测代码。

#购买<零基础搭建量化投资系统>正版书,送小白量化软件源代码。
# https://item.jd.com/61567375505.html
#独狼荷蒲qq:2775205
#小白量化彩票软件开发群:712300766
#小白量化PythonTkinter软件开发群:524949939
#电话微信:18578755056
#微信公众号:独狼股票分析
import math
import datetime as dt
import pandas as pd  
import numpy  as np
import matplotlib.pyplot as plt
import HP_plt as hplt   #小白量化指标绘图模块
from HP_formula import *  #小白量化仿通达信公式函数库
import HP_cp as hcp   #小白量化彩票模块
import HP_global as g  #小白量化全局变量库
import HP_plt as hplt   #小白量化指标绘图模块

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#白底色
g.ubg='w'
g.ufg='b'
g.utg='b'
g.uvg='#1E90FF'

code="双色球彩票"  #品种

#获取本地ssq.csv双色球数据
df=pd.read_csv('ssq.csv'  , encoding='gbk')
df=df.drop(df.columns[0], axis=1)

# 彩票特征

# 和数
df['sumh']=df['h1']+df['h2']+df['h3']+df['h4']+df['h5']+df['h6']  
# 和数的5期平均线
df['ma5']=MA(df['sumh'],5)
# 和数的20期平均线
df['ma20']=MA(df['sumh'],20)

# 全和数
df['suma']=df['h1']+df['h2']+df['h3']+df['h4']+df['h5']+df['h6'] +df['lh']

#跨度 
df['kd']=df['h6']-df['h1']

#计算奖号AC值
df['ac']=[hcp.ac(hcp.str2num(x)) for x in df.hh.astype(str)]
df['maac']=MA(df['ac'],5)  #AC值的平均线

#2段编码器
bm2=hcp.bmq2()

#计算奖号红号奇偶比,单双比
df['dsb']=[hcp.qab(hcp.str2num(x)) for x in df.hh.astype(str)]
df['dsb2']=[bm2[x] for x in df.dsb.astype(str)]   #文本转为数字

#计算奖号红号质合比
df['zhb']=[hcp.zhb(hcp.str2num(x)) for x in df.hh.astype(str)]
df['zhb2']=[bm2[x] for x in df.zhb.astype(str)]   #文本转为数字

#计算奖号红号大小比
df['dxb']=[hcp.dxb(hcp.str2num(x)) for x in df.hh.astype(str)]
df['dxb2']=[bm2[x] for x in df.dxb.astype(str)]   #文本转为数字

#计算蓝号单双号,奇偶号
df['lhds']=[x%2 for x in df.lh.astype(int)]   #文本转为数字

#计算蓝号质数
df['lhzs']=[hcp.zhishu(x) for x in df.lh.astype(int)]   #文本转为数字

#计算蓝号平均
df['lhma5']=MA(df.lh,5)
df['lhma10']=MA(df.lh,10)

def dx(x):
    y=0
    if x>8:
        y=1
    return y

#计算蓝号大号
df['lhdx']=[dx(x) for x in df.lh.astype(int)]   #文本转为数字

#小白量化数据格式化
df['open']=df['h1']
df['low']=df['h1']
df['high']=df['h6']
df['close']=df['h6']
mydf=df.copy()
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']

#RSI指标
def RSI(N1=5):
    LC = REF(CLOSE, 1)
    RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100.00
    return RSI1

#计算RSI指标值
mydf['rsi']=RSI(6)
mydf['rsi2']=RSI(12)

def DMI(M1=14, M2=6):
    """
    DMI 趋向指标
    """
    TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1)
    HD = HIGH - REF(HIGH, 1)
    LD = REF(LOW, 1) - LOW
    DMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1)
    DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1)
    DI1 = DMP * 100 / TR
    DI2 = DMM * 100 / TR
    ADX = MA(ABS(DI2 - DI1) / (DI1 + DI2) * 100, M2)
    ADXR = (ADX + REF(ADX, M2)) / 2
    return DI1, DI2, ADX, ADXR
mydf['di1'],mydf['di2'],mydf['adx'],mydf['adxr']=DMI()  #DMI指标

#设置学习和预测标签
#mydf['label']=mydf['lh']  ##预测蓝号
mydf['label']=mydf['lhds']  ##预测蓝号单双
#mydf['label']=mydf['lhzs']  ##预测蓝号质合
#mydf['label']=mydf['lhdx']  ##预测蓝大小

## 数据集划分为训练数据和测试数据
x_train,x_test,y_train,y_test=hcp.sk_init(mydf)

test_size=len(x_test)/(len(x_train)+len(x_test))
print('神经网络数据已准备好了!')
print('test_size=%.4f,训练%d条,测试%d条。'%(test_size,len(x_train),len(x_test)))

##################################################
##      () KNN分类算法
from sklearn import neighbors, datasets
print('KNN分类算法')
clf = neighbors.KNeighborsClassifier(10, weights= 'distance')
################################################
##      () 决策树算法
#from sklearn import tree
#print('决策树')
#clf = tree.DecisionTreeClassifier()
################################################
##      () 随机森林分类器算法
#from sklearn.ensemble import RandomForestClassifier   #导入随机森林分类器
#print('随机森林分类器')
##clf = RandomForestClassifier()
#clf = RandomForestClassifier(n_estimators=10)
#################################################

#训练的代码
print('神经网络开始数据学习!')
clf.fit(x_train, y_train)    #神经网络学习

result =clf.predict(x_test)  #进行预测
print('测试数据的结果:',result[-10:-1])
print('真实数据的结果:',y_test[-10:-1])

score = clf.score(x_test, y_test)  #计算成功率
print('测试数据评估score :',score)

程序对单双预测结果如下:

神经网络数据已准备好了!
test_size=0.1002,训练2397条,测试267条。
KNN分类算法
神经网络开始数据学习!
测试数据的结果: [0 0 0 1 1 1 0 1 1]
真实数据的结果: [1, 0, 0, 1, 0, 0, 0, 0, 0]
测试数据评估score : 0.5318352059925093

机器预测成功单值1,双值0的成功率为0.53183,也比随机概率0.5大一点。
神经网络模型很多,还有很多深度学习模型,本文神经网络分析彩票的结果,不代表神经网络不能预测彩票。也仅仅表示提取的特征值,不适合需选用神经网络模型来电脑AI预测。

购买《零基础搭建量化投资系统――以Python为工具》(https://item.jd.com/61567375505.html)一书,就能得到小白量化第二代全部源代码。其中包括完整的HP_cp模块。

#独狼荷蒲qq:2775205 /2886002
#小白量化彩票软件开发群:712300766
#小白量化PythonTkinter软件开发群:524949939
#电话微信:18578755056
#微信公众号:独狼股票分析

请点赞本文,你的鼓励是我写作的动力!
请持续关注我的博客,我的进步,就是你的进步!

  • 15
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
本人经过几年的努力,终于掌握了C#的编程,与同学一起开发了这套软件。与各位网友共勉。 1.5版正式推出!主要修正了(以下都是重大问题所以应及时更新,对给您造成的不便,本公司深表歉意): 1、重装软件后提示30天试用期已过的BUG; 2、机器码和注册码的0和字母O不好区分的问题。 3、一个注册表错误,会使软件重启后当成试用期结束。 “世间能有几回运,彩票游戏存玄机” ,也许您会有疑问:彩票开奖号码不是完全随机的吗?那我还算什么,随便写几个数字买算了!!其实您错了,世界上并没有绝对理想的随机数,就算是用电脑也只能产生接近随机的数:在彩票开奖产生号码时,诸如摇奖机的物理特性、每个球的重量和光滑度的差异、空气的流动性等等都会使开奖结果产生一定的偏态,在中短期内有一定的规律可寻。 那么怎样才能找出偏态,利用偏态提高中奖的概率呢?用手工显然不行,您需要一款称手软件!但是现在彩票软件多得让人眼花缭乱,哪个才是适合您的呢?得彩易彩票旋转矩阵选号杀号王双色球专用版的问世,解决了您的烦恼,您只要下载使用了,软件就会主动成为您的好帮手,让您中奖不再是梦想! 本公司双色球项目开发小组根据组里多名长年研究彩票双色球的专家的成果,经过反复的概率验证,精心设计了算法,其中大部分属于本公司原创独有。程序运行时随着期数的增加,出号趋势会愈发明显,算法也会愈发准确,一般开奖期数在最近50-150期时效果最为明显。 友情提示:彩票软件可以帮您提高中奖的概率,但并不能保证您100%中大奖,本软件也不例外!如果有所谓专家向您推荐号码并保证能中大奖的,请您一定要当心受骗! 1、本软件基于微软.net框架进行开发,技术先进。 2、市面上的一般彩票软件所提供的旋转矩阵只有廖廖几个方案(如保6中5,保5中4),本软件则提供了几十种方案,应有尽有。 3、选号杀号功能的强大和全面是其它一般彩票软件所没有的。 4、过滤功能全面,完全可以满足需要。 5、开奖数据可以更新,导入和导出,极大的方便彩民朋友。 6、学习容易,帮助文档详尽,上手极快。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷蒲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值