小白量化彩票實戰(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
#微信公眾號:獨狼股票分析
請點贊本文,你的鼓勵是我寫作的動力!
請持續關注我的博客,我的進步,就是你的進步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267473.html
標籤:AI
上一篇:安裝虛擬環境—手把手教學(超詳細,就算是個小白,十分鐘都能學會)
下一篇:PyTorch 詞向量模型簡介
