SVR预测第二天开盘趋势和股价的正负统计分析
前言
- 学习了支持向量机(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()
结果:
拟合以及预测股价
这里要用到一个网站叫 优矿
需要在优矿里面的编辑器敲代码
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()
股票拟合结果:
绿色的是我划分出来的测试集,曲线是拟合的结果,可以看到中间有一段上升是不准确的,但是后面总体下降是准确的。模型做的比较简单,所以预测的效果差强人意,当作是学习用。
公众号链接 ↩︎
版权声明:本文为crabstew原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。