(1)实例介绍

数据介绍:
网易财经上获得的上证指数的历史数据,爬取了20年的上证指数数据。
实验目的:
根据给出当前时间前150天的历史数据,预测当天上证指数的涨跌。
技术路线:sklearn.svm.SVC

数据实例:中核科技1997年到2017年的股票数据部分截图,红框部分为选取的特征值

--------------------------------------

特征&标签的区别:

在周志华的《机器学习》中判断是否正熟的好瓜,
首先会从西瓜这个具体的事物中抽取一些有用的信息,西瓜的颜色、瓜蒂的形状、敲击的声音就是特征,而“好瓜”和“坏瓜”这两个判断就是标签
更抽象一点,特征是做出某个判断的证据,标签是结论。

(2)实验过程

1)建立工程,导入sklearn相关包

关于一些相关包的介绍:
 pandas:用来加载CSV数据的工具包
 numpy:支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
 sklearn下svm:SVM算法
 sklearn下cross_validation:交叉验证

import pandas as pd
import numpy as np
from sklearn import svm
from sklearn import cross_validation

2)数据加载&数据预处理

参数解释1(上段):读入数据
pd:pandas包的实例参数
read_csv( ): 详细解释 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)
pandas.read_csv(数据源, encoding=编码格式为gbk, parse_dates=第0列解析为日期,index_col=用作行索引的列编号)
sort_index( ): 详细解释( http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html )
DataFrame.sort_index(axis=0 (按0列排), ascending=True(升序), inplace=False(排序后是否覆盖原数据))data 按照时间升序排列

-------------------------------------

参数解释2(下段):
选取5列数据作为特征:收盘价 最高价 最低价 开盘价 成交量
dayfeature:选取150天的数据
featurenum:选取的5个特征*天数
x:记录150天的5个特征值
y:记录涨或者跌
data.shape[0]-dayfeature意思是因为我们要用150天数据做训练,对于条目为200条的数据,只有50条数据是有前150天的数据来训练的,所以训练集的大小就是200-150, 对于每一条数据,他的特征是前150天的所有特征数据,即150*5, +1是将当天的开盘价引入作为一条特征数据

data=pd.read_csv('stock/000777.csv',encoding='gbk',parse_dates=[0],index_col=0)
data.sort_index(0,ascending=True,inplace=True)dayfeature=150
featurenum=5*dayfeature
x=np.zeros((data.shape[0]-dayfeature,featurenum+1))
y=np.zeros((data.shape[0]-dayfeature))

参数解释:
u:unicode编码
reshape:转换成1行,featurenum列
ix :索引

for i in range(0,data.shape[0]-dayfeature):#/将数据中的“收盘价”“最高价”“开盘价”“成交量”存入x数组中#u:unicode编码 reshape:转换成1行,featurenum列x[i,0:featurenum]=np.array(data[i:i+dayfeature]\[[u'收盘价',u'最高价',u'最低价',u'开盘价',u'成交量']]).reshape((1,featurenum))x[i,featurenum]=data.ix[i+dayfeature][u'开盘价']#最后一列记录当日的开盘价              ix :索引
for i in range(0,data.shape[0]-dayfeature):if data.ix[i+dayfeature][u'收盘价']>=data.ix[i+dayfeature][u'开盘价']:y[i]=1else:y[i]=0#如果当天收盘价高于开盘价,y[i]=1代表涨,0代表跌

3)创建SVM并进行交叉验证

#创建SVM并进行交叉验证
clf =svm.SVC(kernel='rbf')
#调用svm函数,并设置kernel参数,默认是rbf,其它:‘linear’‘poly’‘sigmoid’
result =[]
for i in range(5):#x和y的验证集和测试集,切分80 - 20 % 的测试集x_train,x_test,y_train,y_test =\model_selection.train_test_split(x,y,test_size=0.2)#训练数据进行训练clf.fit(x_train,y_train)#将预测数据和测试集的验证数据比对result.append(np.mean(y_test ==clf.predict(x_test)))
print("svm classifier accuacy:")
print(result)

4)全部代码

#用来加载CSV数据的工具包
import pandas as pd
#:支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
import numpy as np
#sklearn下svm:SVM算法
from sklearn import svm
# sklearn下cross_validation:交叉验证
from sklearn import model_selection
#parse_dates=第0列解析为日期, index_col= 用作行索引的列编号)
data =pd.read_csv(r'C:\Users\86493\Desktop\北理工机器学习慕课数据\分类\stock\000777.csv',encoding='gbk',parse_dates=[0],index_col=0)
#DataFrame.sort_index(axis=0 (按0列排), ascending=True(升序),
#inplace=False(排序后是否覆盖原数据))data 按照时间升序排列
data.sort_index(0,ascending=True,inplace=True)#选取5列数据作为特征:收盘价 最高价 最低价 开盘价 成交量
#dayfeature:选取150天的数据
#featurenum:选取的5个特征*天数
#x:记录150天的5个特征值 y:记录涨或者跌
dayfeature=150
featurenum =5*dayfeature
#data.shape[0]-dayfeature意思是因为我们要用150天数据做训练,
# 对于条目为200条的数据,只有50条数据是有前150天的数据来训练的,
# 所以测试集的大小就是200-150, 对于每一条数据,他的特征是前150天的所有特征数据,
# 即150*5, +1是将当天的开盘价引入作为一条特征数据
x=np.zeros((data.shape[0]-dayfeature,featurenum+1))
y=np.zeros((data.shape[0]-dayfeature))for i in range(0,data.shape[0]-dayfeature):#/将数据中的“收盘价”“最高价”“开盘价”“成交量”存入x数组中#u:unicode编码 reshape:转换成1行,featurenum列x[i,0:featurenum]=np.array(data[i:i+dayfeature]\[[u'收盘价',u'最高价',u'最低价',u'开盘价',u'成交量']]).reshape((1,featurenum))x[i,featurenum]=data.ix[i+dayfeature][u'开盘价']#最后一列记录当日的开盘价              ix :索引
for i in range(0,data.shape[0]-dayfeature):if data.ix[i+dayfeature][u'收盘价']>=data.ix[i+dayfeature][u'开盘价']:y[i]=1else:y[i]=0#如果当天收盘价高于开盘价,y[i]=1代表涨,0代表跌
#创建SVM并进行交叉验证
clf =svm.SVC(kernel='rbf')
#调用svm函数,并设置kernel参数,默认是rbf,其它:‘linear’‘poly’‘sigmoid’
result =[]
for i in range(5):#x和y的验证集和测试集,切分80 - 20 % 的测试集x_train,x_test,y_train,y_test =\model_selection.train_test_split(x,y,test_size=0.2)#训练数据进行训练clf.fit(x_train,y_train)#将预测数据和测试集的验证数据比对result.append(np.mean(y_test ==clf.predict(x_test)))
print("svm classifier accuacy:")
print(result)

