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

admin 2025-09-04 09:07:02

小白量化彩票实战(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 #微信公众号:独狼股票分析

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