python 预测算法_Python 与金融数据使用机器学习算法预测交易策略

记得 关注、分享、点在看 呀~ 这样您就能持续收到优质的推送啦
这一期,我们将使用上一期处理好的数据特征和标签训练机器,然后预测交易策略。我们将分别使用 K近邻算法和集成学习两种方法分别完成模型的训练和预测。
FinTech History

Python 与金融数据|股票数据的获取与可视化

Python 与金融数据|数据的滑动平均值及多图可视化

Python 与金融数据|数据的重采样与蜡烛图(K线图)的绘制

Python 与金融数据|网页爬取上证50股票代码

Python 与金融数据|批量抓取并保存上证50的交易数据

Python 与金融数据|上证50的收盘价汇总

Python 与金融数据|绘制股票间的相关性图表

Python 与金融数据|为机器学习预处理数据

Python 与金融数据|生成机器学习的标签和特征

f26de93ec44f6e3ab6f5ed7edc18f7f6.pngK近邻算法

在 Python 中有很多种免费的机器学习库,其中之一是 sklearn,是针对 Python 的免费软件机器学习库。

sklearn 具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度提升,k均值和DBSCAN等内置方法。

K近邻算法是机器学习中比较简单的算法之一,在  sklearn 工具包中提供可以直接调用的方法。

K近邻算法是一个分类算法,可以把待分类的数据看作空间或者平面的一些点,如果一个样本点附近的K个最近的样本点大多数都是属于同一个类别,那么,这个样本点就也是属于这个类别。

与之前一样,使用一个特定的函数 doML() 来实现本期的内容,因为要使用上一期处理好的特征数据和标签来完成机器学习方法的训练,所以执行上一期的函数获取处理完成后的数据:

def doML(ticker):    X, y, dataFrame = extractFeaturesets(ticker)

接下来我们从所有的数据中划分出一部分来训练模型,另一部分的数据用来测试我们模型的准确性。

可以使用 train_test_split 这个方法来划分数据,这个方法来自于 sklearn 库,所以使用之前需要先导入这个方法:

from sklearn.model_selection import train_test_split

train_test_split 方法一般有三个参数,第一个参数为待划分的特征数据,第二个参数为待划分的标签数据,第三个参数为测试数据所占的比例,第三个参数的值是介于 0 和 1 之间:

XTrain, XTest, yTrain, yTest = train_test_split(X, y, test_size=0.25)

这里使用 X 作为特征数据,y 作为标签数据,随机取数据总量的 25% 作为测试数据。

接下来我们设置分类模型,这里选择 K近邻分类算法,前面说过,这是 sklearn 内置的一个方法,使用之前需要先导入一下:

from sklearn import neighbors

然后使用内置的 K近邻算法生成一个分类器 clf

clf = neighbors.KNeighborsClassifier()

下一步要做的就是训练模型,借助于 sklearn 这个机器学习库,训练模型也变得很简单:

clf.fit(XTrain, yTrain)

使用 fit 这个方法来训练模型,一般会有两个参数,第一个参数为训练用的特征数据,第二个参数为训练用的标签数据。

执行这行代码后,我们生成的分类器会自动用给定的数据按照既定的模型完成训练。

还记得前面我们除了生成训练数据,还生成了测试数据吗?这时就可以使用测试数据来测试训练好的模型的准确度,使用 score 这个方法可以返回测试测准确率。

这个方法一般有两个参数,分别为测试用的特征数据和测试用的标签数据:

confidence = clf.score(XTest, yTest)

这个方法会首先将特征数据作为输入,使用训练好的模型去给这些特征数据分类,也就是获取每组数据对应的标签。然后会将预测出来的结果与测试数据中的标签数据比对,得到并返回一个准确率。

获取了测试的准确率后,为了让结果更直观,我们把准确率输出:

print('Accuracy:', confidence)

完成了模型的训练,就可以对数据进行分类预测了。例如我们给定测试用的特征数据 XTest,使用 predict 方法就可以完成对特征数据的分类:

predictions = clf.predict(XTest)

根据我们的训练数据,这里得到的结果实际上是由 0、1 和 -1 这三个数构成的列表,根据前面的分析,0表示继续持有,1 表示买入,-1表示卖出。

为了更直观的展示结果,我们使用  统计每个数出现的次数并将其输出:

print('Predicted Spread:', Counter(predictions))

这样就完成了是用 K近邻算法预测交易策略。接下来调用 doML 这个函数,使用 '600036.SS' 这支股票来验证一下:

doML('600036.SS')

观察到的参考输出为:

