当前位置:首页 » 《随便一记》 » 正文

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

22 人参与  2021年03月09日 12:43  分类 : 《随便一记》  评论

点击全文阅读


小白量化彩票实战(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://zhangshiyu.com/post/16261.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1