导言
SVM,Support Vector Machine,支持向量机,属于监督学习,是在深度学习算法流行之前很火的一种机器学习算法。它的数学原理独到,功能强大,曾经一度是各类机器学习算法性能比较的benchmark。直到现在,SVM仍广泛用于学术圈和实业界(本人接触过用SVM对某个城市的数十万中小企业公司,进行分类评估以确定是否给予政策优惠的真实应用)。
和神经网络相比,SVM在拟合非线性的模型时可能会更强大,也更容易理解。不过SVM也有一些不足,比如容易过拟合。
SVM建模的过程即寻找最优模型参数Ɵ的过程。求解通常基于一些成熟的算法包来实现,比如liblinear和libsvm。
1 Stata实现
在Stata中目前通过“svmachines”命令实现。该命令在2016年已通过Stata Journal发布(SJ-16-4,st0416),并在2020年7月做出一些微调。
1.1 “svmachines”命令的下载和安装
“svmachines”命令可以通过在Stata命令窗口中输入“search svmachines”找到,或者直接用“ssc install svmachines”命令进行安装。由于命令附带的子命令、帮助文件和范例do等较多,安装起来比较麻烦。经过笔者本人的多次尝试发现,到SSC的维护方Boston College的网站下载并复制到相应ado文件夹是比较靠谱的做法。具体下载网址是:http://fmwww.bc.edu/RePEc/bocode/s/ --(对应下图中的第3个package,其版本相对更新)。
1.2 “svmachines”命令的语法格式
语法格式如下。根据是否有因变量的信息,可以分为有监督学习和无监督学习两类。
有监督学习:svmachines depvar indepvars [if] [in] [, options]
无监督学习,主要用于寻找异常值:svmachines indepvars [if] [in], type(one_class) [options]
这里的“one_class”类型的建模专用于对数据进行无监督学习分类。即数据只有一类,并存在部分离群(异常)值。另外SVM建模涉及的全部变量必须是数字型(numeric)--如果是分类型变量,则需要在建模之前编码(encode命令)。因变量可以使用因子变量(factor variables)方法,如加上前缀i.和c.。(注意:这里的因子变量的说法只针对Stata,和R语言中的factor variable有不同。)
1.3选项和参数说明
“svmach