dataSpread: Counter({1: 1104, -1: 1082, 0: 463})Accuracy: 0.41389728096676737Predicted Spread: Counter({-1: 340, 1: 200, 0: 122})

因为每次使用的训练数据都是随机选取的,所以每次得到的准确率可能都不太一样。

这里我们得到的准确率是 41% 左右。对于随机生成的测试数据,预测则结果是由 340 天是建议卖出,200天建议买入,122天建议继续持有。

如果实际中,我们想要去预测当日的策略,只需要用之前的交易数据去训练模型,然后得到当日的特征数据,将特征数据输入训练好的模型,就可以看到使用 K近邻分类算法输出的建议交易策略了。

如果在某次的训练过程中,获取到的准确率比较高,还可以将这一次训练的模型保存为 pickle 格式,以后需要使用的时候只需要直接获取这个模型即可。

c71dfe6452bd0c5ecce15c97458aefac.png

集成学习

集成学习实际上就是分类器的集成,就是构建多个机器学习模型来完成学习任务。机器学习有很多种模型,对于同一个问题,每一种模型都会产生不同的预测结果。对于多种模型预测结果如何选择最合适的一个结果呢?这就是集成学习要解决的问题之一:

把多种算法集中起来,每种算法都会有一个自己的预测结果,然后对每种算法的结果进行评估投票,综合选择出最好的结果。

在 sklearn 中提供一个封装好的集成学习方法 VotingClassifier,按照惯例,使用之前先导入相关的库文件:

from sklearn.ensemble import VotingClassifier

在构建集成学习的分类器之前,首先按照第一部分的方法导入处理好的数据并获取训练集和测试集:

def doML(ticker):    X, y, dataFrame = extractFeaturesets(ticker)    XTrain, XTest, yTrain, yTest = train_test_split(X, y, test_size=0.25)

然后开始构建集成学习分类器,这里我们集成使用三种分类方法:

线性支持向量机、K近邻算法和随机森林分类算法。

支持向量机是一种二类分类模型。它的基本思想是在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类。

随机森林分类算法指的是利用多个决策树对样本进行训练并预测的一种分类器。

这是三种比较常见的分类算法,在 sklearn 中都提供了可以直接调用的方法。如果使用线性支持向量机需要导入以下工具包:

from sklearn import svm

使用 K近邻算法 需要导入以下工具包:

from sklearn import neighbors

使用 随机森林算法 需要导入以下工具包:

from sklearn.ensemble import RandomForestClassifier

想要使用集成学习,只需要添加以下代码:

clf = VotingClassifier([('lsvc', svm.LinearSVC()),                            ('knn', neighbors.KNeighborsClassifier()),                            ('rfor', RandomForestClassifier())]                            )

这样就完成了集成学习分类器的构建,接下里只需要按照与上一部分相同的方法用处理好的数据训练并验证模型:

clf.fit(XTrain, yTrain)confidence = clf.score(XTest, yTest)print('Accuracy:', confidence)

最后完成模型的预测并输出结果:

predictions = clf.predict(XTest)print('Predicted Spread:', Counter(predictions))

最后我们同样用 '600036.SS' 这支股票来验证集成学习的预测结果,输出内容如下:

dataSpread: Counter({1: 1104, -1: 1082, 0: 463})Accuracy: 0.4501510574018127Predicted Spread: Counter({-1: 390, 1: 270, 0: 2})

这里预测的准确性可以达到 45%。对于这支股票,在测试集合中,集成学习方法预测的结果是有 390天 建议卖出,有 270天 建议买入,有 2 天建议继续持有。

一般来说,使用集成学习预测的结果会比使用单一模型的预测结果好一些。

同样的,如果希望预测其他时间点的交易策略,只需要更新测试数据样本就可以了。

823bb69839c5fbcfa895914b27f21612.png

