支持向量机模型

支持向量机(support vector machines, SVM)是一种二分类模型,所谓二分类模型是指比如有很多特征(自变量X)对另外一个标签项(因变量Y)的分类作用关系,比如当前有很多特征,包括身高、年龄、学历、收入、教育年限等共5项,因变量为‘是否吸烟’,‘是否吸烟’仅包括两项,吸烟和不吸烟。那么该5个特征项对于‘是否吸烟’的分类情况的作用关系研究,则称为‘二分类模型’,但事实上很多时候标签项(因变量Y)有很多个类别,比如某个标签项Y为‘菜系偏好’,中国菜系有很多,包括川菜、鲁菜、粤菜、闽菜、苏菜、浙菜、湘菜和徽菜共计8类,此时则需要进行‘多分类决策函数’转化,简单理解为两两类别(8个中任意选择2)分别建立SVM模型,然后进行组合使用。

机器学习算法常见算法中包括决策树、随机森林、贝叶斯等,上述均有良好的可解释性,比如决策树是将特征按分割点不停地划分出类别,随机森林是多个决策树模型,贝叶斯模型是利用贝叶斯概率原理进行计算。与上述不同,支持向量机模型是利用运筹规划约束求最优解,而此最优解是一个空间平面,此空间平面可以结合特征项,将‘吸烟’和‘不吸烟’两类完全地分开,寻找该空间平面即是支持向量机的核心算法原理。

支持向量机的计算原理复杂,但对其通俗地理解并不复杂,只需要知道其需要求解出‘空间平面’,该‘空间平面’可以把不同的标签项(因变量Y)类别特别明显的划分开即可。类似其它机器学习算法,支持向量机的构建步骤上,一般也需要先对数据进行量纲化处理、设置训练数据和测试数据比例、设置相关参数调优,最终实现在训练数据上有着良好表现,并且测试数据上也有着良好表现即可。