5)结果分析

==搞了半天这个代码运行出错,cross_validation改成model_selcetion后也不行。。有时间再来收拾。。

正常应该输入如下:

svm classifier accuacy:
[0.5635179153094463,0.5754614549402823, 0.5266015200868621, 0.5450597176981542, 0.5407166123778502]

(3)交叉验证

1)基本思想:

交叉验证法先将数据集D划分为k个大小相似的互斥子集,每个自己都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这个k个测试结果的均值。通常把交叉验证法称为“k者交叉验证”, k最常用的取值是10,此时称为10折交叉验证。

2)10折交叉验证示意图

机器学习(九)基于SVM的上证指数涨跌预测相关推荐

  1. 基于SVM算法的股票预测分析

    基于SVM算法的股票预测分析 1.数据集选取与描述 由于股票数据的混沌性.无序性,不适宜选取太多的数据作为模型训练的数据集.故本文选出的数据是"温氏股份"200个交易日的股票数据, ...

  2. sklearn 分类(上证指数涨跌预测)

    来源 https://www.icourse163.org/course/BIT-1001872001 上证指数涨跌预测 数据介绍: 网易财经上获得的上证指数的历史数据,爬取了20年的上证指数数据. ...

  3. 【opencv机器学习】基于SVM和神经网络的车牌识别

    基于SVM和神经网络的车牌识别 深入理解OpenCV:实用计算机视觉项目解析 本文用来学习的项目来自书籍<实用计算机视觉项目解析>第5章Number Plate Recognition 提 ...

  4. 机器学习笔记-基于逻辑回归的分类预测

    天池学习笔记:AI训练营机器学习-阿里云天池 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有&quo ...

  5. Python机器学习应用之监督学习-上证指数涨跌预测实例

    数据介绍 网易财经上获得的上证指数的历史数据,爬取了150天的上证指数数据. 实验目的 根据给出当前时间前150天的历史数据,预测当天上证指数的涨跌. 技术路线 sklearn.svm.SVC 实验过 ...

  6. python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测

    导学问题 什么是逻辑回归(一),逻辑回归的推导(二 3),损失函数的推导(二 4) 逻辑回归与SVM的异同 逻辑回归和SVM都用来做分类,都是基于回归的概念 SVM的处理方法是只考虑 support ...

  7. SVM用于上证指数的预测

    按照量化投资 matlab那本书中的代码. 做了如下几个试验: 1.利用1990-12-19日到2015-07-28日(包括28日)的数据进行预测. predict_low=3352, predict ...

  8. 机器学习之基于SVM实现多类人脸识别

    之前利用Fisher线性分类器实现过多类人脸识别,这次还是同样的数据集,利用SVM实现人脸识别. 数据集如下所示:一共是40个人的人脸照片,每个人有10张图片. 1.实验原理 1.利用SVM实现人脸识 ...

  9. 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用

    1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...

最新文章

  1. MongoDB数据库(一:基本操作)
  2. Html2excel 1.4.1 发布,Html 转 Excel 工具包
  3. 远程注入dll中注册热键
  4. 10.2 梯度下降-机器学习笔记-斯坦福吴恩达教授
  5. IOS开发沙盒路径的封装技术
  6. Linux对包管理阐述
  7. idea部署springboot项目到外部tomcat
  8. 计算机基础知识excle,职称计算机基础知识:Excel工作表的复制
  9. java 自定义注解 生成json_Java中如何创建自定义的注解
  10. 关于Java的this关键字
  11. spring 事务源码分析(四)传播机制总览
  12. matlab 对数函数表示,matlab对数函数怎么表示
  13. 原生Js通过form表单提交后的跳转问题
  14. Android 旋转木马轮播,ReactJs写旋转木马轮播图
  15. 化工企业双重预防体系数字化综合管理系统
  16. nor flash操作
  17. python-科研绘图系列(2)-等高线图
  18. 【干货分享】大数据金融如何做到线上线下的融合?
  19. C语言:文件操作:顺序读写、随机读写
  20. L1、L2 正则化的一些原理

热门文章

  1. Node如何去除短视频水印?
  2. 微信开工具报getLocation:fail, the permission value is offline verifying
  3. Microsoft Office Word使用技巧(各种报告论文排版可能需要的小技巧)
  4. 浅谈音视频开发入门基础及进阶资源分享
  5. uniapp音乐播放器
  6. 问题1201:打印数字图形
  7. html中微博发布怎么做,js实现微博发布小功能
  8. JavaScript - canvas - 镜像图片
  9. 远程桌面用户输入法的配置
  10. uc打开html文件是空的,UC浏览器中打开不出现主页的解决方法