小白量化彩票实战(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
#
本文链接:http://m.zhangshiyu.com/post/16261.html