参考代码

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@author:  IT信息教室(微信公众号)订阅/关注,在看、分享三连吧~"""from collections import Counterfrom sklearn import svm, neighborsfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import VotingClassifier, RandomForestClassifierdef doML(ticker):    X, y, dataFrame = extractFeaturesets(ticker)    XTrain, XTest, yTrain, yTest = train_test_split(X, y, test_size=0.25)    # print(len(XTrain[0]), len(XTest[0]))    # print(yTrain, yTest)        # 构建集成学习分类器,使用的分类算法有 线性支持向量机、K近邻算法和随机森林算法。    clf = VotingClassifier([('lsvc', svm.LinearSVC()),                            ('knn', neighbors.KNeighborsClassifier()),                            ('rfor', RandomForestClassifier())]                            )    # 构建 K近邻算法的分类器    # clf = neighbors.KNeighborsClassifier()    clf.fit(XTrain, yTrain)    confidence = clf.score(XTest, yTest)        print('Accuracy:', confidence)    predictions = clf.predict(XTest)    print('Predicted Spread:', Counter(predictions))    print()    print()    doML('600036.SS')doML('601328.SS')doML('600340.SS')

Codes: M先森看世界Edit: M先森看世界
bc432e75bfd8c16899f2c562c15d74eb.gif9b03f09b6aabf5468f8d16465384c88d.png58ab0196f5b45c9762dc491b38909632.png0f4753d552eb68ea08d2efe45f1793de.png3b91286094915829a0783b8d66938d33.pngb91b5ecf97f3fee9a1cef4c275ab8bf3.png4d814b6d450f26ae7d57c5393b670840.png
ONE MORE THING

如果您对内容有什么需求建议,或者遇到了什么软件、应用使用方面的问题,请直接在公众号主界面下发私信给我,我看都会及时回复。感谢大家的支持!


合作: classroom.it@hotmail.com

d6e6ede35b0786455782f8b6df383a5c.gif

Hi

你好呀

我是 M先森 

这是一个共同学习的平台

我会把我会的 你们想学的

做成教程或者写成文章
我们在这一起学英语 

学编程 学算法

学各种各样

好玩的好用的软件

记得要常回来看看呀

(^_^)a(^_^)a


点击 阅读原文 查看Python入门教程~

喜欢就点个 分享 点赞 在看 三连吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql主从表结构差异_mysqldiff对比主从表结构是否一致

mysqldiff该工具是官方mysql-utilities工具集的一个脚本,可以实现主从服务器表结构是否一致。数据校验需要使用Percona的pt-table-checksum工具。安装:# tar zxvf mysql-utilities-1.5.4.tar.gz# cd mysql-utilities-1.5.4# python setup.py install使用…

mysql 存储过程插入慢_mysql存储过程太慢怎么办

mysql存储过程太慢的解决方法:首先打开my.cnf配置文件;然后添加配置【long_query_time1】;接着通过【tail -f /tmp/logs/mysqld.log】命令监控sql;最后进行针对性的优化即可。解决方法:第一步:修改/etc/my.…

mongoose换成mysql_Package - tms-koa

tms-koa基于koa的轻量级快速开发框架,包含 MVC 中的 M 和 C 两部分,适合于实现 API 服务和前后端彻底分离的应用。内置基于 access_token 的访问鉴权机制,更容易实现 API 调用的负载分担。内置通过连接池访问 MySQL 数据库,支持进…

导出远程mysql数据库中的表_shell脚本实现导出远程mysql数据库表数据至本地

bin/main.sh脚本内容 #!/bin/bash#作用:用于同步远程mysql数据库表数据至本地#作者:丁艺博source /etc/profilesource ~/.bash_profileexport LANGen_US.UTF-8export RUN_HOME$(cd "$(dirname "$0")"; echo "${PWD%/*}")s…

商业智能解决方案_格至智能开关:简单便捷的商业智能照明解决方案

美莱恩智能照明推出的格至智能调光开关,是一款便捷、可轻松实现扩展的智能照明系统。它能够节约能源,并在为各种空间工作或者学习的人们,营造最舒适的照明环境。借助美莱恩SLT单火线传输技术,在新建或者改造项目中,你将…

vue 安装 less_解决旧Vue项目升级less-loader 6.0.0报错

作为一个爱折腾的主,我的package随时都是ncu -u! 何为ncu,就是检查nodejs npm/yarn项目依赖最新版本package.json一个插件! 这不,前几天less-loader 升级了最新版,我也迫不及待升级。 升级最新版软件依赖有很多好处,总之作为一个开发者你发布新版本肯定是升级改造的工作…

php读取mysql数据无法修改时间_php设置mysql查询读取数据的超时时间

php可以设置mysql查询的超时时间估计大家不知道吧,一般都直接在mysql中进行设置了,下面我们来为各位介绍一下php设置mysql查询读取数据的超时时间吧。现象:php能通过代理正常连接到mysql。但是,执行query后,一直等待&a…

mysql无序id怎么优化limit_MYSQL分页limit速度太慢优化方法

原标题:MYSQL分页limit速度太慢优化方法在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦。当一个表数据有几百万的数据的时候成了问题!如 * fr…

反积分饱和 程序_用抗积分饱和PID控制传递函数为G(s)的被控对象

题目:用抗积分饱和PID控制传递函数为G(s)的被控对象G(s)523500/(s^387.35s^210470s)二、抗积分饱和原理积分饱和现象是在系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断加大而加大,从而导致执行器达到极限位置,如果控…

mysql top 1效率_TOP 1比不加TOP慢的疑惑

问题描述: 有一个查询如下,去掉 TOP 1 的时候,很快就出来结果了,但加上 TOP 1 的时候,一般要 2~3 秒才出数据,何解? SELECT TOP 1 ??? A . INVNO FROM A , B WHERE A . Item B . ItemNumber…

jieba库词频统计_用jieba库统计文本词频及云词图的生成

一、安装jieba库:\>pip install jieba #或者 pip3 install jieba二、jieba库解析jieba库主要提供提供分词功能,可以辅助自定义分词词典。jieba库中包含的主要函数如下:jieba.cut(s) …

mysql查看表描述_MySQL表记录操作介绍(重点介绍查询操作)

MySQL表记录操作指的是对数据库表中数据进行CRUD增删改查操作,一下将一一给大家介绍,重点介绍查询操作。一、插入数据(INSERT)二、删除数据(DELETE)三、修改数据(UPDATE)四、查询数据(SELECT)下面将以例子对数据查询进行详细讲解:例子&#x…

python邮件的图片放在哪里_用python保存电子邮件中的嵌入图像

我试图在一个嵌入的电子邮件中抓取图像。问题是我保存的图像不可读&#xff0c;我不知道为什么。电子邮件(保存为我在代码开头加载的文件)&#xff1a;MIME-Version: 1.0Received: by 10.100.120.7 with HTTP; Tue, 18 Oct 2011 10:36:48 -0700 (PDT)In-Reply-To: <8B4FDE07…

sqoop从mysql导入hdfs_sqoop 从mysql导入数据到hdfs、hive

1.上传sqoop安装包 2.安装和配置 在添加sqoop到环境变量 将数据库连接驱动拷贝到$SQOOP_HOME/lib里 3.使用 第一类&#xff1a;数据库中的数据导入到HDFS上 sqoop import --connect jdbc:mysql://hadoop07:3306/test --username root --password 123 --table user_info--colum…

安卓mysql插入数据_【11-25求助】关于Android 的SQLite数据库插入数据报错问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼运行程序&#xff0c;不知道为何点插入数据按钮会报错&#xff0c;请万能的吧友帮我看看&#xff0c;谢谢&#xff0c;不废话&#xff0c;直接上代码MainActivity.javapackage com.example.activity16;import android.support.v7.a…

安装python扩展库时只能使用pip_安装 Python 扩展库时只能使用 pip 工具在线安装,如果安装不成功就没有别的办法了。_学小易找答案...

【单选题】关于Python中的复数,下列说法错误的是_________________。【填空题】在Python程序中,导入sys模块后,可以通过列表________________访问命令行参数。_________________表示Python脚本名;____________________表示第一个参数。【简答题】尝试用颜色 表达 冷暖 感觉 !【…

opencv java_opencv的Java开发环境配置(IntelliJ idea)

1、首先我们先到官网下载opencv的包&#xff0c;在官网下载到的是一个可运行文件&#xff0c;其实就是一个解压程序&#xff0c;运行后会把opencv的相关文件解压到填写的路径。2、 在编辑环境变量窗口&#xff0c;点击新建&#xff0c;然后将opencv文件夹里的bin路径复制进去&a…

java session 永不过期_Java Web Application使Session永不失效(利用cookie隐藏登录)

在做 Web Application 时&#xff0c;因为 Web Project 有 session 自动失效的问题&#xff0c;所以如何让用户登录一次系统就能长时间运行三个月&#xff0c;就是个问题。后来&#xff0c;看到 session 失效的拦截器代码&#xff0c;就猜想能否通过拦截器来实现。查资料发现可…

java is-a_java中 is - a和 has - a的区别

Java中is-a和has-a的区别1.“is-a”是继承的关系,比如人是动物,人和动物是继承的关系;2.“has-a”是聚合的关系,比如人有眼睛,人和眼睛是聚合的关系;也可以理解为 is-a 是“继承”但has-a是“接口”关系。是“相互依赖”的关系&#xff0c;同时它们的生命周期都是一样的。我们以…

支付宝支付对账单java_[Java]解析支付宝对账单csv

配置相关公钥和私钥这些需要在支付宝的账户中心配置image.png这些内容在支付宝平台上都有教程,因为下载对账单这个功能比较简单,不需要入聚石塔下载对账单https://docs.open.alipay.com/20180417160701241302/fd3qt1官方文档写的很清楚,而且能直接用,将配置好的公钥私钥APPID等…