对双色球结果预测的一次无聊的尝试

今天晚上突然脑子不知怎么的,本来正在人工给12306验证码做打标工作,突然想看看双色球每期的开奖结果是否有规律

这里下载从03年到今年的每期双色球开奖结果

用t-SNE降维到3维打印出来看看

似乎并没有什么规律

准备用线性回归来拟合一个模型,马上就有一个问题,对于双色球预测,自变量取什么?这是个非常复杂的问题了,而且可能是无解的问题,因为如果双色球是完全的独立随机事件,那也就无法提取出自变量,自然也就没法提取特征空间,这里姑且用开奖期号作为自变量特征,用结果(6维的红球结果,1维的蓝球结果)作为label

# -*- coding: utf-8 -*-

import os
import numpy as np
import matplotlib.pyplot as plt
import pickle
from sklearn.manifold import TSNE
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

def load_historydata():
    if not os.path.isfile("ssq.pkl"):
        ori_data = np.loadtxt(‘ssq.TXT‘, delimiter=‘ ‘, usecols=(0, 2, 3, 4, 5, 6, 7, 8), unpack=False)
        pickle.dump(ori_data, open("ssq.pkl", "w"))
        return ori_data
    else:
        ori_data = pickle.load(open("ssq.pkl", "r"))
        return ori_data

def load_tsnedata(ori_data):
    if not os.path.isfile("ssq_tsne.pkl"):
        tsne = TSNE(n_components=3, random_state=0)
        tsne_data = tsne.fit_transform(ori_data)
        pickle.dump(tsne_data, open("ssq_tsne.pkl", "w"))
        return tsne_data
    else:
        tsne_data = pickle.load(open("ssq_tsne.pkl", "r"))
        return tsne_data

def show_oridata(show_date):
    fig = plt.figure(1, figsize=(8, 6))
    ax = Axes3D(fig, elev=-150, azim=110)
    ax.scatter(show_date[:, 0], show_date[:, 1], show_date[:, 2], edgecolor=‘k‘, s=40)
    plt.show()

if __name__ == ‘__main__‘:
    ori_data = load_historydata()
    np.random.shuffle(ori_data)
    # tsne_data = load_tsnedata(ori_data)
    # show_oridata(tsne_data)

    X_data = ori_data[:, 0].reshape(-1, 1)
    Y_data = ori_data[:, 1:]
    print "X_data[0]: ", X_data[0]
    print "Y_data[0]: ", Y_data[0]

    # Split the data into training/testing sets
    split_len = int(len(X_data) * 0.8)
    X_train = X_data[:split_len]
    X_test = X_data[split_len:]
    print "X_train"
    print X_train

    # Split the targets into training/testing sets
    y_train = Y_data[:split_len]
    y_test = Y_data[split_len:]
    print "y_train"
    print y_train

    # Create linear regression object
    regr = linear_model.LinearRegression()

    # Train the model using the training sets
    regr.fit(X_train, y_train)

    # Make predictions using the testing set
    #y_pred = regr.predict(X_train).round()
    y_pred = regr.predict(X_test).round()
    print "y_pred"
    print y_pred

    print "y_pred distinct"
    y_pred_cache = list()
    for line in y_pred:
        line = list(line)
        if line not in y_pred_cache:
            y_pred_cache.append(line)
    for line in y_pred_cache:
        print line

    # 预测的准确度
    print "Prediction accurate: {0}%".format(np.mean(X_test == y_pred) * 100)

线性回归的预测结果如下

y_pred distinct
[5.0, 9.0, 14.0, 19.0, 24.0, 29.0, 9.0]
[5.0, 10.0, 15.0, 19.0, 24.0, 29.0, 9.0]
[5.0, 10.0, 14.0, 19.0, 24.0, 29.0, 9.0]

模型对所有的training set的每一条预测结果都相同,这说明,对于开奖期号来说,开奖结果是一个完全随机的事件

如果考虑每期和每期之间可能有关联性,可以考虑试试用RNN来训练,输入依然是开奖期号

但是反过来也给了我一个启示,在进行机器学习项目的时候,如果train或者test的结果不好或者不符合预期,不要急于去调参数或者换模型,更应该回过头来想想自己给模型输入的特征是否确实隐含了规律,算法是无法对随机事件进行预测的,只有原始数据中确实隐含了规律,使用适当的模型才能从中抽象出模型,特征工程是非常关键的,也是需要长久思考的

Relevant Link:

https://datachart.500.com/ssq/history/history.shtml
http://blog.csdn.net/supperman_009/article/details/40623503
https://zhuanlan.zhihu.com/p/26341086
http://ssq.50018.com/zou-shi-tu/default.aspx
http://www.sohu.com/a/134552307_116235
时间: 2024-11-20 10:38:29

对双色球结果预测的一次无聊的尝试的相关文章

分支预测技术

分支预测(Branch Prediction): 从P5时代开始的一种先进的,解决处理分支指令(if-then-else)导致流水线失败的数据处理方法,由CPU来判断程序分支的进行方向,能够加快运算速度. 当 包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法 确定该指令的下一条指令,直到分支执行完毕.流水线越长,处理器等待的时间便越长,因为它必须等待分支指令处理完毕,才能确定下一条进入流水线的指令.