支持向量机模型案例

  • 1、背景

    本部分支持向量机使用的‘鸢尾花分类数据集’进行案例演示,其共为150个样本,包括4个特征属性(4个自变量X),以及标签(因变量Y)为鸢尾花卉类别,共包括3个类别分别是刚毛鸢尾花、变色鸢尾花和弗吉尼亚鸢尾花(下称A、B、C三类)。

  • 2、理论

    支持向量机模型的原理上,其可见下图。

    比如红色表示“吸烟”,黄色表示“不吸烟”,那么如何找到一个平面最大化的将两类群体分开,如上图所示,分开有很多种方式,左侧也可以分开,右侧也能分开。但明显的,右侧会“分的更开”,因而如何寻找到这样的一个空间平面,让标签项各类别最为明显的分开,此算法过程即为支持向量机。将点分开时,离平面最近的点要尽可能的远,比如右侧时A点和B点离平面最近,那么算法需要想办法让该类点尽可能地远离平面,这样就称为“分的更好”。左侧时挨着平面最近的两个点离平面太近,所以右侧的分类更好。

    与此同时,理论上可以找到‘空间平面’,将点彻底完全地分开,但此种情况并没有用,因为它只是数学上彻底地分开,但对真实数据业务并没有帮助,与此同时,数学计算上如果尽可能地让点分开,那么很容易出现‘过拟合’现象,即训练数据时模型构建完美,但测试数据上的表现糟糕,因而通过可对此类情况进行惩罚,即设置‘误差项惩罚系数值’。另外,为构建出空间平面,还需要使用到非线性函数,SVM模型时称‘核函数’,其用用于将特征从低维(比如二维XY轴平面)向高维空间转换,并且对其进行一定参数设置,以寻找较优模型。

    结合支持向量机的原理情况,其涉及以下参数,如下:

    参数 说明 参数值设置
    误差项惩罚系数 惩罚值越高,越不容忍误差,但也越容易过拟合 默认1.0
    核函数 用于将特征从低维向高维转换,从而使数据线性可分。 高斯核函数 (默认):一般使用高斯核。
    多项式核函数:可选
    线性核函数:可选
    sigmoid核函数:可选
    核函数系数值 核函数系数 scale:1.0/(特征数*方差) 默认。
    auto:1.0/特征数
    自定义:用户自己设置
    核函数最高次幂 当选用多项式核函数的时候,设置的核函数最高次幂。越高拟合效果越高,也越容易造成过拟合。 默认3,可自行调节。
    多分类决策函数 SVM本身只进行二分类,当有多个类别时,可以选择每两个类别之间都建立一个SVM分类器,或者每个类别与余下的所有类别各建立一个分类器。 ovr:(默认)每个类别与剩余的类别各建立一个分类器。
    ovo:每两个类别都分别建立一个分类器。
    模型收敛参数 模型的误差变化率小于该值的时候,结束模型构建 默认0.001。
    最大迭代次数 若迭代次数达到该值时依然不收敛,则停止迭代。 最大2000次。

    上述参数中,误差项惩罚系数是一个惩罚值,该值越大时训练数据越容易表现良好,但越容易产生‘过拟合’现象。参数调整时,如果发现有‘过拟合’情况,建议将该值往下设置,SPSSAU默认该值为1(已经较小)。核函数是SVM算法时,将低维向高维转化的‘助手’,建议设置方式如下:

    核函数
    特征项个数很大,且与样本量接近时 建议使用线性核函数
    特征项个数相对较少,且样本量一般时 建议使用高斯核(默认项,一般使用此项)
    其它情况时 建议对比不同核函数进行对比选择,如果没有特别情况,一般建议使用默认高斯核函数即可

    核函数系数值(也称Gamma值),其意义相对较小,通常使用默认值即可;

    核函数最高次幂:如果使用多项式核函数时,最高次幂越大,模型效果越好,但更容易带来‘过拟合’问题,建议设置为2、3或者4进行对比比(默认该值为3);

    多分类决策函数:基础的的SVM只处理二分类问题,如果标签项(因变量Y)有多个类别,比如8大菜系共8个类别时,那么算法上有两种方式,第1种是每个类别与余下类别(作为反例)建立1个SVM然后整合(共计建立8个SVM),即ovr法(1对其余法),还有一种方式是两两配对法即ovo法,8个类别形成8*(8-1)/2=28个配对组合,即进行28次SVM然后整合,该项默认值为ovr法。

    最后:模型收敛参数值和最大迭代次数这两项,其为算法内部迭代求最优解的参数值,正常情况下不用设置。

  • 3、操作

    本例子操作如下:

    训练集比例默认选择为:0.8即80%(150*0.8=120个样本)进行训练支持向量机模型,余下20%即30个样本(测试数据)用于模型的验证。需要注意的是SVM时涉及距离计算,因而需要对特征进行量纲处理,通常量纲处理方式为正态标准化,此处理目的是让数据保持一致性量纲。当然也可使用其它的量纲方式,比如区间化,归一化等。

    接着对参数设置如下:

    误差项惩罚系数值为1,如果希望训练集数据有着更好的表现,则可将其设置更高,但一定需要注意此时测试集的效果情况,否则就会出现‘过拟合’现象。本案例数据仅4个特征X,训练数据量为120个,因而使用高斯核较为适合,核函数系数值默认。多分类决策函数上使用ovr(即一对多余法),这样会减少运行时间加快运行速度。模型收敛参数和最大迭代次数保持默认值。

  • 4、SPSSAU输出结果

    SPSSAU共输出5项结果,依次为基本信息汇总,训练集或测试集模型评估结果,测试集结果混淆矩阵,模型汇总表和模型代码,如下说明:

    说明
    基本信息汇总 因变量Y(标签项)分类数据分布情况等
    训练集或测试集模型评估结果 分析训练集和测试集数据的模型效果评估,非常重要
    测试集结果混淆矩阵 测试集数据的进一步效果评估,非常重要
    模型汇总表 模型参数及评估汇总表格
    模型代码 模型构建的核心python代码

    上述表格中,基本信息汇总展示出因变量Y(标签项)的分类分布情况,模型评估结果(包括训练集或测试集)用于模型的拟合效果判断,尤其是测试集的拟合效果,以及提供测试集数据的混淆矩阵结果;模型汇总表格将各类参数值进行汇总,并且在最后附录SVM模型构建的核心代码。

  • 5、文字分析

    接下来针对最重要的模型拟合情况进行说明,如下表格:

    上表格中分别针对训练集和测试集,提供四个评估指标,分别是精确率、召回率、f1-scrore、准确率,以及平均指标和样本量指标等,如下表格说明:

    说明
    精确率 比如:预测为A类时,事实上是A类的比例,越大越好
    召回率 比如:事实上是A类时,预测为A类的比例,越大越好
    F1-score 精确率和召回率的调和平均数,越大越好,一般使用此指标较多
    准确率 整体上全部数据预测准确的比例情况,越大越好,仅1个数字
    平均值 对应指标的平均值,越大越好
    平均值(综合) 对应指标的加权平均值(考虑样本量情况下)
    样本量 各类别的样本量情况

    具体上述具体指标的解读,可见决策树模型帮助手册,通常使用F1-score值进行评估即可,训练数据时f1-score值为0.96,并且测试集数据也保持着0.94高分,二者比较接近,因而意味着应该不存在‘过拟合’现象,而且模型良好。

    接着进一步查看测试数据的‘混淆矩阵’,即模型预测和事实情况的交叉集合,如下图:

    ‘混淆矩阵’时,右下三角对角线的值越大越好,其表示预测值和真实值完全一致。上图中仅B类中2个样本被判断成C类,其余全部正确,意味着本次支持向量机模型在测试数据上表现良好。最后SPSSAU输出模型参数信息值,如下表格:

    上述参数信息仅为再次输出汇总,并无其它目的,最后SPSSAU输出使用python中slearn包构建本次支持向量机模型的核心代码如下:

    model = svm.SVC(C=1.0, kernel=rbf, gamma=scale, tol = 0.001, max_iter=2000, decision_function_shape=ovr)

    model.fit(x_train, y_train)

  • 6、剖析

    涉及以下几个关键点,分别如下:

    • 支持向量机模型时是否需要标准化处理?
    • 一般建议是进行标准化处理,因为SVM模型时涉及距离计算,需要量纲化数据处理,通常使用正态标准化处理方式即可。

    • 保存预测值
    • 保存预测值时,SPSSAU会新生成一个标题用于存储模型预测的类别信息,其数字的意义与模型中标签项(因变量Y)的数字保持一致意义。

    • SPSSAU进行支持向量机模型构建时,自变量X(特征项)中包括定类数据如何处理?
    • 支持向量机模型时本身并不单独针对定类数据处理,如果有定类数据,建议对其哑变量处理后放入,关于哑变量可 点击查看

    • SPSSAU中随机模型合格的判断标准是什么?
    • 机器学习模型中,通常均为先使用训练数据训练模型,然后使用测试数据测试模型效果。通常判断标准为训练模型具有良好的拟合效果,同时测试模型也有良好的拟合效果。机器学习模型中很容易出现‘过拟合’现象即假的好结果,因而一定需要重点关注测试数据的拟合效果。针对单一模型,可通过变换参数调优,与此同时,可使用多种机器学习模型,比如使用决策树、随机森林、神经网络等,综合对比选择最优模型。

    • 随机森林更多参考资料?
    • 更多关于随机森林的资料,可通过sklearn官方手册查看, 点击查看

