SVR预测第二天开盘趋势和股价的正负统计分析

SVR预测第二天开盘趋势和股价的正负统计分析

    • 前言
    • SVR的简单实现代码
    • 拟合以及预测股价

前言

这篇博客基于公众号1 ,机器学习相关知识参阅了西瓜书。

  • 学习了支持向量机(SVM)里的最经典的二元分类问题
  • 支持向量回归(SVR),了解了核函数的意义,增强了对“间隔”的理解。
  • 使用 优矿 获取股市信息

基本上就是复现了一部分公众号里的代码,只是拟合的时候把数据一部分当作训练集,一部分当作测试集

SVR的简单实现代码

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
import time

X=np.sort(5*np.random.rand(40,1),axis=0)
y=np.sin(X).ravel()

svr_rbf=SVR(kernel='rbf',C=1e3,gamma=0.1)   #exp(-gamma(||x-x'||)) Radial Based Function
svr_lin=SVR(kernel='linear',C=1e3)          #线性核
svr_poly=SVR(kernel='poly',C=1e3,degree=2)  #多项式核
y_rbf=svr_rbf.fit(X,y).predict(X)           #拟合
y_lin=svr_lin.fit(X,y).predict(X)
y_poly=svr_poly.fit(X,y).predict(X)```

plt.scatter(X,y,c='k',label='data')
plt.plot(X,y_rbf,c='g',label='RBF model')
plt.plot(X,y_lin,c='r',label='Linear model')
plt.plot(X,y_poly,c='b',label='Polynomial model')
plt.xlabel('data')
plt.ylabel('target')
plt.title('Support Vector Regression')
plt.legend()
plt.show()

结果:
SVR预测第二天开盘趋势和股价的正负统计分析_第1张图片

拟合以及预测股价

这里要用到一个网站叫 优矿
需要在优矿里面的编辑器敲代码

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
import time
import pandas as pd

start='20160101' #开始日期
end='20170101'   #截至日期
code='600000'    #股票代码
df=DataAPI.MktEqudAdjAfGet(ticker=code,beginDate=start,endDate=end,field=u'tradeDate,closePrice',pandas='1')
df=df.set_index('tradeDate').copy() #将DataFrame的 index设置成 tradeDate列

X=np.mat(range(1,len(df.values)+1)).T   #绘制横坐标
y=df.values  #提取DataFrame里的数据

X_train=X[:-10]  #训练集
X_test=X[-10:]
y_train=y[:-10]  #测试集
y_test=y[-10:]

svr_rbf=SVR(kernel='rbf',C=1e3,gamma=0.1)  #使用 rbf核进行拟合
clf=svr_rbf.fit(X_train,y_train)            #训练得到分类器
y_rbf=clf.predict(X)                           #预测的输出

_,ax=plt.subplots(figsize=[14,7])
ax.scatter(X_train,y_train,c='r',label='train')                 #训练集真实值的散点图 
ax.scatter(X_test,y_test,c='g',label='test')                   #测试集真实值的散点图 
ax.plot(X,y_rbf,c='b',label='RBF model')                        #训练集的拟合结果

plt.xlabel('day')
plt.ylabel('target')
plt.title('Support Vector Regression')
plt.legend()
plt.show()

股票拟合结果:
SVR预测第二天开盘趋势和股价的正负统计分析_第2张图片
绿色的是我划分出来的测试集,曲线是拟合的结果,可以看到中间有一段上升是不准确的,但是后面总体下降是准确的。模型做的比较简单,所以预测的效果差强人意,当作是学习用。


  1. 公众号链接 ↩︎

你可能感兴趣的:(支持向量机)