【机器学习方法研究】——思路整理、支持向量机

转载 2017年10月06日 19:05:59

机器学习方法是计算机科学的一个分支,它借助于计算机算法,对数据进行分析后,实现模式识别,进而实现对未来数据的预测。

机器学习方法可以分为以下几个类别:

1.监督学习:

训练的输出分类是预先设定好的,根据输入和输出,算法的目标在于寻找其中的对应函数。

2.无监督学习:

训练的输出分类是预先不知道的。算法的目标在于发现数据中的结构,如聚类分析。

3.半监督学习:

介于监督学习和无监督学习之间。

4.增强学习:

算法通过执行一系列的动作,影响环境中的可观察变量,从而得到环境对动作反应的规律。最后根据这个规律,判断该采取何种行动以最大化 某种回报。

监督式学习是机器学习的一个分支,可以通过训练样本而建立起一个输入和输出之间的函数,并以此对新的事件进行预测。

典型的监督学习流程如下:

监督学习流程.png

支持向量机

是监督学习中一种常用的学习方法。

支持向量机( Support Vector Machines SVM )是一种比较好的实现了结构风险最小化思想的方法。它的机器学习策略是结构风险最小化原则 为了最小化期望风险,应同时最小化经验风险和置信范围)。具体就不详细介绍了,百度有很多资料。

http://scikit-learn.org/stable/modules/svm.html#svm 中是SVM函数和简单介绍。

from sklearn.svm import SVR 可以构造支持向量回归(Support Vector Regression)模型

from sklearn.svm import SVC 可以用于分类(Support Vector Classification)

首先来看支持向量回归(Support Vector Regression)模型如何使用,下面是官网的一个简单例子。

http://scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html#example-svm-plot-svm-regression-py

In [1]:
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()
# 添加噪声
y[::5] += 3 * (0.5 - np.random.rand(8))

# 拟合回归模型,不同的核函数
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
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()

从回归的角度,我们可以根据之前的历史数据,预测下一个时间点的股价;分类的角度,我们可以根据历史数据,预测下一个时间点股价的正负。下面对股票数据进行回归建模

In [10]:
df.index
Out[10]:
DatetimeIndex(['2015-01-05', '2015-01-06', '2015-01-07', '2015-01-08',
               '2015-01-09', '2015-01-12', '2015-01-13', '2015-01-14',
               '2015-01-15', '2015-01-16', 
               ...
               '2016-01-29', '2016-02-01', '2016-02-02', '2016-02-03',
               '2016-02-04', '2016-02-05', '2016-02-15', '2016-02-16',
               '2016-02-17', '2016-02-18'],
              dtype='datetime64[ns]', length=273, freq=None, tz=None)
In [13]:
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
import time

start_date = '2015-01-01'
df = get_price('000423.XSHE', fields='price', start_date=start_date, 
                            end_date=time.strftime('%Y-%m-%d', time.localtime()))
X = mat(range(1,len(df['price'].values)+1)).T
y = df['price'].values

# 拟合回归模型
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
# 注意这里对数据建模完了还是预测的该数据
y_rbf = svr_rbf.fit(X, y).predict(X)

# 画图展示结果
_, ax = plt.subplots(figsize = [18,8])

dates = df.index
ax.scatter(X, y, c='k', label='data')
ax.plot(X,y_rbf, c='g', label='RBF model')
ticks = ax.get_xticks()
ax.set_xticklabels([dates[i].date() for i in ticks[:-1]]) 
plt.xlabel('data')
plt.ylabel('target')
plt.title('Support Vector Regression')
plt.legend()
plt.show()

那么如何在策略中使用呢?一个暴力的方法就是预测未来股价,如果涨了就买入,跌了就卖出。使用SVR进行回归预测,需要预测中未来股价,那么学习这种非平稳、噪声的股价序列难度是很大的。

下面是个人想法,作为引子,欢迎大家一起讨论

特征选择

查阅文献发现有各种因子应用到其中,

基本面因子:PE,PB,ROE等

技术指标因子:RSI、KDJ、MA、MACD等

蜡烛图形态因子:三乌鸦、锤子线等

输出辨识

涨跌分类

未来一段时间收益率

还有一类用法是利用非监督学习甚至深度学习找到特征

比如找到大涨的股票,然后看大涨前一段时间的形态有没有相似的,利用非监督学习的方法

统计套利方法是看股价的相关性,比如A和B两只股票价差一向稳定在10块钱,某天价差突然跌倒5块钱,统计套利就假设,这个价差会恢复到10块钱,那么我们就可以就此设计交易策略。如果股价价差真的恢复了,那么就可以实现套利。但是显然,这样的关系可能不是那么明显地存在于股票的价格中,可能存在于收益曲线中或者方差曲线中,甚至更高复杂度的统计量中。DL提供了将原数据投影到另一个特征空间中的方法,而且是高度非线性的。那么,原数据中没有体现出来的相关性,会不会在这种高度非线性的投影空间中体现出来呢

机器学习(六):黑箱方法——神经网络和支持向量机

理解人工神经网络:(ANN)对一组输入信号和一组输出信号之间的关系进行建模,使用的模型来源于人类大脑。 激活函数:这个过程涉及对总的输入信号求和,和确定是否能满足激活阈值。如果满足,神经元传递信号,...

基于支持向量机的机器学习研究

  • 2011年03月18日 11:08
  • 578KB
  • 下载

《统计学习方法》笔记——支持向量机(SVM)

支持向量机概述支持向量机是一种二分类模型,他的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机(感知机利用误分类最小的策略,求得分离超平面,解有无穷多个;线性可分支持向量机利...

机器学习-python通过序列最小优化算法(SMO)方法编写支持向量机(SVM)

代码及数据集下载:SVM学习SVM,然后想自己手写一个,看了一些材料后发现了最流行的SMO,下面总结如下。SMO算法的思想很简单,它将大优化的问题分解成多个小优化的问题。这些小问题往往比较容易求解,并...

第八讲. 支持向量机进行机器学习——Support Vector Machine

http://blog.csdn.net/abcjennifer/article/details/7849812 本栏目(Machine learning)包括单参数的线性回归、多参数的线性...
  • Erli11
  • Erli11
  • 2014年06月23日 10:32
  • 9560

机器学习练习(六)—— 支持向量机

作者:John Wittenauer 翻译:GreatX 源:Machine Learning Exercises In Python, Part 6 这篇文章是一系列 Andrew Ng 在 C...
  • And_w
  • And_w
  • 2017年02月09日 20:25
  • 547

简单易学的机器学习算法——线性支持向量机

一、线性支持向量机的概念 二、

Udacity机器学习入门笔记——支持向量机(SVM)

原则对他涉及的分类均最大化了最近点的距离——Margin那么下面这个图应该是哪条线呢? 应该是下方的线 诚然,上方的线分割的更好,但是它犯了分类方面的错误 支持向量机总是将正确分类标签作为...

支持向量机(SVM)——斯坦福CS229机器学习个人总结(三)

鉴于我刚开始学习支持向量机(Support vector machines,简称SVM)时的一脸懵逼,我认为有必要先给出一些SVM的定义。下面是一个最简单的SVM: 图一 分类算法:支持向量机(...

PYTHON机器学习实战——SVM支持向量机

支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知识,需要慢慢地理解。理论知识参考: http://www.cnblogs.com/steven-yang/p/5658362.html 一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【机器学习方法研究】——思路整理、支持向量机
举报原因:
原因补充:

(最多只允许输入30个字)