算法浅谈之支持向量机

一 起因
实际上,除了随机森林外,支持向量机也是一个非常普遍的算法,该算法具有很多优点,比如适用性广(二分类或者多分类)、有效性高(高维空间、非线性问题和小样本学习具有很好的适用性)、很强的鲁棒性(对训练数据中的噪声和异常值具有较强的鲁棒性,减少过拟合的风险,注意,只是减少)、可解释强等(可视化强,这点是许多神经学习算法所不具备的)诸多优点
二 正文
2.1 算法解析
首先,支持向量机实际上是对两组或多组数据,通过建立可分离超平面的方法实现线性可分的。其中的支持向量就是图中的两个点(距离超平面最近的这几个训练样本点),而我们需要做的就是这个max Dist能够达到最大。实际上,那三条直线的角度也是不固定的,算法会通过对角度进行旋转,并计算max Dist,不断的微调模型,从而达到最优。由图中可知,决定模型好坏主要因素就是支持向量的分布,因而异常值和噪音对于模型的影响其实不是很大。

下图是以鸢尾花数据集特征集两个特征的SVM分类结果可视化过程。可以看出,迭代10次之后,两组数据已经可以被线性可分了。
其实,这些都是一种非常理想的状态,但是读者也知道,真实世界中其实没有那么多线性可分的事件,我们常常需要面对的是多维的,且低维空间不可分的数据,为下图,那么,我们就需要借助如核函数等一类的函数将这些数据转换到高维空间进行分类,从而将线性不可分的数据变为线性可分。
但是,这常常会带来维数爆炸的计算困境,因此,数学家开发了一些高级(也就是非专业人士眼中的视若天书的数据公式,笔者也懂的不多)的工具将这类计算变的更为容易。但是,实质都是从不同角度实现两组数据的线性可分。
2.2 算法缺点
数据量大:SVM在大数据量情况下的训练时间较长,计算成本高,这个嘛,我到觉得不是啥大问题。应该如果数据真的异常庞大,那么基本上都会用到深度学习吧,毕竟现在数据越大,深度学习提升的越好。

参数调节难度大:SVM需要调节的参数较多,例如核函数类型、核函数参数和惩罚参数等,需要专业知识和经验支持,也是计算机科学家和数学家擅长做的事情了,而不是半路出家的生信工程师所熟悉的。
对缺失数据敏感:SVM对于数据的缺失和不完整性较为敏感,需要对数据进行预处理和填充,这一部分则涉及到缺失值的填充。
只能处理二分类问题:SVM本质上是一个二分类算法,对于多分类问题需要进行额外的处理,例如使用多个SVM组成分类器,那么算法的时间则是线性增加,如果分类太多,那么很有可能是指数性增加。
三 惯例小结
简单来说,支持向量就是通过算法寻找一条直线,能够使得二分类间的间距最大。而针对线性不可分的数据,我们通过高维计算,实现线性可分。虽然,这其中涉及到许多数据公式,但是,对于一个一般的使用者而言,或许只需要知道其应用的原理以及不可用的情况就可以实现算法为我所用的目的了。
当然了,要感谢那些数学家和计算机科学家,没有他们在计算角度的孜孜不倦,就没有我们在应用角度的踏步前进。
四 公众号其他资源(方便读者使用)
本公众号开发的相关软件,Multi-omics Hammer软件和Multi-omics Visual软件欢迎大家使用。
Multi-omics Hammer软件下载地址:
https://github.com/wangjun258/Multi-omics-Hammer
Multi-omics Visual软件下载地址:https://github.com/wangjun258/Multi_omics_Visual/releases/tag/Multi_omics_Visual_v1.03
PS:因为本软件是用python脚本撰写,调用了部分依赖包,用户首次使用需要安装python以及对应的包,安装之后便可永久使用。
下面是本号在其他平台的账户,也欢迎大家关注并多提意见。
简书:WJ的生信小院
公众号:生信小院
博客园:生信小院
最后,也欢迎各位大佬能够在本平台上:1传播和讲解自己发表的论文;2:发表对某一科研领域的看法;3:想要达成的合作或者相应的招聘信息;4:展示自己以寻找博后工作或者博士就读的机会;5:博导提供博后工作或者博士攻读机会,都可以后台给笔者留言。希望本平台在进行生信知识分享的同时,能够成为生信分析者的交流平台,能够实现相应的利益互补和双赢(不一定能实现,但是梦想总得是有的吧)。
五 封面图