疑难解惑

  • 拟合指标出现R方值小于0等异常?
  • 机器学习时当出现指标异常比如R 方小于0,其从计算公式上是正常的,此时意味着该模型非常糟糕无法使用。除此之外可解释方差分EVS指标也会出现负数(在模型糟糕时)。

  • SPSSAU机器学习如何进行预测?
  • SPSSAU中默认带有数据预测功能,当特征项X有完整数据,但标签项(因变量Y)没有数据时,此时‘保存预测值’,SPSSAU会默认对此种情况进行预测。如下图中的编号9到12共4行数据,其只有X没有Y,那么保存预测值时,默认对该4行数据进行预测。机器学习的各方法(包括决策树/随机森林/KNN/贝叶斯/支持向量机和神经网络等)均遵从此规则。

  • SPSSAU机器学习中量纲归一化处理的具体规则情况?
  • SPSSAU中,机器学习时均具有归一化参数值,并提供正态标准化/区间化/归一化等方式。其原理是针对具有完整数据的特征项X分别进行处理。比如下图中是针对编号为2~12共计11项的4个X分别进行处理。

  • 机器学习中分类任务和回归任务的区别是什么?
  • 机器学习包括分类任务和回归任务,当标签项(因变量Y)为类别数据时,其为分类任务,比如研究X对于“贷款是否逾期”的预测作用,“是否逾期”这个分类数据,因而此时此为分类任务。如果因变量Y为定量数据,比如研究X对于“贷款金额”的预测作用,“贷款金额”为定量数据,因而为回归任务。决策树/随机森林/支持向量机和神经网络等时,SPSSAU默认会对因变量Y进行识别,并且自动选择分类任务或者回归任务。当然研究者可以在“更多参数设置”处进行选择设置。另外,KNN和贝叶斯这两项仅提供分类任务。

  • 机器学习时提示‘分类数据必须为整数’?
  • 机器学习包括分类任务和回归任务,如果是定量数据Y进行分类任务,此时系统会提示“分类数据必须为整数”。决策树/随机森林/支持向量机和神经网络等时,可通过“更多参数设置”处进行选择设置,以及KNN和贝叶斯这两项仅提供分类任务。

  • 分类任务和回归任务,输出拟合指标不同?
  • 如果是分类任务(即Y为类别数据),此时会输出比如准确率、精确率、召回率、F1-score等评估指标,但当Y为定量数据(此时为回归任务),那么则会输出比如R方值,RMSE均方误差根,MSE均方误差等指标用于评估模型质量。分类数据可计算其是否预测正确,但定量数据只能计算预测值与真实值的接近程度,因而二者输出指标并不相同。另提示:SPSSAU会自动结合Y的数据情况自动选择分类或回归任务,当然研究者可自行通过参数设置。

  • 如何将多个模型绘制ROC曲线对比优劣?
  • 如果涉及多个模型预测能力绘制ROC曲线,用于多个模型预测能力对比。建议按以下步骤进行:第1步是得到各个模型(比如神经网络模型、随机森林模型、二元logistic回归模型等)的预测值标题,该预测值可通过SPSSAU中‘保存预测值’参数选中后得到;第2步是将得到的预测值作为ROC曲线时的‘检验变量X’。此时绘制出来的ROC曲线则会有多条,分别表示各模型的预测值。与此同时,ROC曲线时的‘状态变量Y’为实际真实情况上的Y数据,并且该数据正常情况下为二分类(即仅包括2个数字即两个类别)。

  • 机器学习算法时保存数据集标识的意思是什么?
  • 选择‘保存数据集标识’后,SPSSAU会新生成一个标题,用于标识模型构建时训练集或测试集,使用数字1表示训练集,数字2表示测试集。如果后续分析时(比如绘制ROC曲线)只针对训练集,那么使用筛选样本功能,筛选出训练集后分析即可。

  • 如何将多个机器学习模型数据绘制ROC曲线?
  • 如果有多个机器学习模型后,需要对比模型优劣情况。建议按下述步骤进行。

  • 第1步:每个机器学习模型最后一次构建后,选中‘保存预测信息’,系统会生成类别的预测概率;

  • 第2步:将多个机器学习模型的某类别的预测概率值一并纳入作为X,以及将Y作为Y,进行ROC曲线【注意,放入的是某个类别的预测概率值】;

  • 第3步:设置ROC曲线时对应的分割点,需要注意的是,分割点一定要设置为放入的对应类别时预测概率值对应的数字。

  • 需要提示的是:预测概率是指某类别的预测概率值,二分类时只有两个数字,比如是和否(数字1和数字0表示),那么‘是’对应的预测概率值即为模型预测出‘是’的概率,‘是’和‘否’的概率加和一定为1。

  • 机器学习算法中保存预测信息具体是什么意思?
  • 如果选中保存预测信息,并且为分类任务时,SPSSAU会新生成两项标题,分别是预测类别和预测概率。预测类别是指最终预测出来Y的类别,预测概率是指预测出Y的每个类别对应的概率情况;事实上某个类别的预测概率相对最大时,此时预测类别就为该类别(比如Y有A/B/C共3个类别,某样本时3个类别的预测概率分别是0.4,0.5,0.1),那么预测类别则为B类别。

  • 预测类别标题名称类似为‘NeutralNetwork_Prediction_****’,以及预测属于每个类别概率标题名类似‘NeutralNetwork_Prediction_probability_****’。

  • 保存预测信息后,可进一步使用预测概率进行其它的分析或者处理,比如绘制ROC曲线等。

  • 为什么没有输出AUC指标及ROC曲线?
  • 如果是分类任务并且为二分类(Y为分类数据且为二分类,且参数上默认或者选择为分类任务),此时SPSSAU默认会输出ROC曲线及AUC指标等。如果是多分类(Y为分类数据且大于两类,且为分类任务),此时AUC指标的意义较小暂未输出,如果有需要,可按下述步骤进行。

  • 第1步:构建模型时先‘保存预测信息’,得到多个标题,每个标题对应1个类别时的预测概率;

  • 第2步:将某个类别(即1个标题)的预测概率作为X,Y为模型构建时的Y,并且ROC曲线时分割点设置为放入的类别项对应的数字;

  • 第3步:多个类别则重复进行多次,即得到每个Y类别标签的ROC曲线和AUC值等。