解释就是掩饰

对女生一定不要解释 (1)有一次女生问我: 女生:"你身上怎么这么香啊?" 男生:"用的立白" 女生:"还给立白打广告啊" (2) 女生:你为什么送我礼物啊 男生:因为我不想让你幼小的心灵留下男人说话不兑现的坏印象 在这种情况下,一定不要直接的回答女生的问题. 或者说:一定不要给女生可以预料到的回答,因为这很无聊. 可以预测,没有悬念,就是无聊. (3) 女生:我知道我很好  于是你一时半会接受不了  没事  来日方长 女生:反正以后会更接受不了

【论文翻译】SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

Segnet: 一种用于图像分割的深度卷积编码-解码架构 摘要 我们展示了一种新奇的有实践意义的深度全卷积神经网络结构,用于逐个像素的语义分割,并命名为SegNet.核心的可训练的分割引擎包含一个编码网络,和一个对应的解码网络,并跟随着一个像素级别的分类层.编码器网络的架构在拓扑上与VGG16网络中的13个卷积层相同.解码网络的角色是映射低分辨率的编码后的特征图到输入分辨率的特征图.具体地,解码器使用在相应编码器的最大合并步骤中计算的池化索引来执行非线性上采样.这消除了上采样的学习需要.上采样后

App Store生存指南

资格获取 如果已经有App Store开发帐号请跳过此节. App Store的资格获取其实一直以来都不算难,和其它事情一样,需要的只是耐心.现在苹果对申请者的文书手续要求已经比几年前简化多了,我甚至发现网上所有的申请流程贴多多少少都过时了,比如传真纳税协议那一步已经不需要你真的传一份签了字的文件过去了.你要做的就是看仔细苹果要你提供什么,按规矩一样一样来,材料充分付完年费一般两三天就能搞到资格. 盈利模式 你的游戏是何时收钱的?P2P(Pay-to-play).F2P+道具IAP.F2P+内容

初尝seajs,只提供自己学习做笔记

(仅供自己使用,勿喷) 闲着无聊,尝试下seajs, 只是在公司项目上随便添加并测试了一下,做下记录, 方便以后自己使用更快的上手: 下载最新的sea.js, v- 3.0.0 新建seajsConfig.js,主要为seajs的配置,这里我只配置jquery /** * JS文件模块化 */ seajs.config({ base: "./js/lib/", alias: { "jquery": "jquery/jquery-1.12.4.min.js&

《跳一跳》当天开挂!游戏外挂咋能这么猛?

比起<绝地求生>外挂满天飞来说,其实关于游戏外挂的笑话很多,但也很残酷.经常和朋友们开的一个玩笑是,你家的游戏,是上线后第几天出现了外挂. 有时朋友的回答是,上线当天就有了,可我总觉得人家的外挂早准备好了,只是在等我们的游戏上线. 比如跳一跳,作为微信最新版中上线的首款小程序游戏,凭借微信高权重的推荐及简单易懂的玩法,瞬间刷爆朋友圈.结果,动手能力强的玩家甚至开发出人工外挂,成为网络上一时笑谈. 物理外挂当然是一种技巧活,那么程序员开发的那种游戏外挂呢?一样可以提前准备. 别以为这是个笑话,就

机器学习 - 2 - 线性回归

机器学习 - 2 - 线性回归 首先吐槽我们的老师上课上得真是太烂了..真的烂.. PPT里也只会对没有意义的公式,而且还不解释是在干什么.. 回归 什么是回归 首先回归属于监督学习的一种,回归问题中,尝试预测连续的输出,与尝试预测离散的输出的分类问题恰恰相反. 举个例子: 预测房价 预测身高 ... 回归模型 素材: 特征 \(x\) 预测值 \(y\) 训练集 \((x_i,y_i)\) 学习算法 回归函数 \(f\) 线性回归时: \[f(X) = \omega_0 + \sum_{i =

C语言函数声明什么时候可以省略,什么时候不能省?

在学习C语言函数的时候,老师总会告诉我们函数要写声明,然后再定义.这是个稳健的做法.等我自己学习了其他高级语言以后,回头再来写C,突然就觉得函数要写声明有点麻烦.无意间发现有一次函数没写声明居然编译(GCC 5.3)也通过了,而且都没有报错.于是想起来要好好研究一下这个C语言的函数声明什么时候可以不写,什么时候必须写. 这其实谈不上是技术性问题.就好像讨论i++ 和++i那么无聊.这都是编译器导致的语法问题.说他们都是历史遗留问题都不为过. 但是在C语言学习过程中,你不得不去把这些鬼问题弄清楚.

Termux的安装在手机上来运行Python

1. Termux 终端 Android是一个单用户图形化系统,功能主要以应用的形式呈现给用户,因此在系统上我们无法直接获取终端,更是无法直接调用系统自带的丰富指令.使用ADB是一个曲线救国的方法,打开USB调试后开发者可以在桌面系统的终端中触发Android系统自带指令,使用方法大概如下: adb shell env # 查看Android的环境变量 这种方法需要一台电脑的配合,为了实现全天候.无差别的终端体验,你首先需要一个终端模拟器来保证随时随地地使用终端. Android平台我们推荐Te