首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SVM算法的软件实现

上篇文章我们介绍了 研究方案和主要结果与结论,本文我们将简单介绍一下SVM及其原理,详细介绍如何用R软件实现支持向量机(SVM)算法,同时介绍文章中采用的模型评价指标的计算方法,ROC曲线的绘制等。

什么是SVM?

支持向量机是一种分类器。之所以称为“机”是因为它会产生一个二值决策结果,即它是一种决策“机”。

SVM原理简介

首先,我们先看图1框A,能否画出一条直线将圆形点和方形点分开呢?框B、C、D各自给出了一条可以将两类数据分开的线,但是其中哪一条最好呢?

图1-4 A框中给出了一个线性可分的数据集,B、C、D框中各自给出了一条可以将两类数据分开的直线

超平面:二维平面中将数据集分隔开来的直线称为分隔超平面。如果数据集是1024维的,那么就需要一个1023维的某某对象来对数据进行分隔。该对象被称为超平面(hyperplane),也就是分类的决策边界。

我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能地远。这里点到分隔超平面的距离被称为间隔(margin)。

支持向量(support vector):就是离分隔超平面最近的那些点。

接下来我们只要找到“最大化支持向量到分隔超平面的距离”的优化求解方法就可以了。下面这段数学求解算法,若不感兴趣可以跳过。

这就转化为求解所有的alpha(α),分隔超平面可以通过这些alpha来表达。因此,SVM的主要工作就是求解这些alpha。

核函数又是什么?

我们再看图2,数据点处于一个圆中,但是这个数据在二维平面中很难用一条直线分隔,此时我们或许可以对圆中的数据进行某种形式的转换,从而得到一些新的变量来表示数据。这一过程称之为从一个特征空间到另一个特征空间的映射。我们可以把核函数想象成一个包装器或者是接口,它能把数据从某个很难处理的形式转换成另一个较容易处理的形式。

图2 这个数据在二维平面中很难用一条直线分隔,不过很明显,这里存在分隔方形点和圆形点的模式。

支持向量机中最常使用的是高斯核函数(即径向基函数,radial basis function),形式如下:

该函数也可以用于许多其他的数据集,并且也能得到低错误率的结果。

SVM算法的软件实现

《机器学习实战》这本书给出的是Python代码,可能很多人不太熟悉。下面我将采用R语言的e1071包来实现SVM结果。同时采用ROCR包绘制ROC曲线评价模型效果。

首先读取数据,并将待预测变量因子化:

将数据集以2:1的比例分成训练集和测试集,设置种子数是为了数据可溯源:

接着,采用SVM算法在训练集(train)中建模,模型一以3个自变量预测y,模型二以8个自变量预测y,然后在验证集(valid)中评估两个模型的预测效果:

模型二的程序同模型一,此处略。最后描述两模型在验证集中的预测效果——绘制ROC曲线:

除了AUC值,performance函数也同样可以导出灵敏度、特异度、阳性预测值、阴性预测值、总体准确度等指标,后续会有文章专门介绍筛选试验的评价指标,这里先不做介绍。

本研究基于PSA筛查项目和多参数-MRI数据,采用一种机器学习算法来明确穿刺前多参数-MRI对前列腺癌的诊断效能。这篇文章很好的回答了两个问题:①联合临床信息和MRI结果能提高前列腺癌的诊断效能,尤其是在第一年内预测准确率达到92.8%;②由于其较高的阳性预测值和阴性预测值,盆腔MRI可以作为PSA升高患者初诊的首选检查项目。

参考文献:

Wang R, Wang J, Gao G et al. Prebiopsy mp-MRI Can Helpto Improve the Predictive Performance in Prostate Cancer: A Prospective Studyin 1,478 Consecutive Patients. Clin Cancer Res 2017; 23: 3692-3699.

[美]Peter Harrington 著李锐李鹏曲亚东王斌译《机器学习实战》(《Machine Learning in Action》)第六章支持向量机 p89-114.

医统家园

我们不生产数据,

我们只是数据的挖掘机!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180308G1257S00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券