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

简介: 网易财经上获得的上证指数的历史数据,爬取了20年的上证指数数据。实验目的:根据给出当前时间前150天

(1)实例介绍

数据介绍:

网易财经上获得的上证指数的历史数据,爬取了20年的上证指数数据。

实验目的:

根据给出当前时间前150天的历史数据,预测当天上证指数的涨跌。

技术路线:sklearn.svm.SVC


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


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


特征&标签的区别:


在周志华的《机器学习》中判断是否正熟的好瓜,

首先会从西瓜这个具体的事物中抽取一些有用的信息,西瓜的颜色、瓜蒂的形状、敲击的声音就是特征,而“好瓜”和“坏瓜”这两个判断就是标签。

更抽象一点,特征是做出某个判断的证据,标签是结论。


image.png


(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))

image.png参数解释:

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]=1
    else:
        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)全部代码

1.
#用来加载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]=1
    else:
        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]

image.png

(3)交叉验证

1)基本思想:


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


2)10折交叉验证示意图

image.png

相关文章
|
10月前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
10月前
|
机器学习/深度学习 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-4
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
10月前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
10月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机(SVM)算法
【5月更文挑战第27天】在数据科学和人工智能的领域中,支持向量机(SVM)是一种强大的监督学习模型,它基于统计学习理论中的VC维理论和结构风险最小化原理。本文将详细介绍SVM的工作原理、核心概念以及如何在实际问题中应用该算法进行分类和回归分析。我们还将讨论SVM面临的挑战以及如何通过调整参数和核技巧来优化模型性能。
|
7月前
|
机器学习/深度学习 算法
【机器学习】SVM面试题:简单介绍一下SVM?支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择?SVM为什么采用间隔最大化?为什么要将求解SVM的原始问题转换为其对偶问题?
支持向量机(SVM)的介绍,包括其基本概念、与逻辑回归(LR)和决策树(DT)的直观和理论对比,如何选择这些算法,SVM为何采用间隔最大化,求解SVM时为何转换为对偶问题,核函数的引入原因,以及SVM对缺失数据的敏感性。
132 3
|
7月前
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
294 2
|
7月前
|
机器学习/深度学习 算法
【机器学习】解释对偶的概念及SVM中的对偶算法?(面试回答)
解释了对偶的概念,指出对偶性在优化问题中的重要性,尤其是在强对偶性成立时可以提供主问题的最优下界,并且详细阐述了支持向量机(SVM)中对偶算法的应用,包括如何将原始的最大间隔优化问题转换为对偶问题来求解。
142 2
|
7月前
|
机器学习/深度学习 算法
【机器学习】支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择(面试回答)?
文章对支持向量机(SVM)、逻辑回归(LR)和决策树(DT)进行了直观和理论上的对比,并提供了在选择这些算法时的考虑因素,包括模型复杂度、损失函数、数据量需求、对缺失值的敏感度等。
108 1
|
10月前
|
机器学习/深度学习 数据采集 算法
深入理解并应用机器学习算法:支持向量机(SVM)
【5月更文挑战第13天】支持向量机(SVM)是监督学习中的强分类算法,用于文本分类、图像识别等领域。它寻找超平面最大化间隔,支持向量是离超平面最近的样本点。SVM通过核函数处理非线性数据,软间隔和正则化避免过拟合。应用步骤包括数据预处理、选择核函数、训练模型、评估性能及应用预测。优点是高效、鲁棒和泛化能力强,但对参数敏感、不适合大规模数据集且对缺失数据敏感。理解SVM原理有助于优化实际问题的解决方案。
|
10月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机(SVM)算法
【5月更文挑战第6天】在数据科学和人工智能的广阔天地中,支持向量机(SVM)以其强大的分类能力与理论深度成为机器学习领域中的一个闪亮的星。本文将深入探讨SVM的核心原理、关键特性以及实际应用案例,为读者提供一个清晰的视角来理解这一高级算法,并展示如何利用SVM解决实际问题。
229 7

热门文章

最新文章