基于SVM支持向量机模型的选股策略
基于SVM支持向量机模型的选股策略
https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW
新版模版策略:
https://bigquant.com/wiki/doc/demos-ecdRvuM1TU
新版数据平台:
https://bigquant.com/data/home
https://bigquant.com/wiki/doc/dai-PLSbc1SbZX
新版表达式算子:
https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
新版因子平台:
https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5
SVM原理介绍
支持向量机(Support Vector Machine,SVM)可分为线性支持向量机和核支持向量机,前者针对线性分类问题,后者属于非线性分类器。支持向量回归也能够处理回归问题。
线性支持向量机
最大间隔分类
最大间隔分类是寻找最佳分类边界的核心原则。简单来讲,就是在所有可能的分类界面中,寻找使分类边缘最宽的界面。
图1:最大间隔分类示意图
如图1,红色和蓝色两条直线,称为最大边缘超平面(Maximum Margin Hyperplane),类似于“楚河汉界”。这条“楚河汉界”越宽,分类的效果应越好,所以根据最大间隔分类原则,左图的分类效果优于右图。
用数学语言表示,二维平面中的任意一条直线均可以表示为的形式,简记为𝒙^𝑇𝒘 + 𝑏 = 0,图2中的分类超平面(黑色直线)表示为𝒙^𝑇𝒘 + 𝑏 = 0,其上方的最大边缘超平面(红色直线)则相应表示为𝒙^𝑇𝒘 + 𝑏 − 1 = 0,即𝒙^𝑇𝒘 + 𝑏 = 1。类似地,下方的最大边缘超平面(黑色直线)表示为𝒙^𝑇𝒘 + 𝑏 = −1$。两个最大边缘超平面之间的间隔等于2/‖𝒘‖,其中‖𝒘‖为向量w的2范数,即各元素平方和的平方根。
线性支持向量机的目标是寻找一组直线的参数𝒘和b,使得分类间隔取得最大值。目标函数:
更常用的目标函数是上式的等价形式:
约束条件为:
即所有样本均归入正确的类别。其中(𝒙_𝑖 , 𝑦_𝑖 )表示第i 个样本的特征和标签。
#松弛变量
上面讨论的只是理想情况,绝大多数时候,数据中会包含噪音,难以用一条直线将两类样本完美地区分开来。此时就需要引入松弛变量的概念。对每个样本点赋予一个松弛变量的值:如果该点落在最大边缘超平面正确的一侧,则松弛变量𝜉 = 0;否则,松弛变量的值等于该点到最大边缘超平面的距离。
图3:松弛变量示意图
如图3,被正确分类的样本其松弛变量的值𝜉 = 0;少数样本点落在分类边界(黑线)对方一侧,这些错误分类的样本其松弛变量的值𝜉 > 1,即红/蓝色样本点到红/蓝线的距离;还有部分样本点尽管 落在分类边界本方一侧,但距离最大边缘超平面不够远,其松弛变量的值取一个较小的正数0 < 𝜉 ≤ 1。
此时线性支持向量机的目标函数改写为:
约束条件为:
引入松弛变量后,目标函数在原有的基础之上新加入
一项,即所有样本松弛变量之和乘以系数C。这里的系数C 称为惩罚系数,表示模型对错误分类的容忍度。当C取较大的数时,即使很小的松弛变量也会造成很大的损失,因此分类器对错误分类的容忍度较低,将尽可能保证分类正确,从而导致较高的训练集正确率(如图4 左图)。反之,当C 取较小的数时,分类器对错误分类的容忍度较高,允许错误分类的存在,分类器倾向于以最大间隔分类的原则进行分类(如图表4 右图)。
图4:惩罚系数示意图
#支持向量回归
在分类问题的损失函数之上稍加改动,就能得到用于回归问题的支持向量回归(Support Vector Regression),其损失函数为:
约束条件为:
#核支持向量机
#非线性分类
线性支持向量机能够处理线性分类问题,然而对于非线性分类问题,我们需要寻找新的解决途径——增加维度。
如图5,左图是不可能在二维平面内被一条直线分类的,因此考虑增维,将二维点投射到三维空间,从而在三维空间内可以找到一个超平面成功分开蓝色/红色。
核支持向量机同理:非线性分类转化为线性分类。首先通过非线性映射𝜙把原始数据𝑥变换到高维特征空间,随后使用线性支持向量机对高维空间下的数据进行分类,从而解决非线性分类问题:
#核函数
核函数是为了减少映射到高维空间后的计算量而设计的一个内积函数:
从而让目标函数不含低维到高维映射方式𝜙的显式表达,仅与核函数的选取有关:
任意一种映射方式都对应一个确定的核函数,理论上任何满足一定数学性质的核函数都可以成为核支持向量机的核函数。在实际应用中,通常使用线性核、多项式核、Sigmoid 核和高斯核等。不同核函数的分类性能和分类边界不尽相同,所以如何选择核函数是使用SVM的关键问题之一,本文将在下方详细阐述。
图6:常用核函数
如图6所示,多项式核、Sigmoid 核和高斯核的核函数都包含γ值一项。γ决定了原始数据映射到高维数据后,在高维特征空间中的分布。γ越大,样本在高维空间中的分布越稀疏,样本之间间隔越远,更容易被分类边界区分开来。γ的选取影响着模型准确度,同样是SVM使用中的关键问题,下文会具体阐述。
#SVM关键问题
#核函数的选取
在选核函数之前,我们首先要确定数据集是否线性可分。低维数据可以直接画图辨认,高维数据可以检查凸包(convex hull)是否相交,不相交,则线性可分。
确定线性不可分之后,需要采用核支持向量机模型,这就涉及了核函数选取问题:
不同核函数的分类性能和分类边界不尽相同。实际使用中,一般采用线性核、高斯核、RBF和多项式核。图7展示了对同一组数据使用不同核函数的分类表现。线性核的分类边界为直线,多项式核、Sigmoid 核和高斯核的分类边界在高维空间中为超平面,在原始空间中为曲线。线性核、低阶多项式核和Sigmoid 核计算速度快,不容易过拟合,但是在复杂分类问题下表现不佳。高阶多项式核和高斯核的优点是能够求解复杂的边界,对训练样本的分类能力强大,缺点是计算速度缓慢,并且可能导致过拟合。实际使用中需要根据数据自身的特点,选择最合适的核函数。
图7:不同核函数的分类表现
C和γ 的调整
惩罚系数C和γ是影响支持向量分类器性能的关键参数。实际应用中,当数据量较小的候,可以采用“网格搜索”对C和γ进行遍历,选择全局最优参数。但是“网格搜索”计算量很大,一般难以进行,所以我们主要还是根据C和γ的影响进行判断。
C和γ越大,惩罚越多,分类器对于错误的容忍程度低;同时经过映射后的样本在高维空间的分布越稀疏,更容易被区分。这都会导致训练集的正确率更高,但是也可能带来“过拟合”问题,使得偏差bias减小但variance方差增大。具体参数选择需要多尝试。
#实例:SVM模型选股
如图8所示,一个基础的SVM选股策略构建包含下列步骤:
获取数据 :A股所有股票。
特征和标签提取 :计算18个因子作为样本特征;计算未来5日的个股收益,收益率前95%的标注为1,其余标注为0。
特征预处理 :进行缺失值处理;去掉特征异常的股票,比如某个特征值高于99.5%或低于0.5%的;标准化处理,去除特征量纲/数量级差异的影响。
模型训练与预测 :使用SVM模型进行训练和预测;尝试多种核函数。
策略回测 :利用2015到2016年数据进行训练,预测2016到2017年的股票表现。每周等权重买入预测值为1的50只股票(深市优先),至少持有五日,同时淘汰预测值为0的股票。
模型评价 :查看模型回测结果;对比不同核函数的策略结果。