在kyphosis数据集建立支持向量机分类器

1.  e1701简介

R语言的e1071包提供了对libsvm的接口。库libsvm包括了常用的核,如线性,多项式,RBF,sigmoid等。多分类通过一对一的投票机制(one-against-one voting scheme)而实现。predict()是训练函数,plot()可视化数据,支持向量,决策边界(如果提供的话)。参数调整tune()。

用e1071包中svm函数可以得到与libsvm相同的结果。write.svm()更是可以把R训练得到的结果写为标准的Libsvm格式,以供其他环境下libsvm的使用。下面我们来看看svm()函数的用法。有两种格式都可以。

svm(formula,data=NULL,…,subset,na.action=na.omit,sacle=TRUE) 或者

svm(x, y = NULL, scale = TRUE, type = NULL, kernel = "radial", degree = 3, gamma = if (is.vector(x)) 1 else 1 / ncol(x), coef0 = 0, cost = 1, nu = 0.5, class.weights = NULL, cachesize = 40, tolerance = 0.001, epsilon = 0.1, shrinking = TRUE, cross = 0, probability = FALSE, fitted = TRUE, ..., subset, na.action = na.omit)

【主要参数说明】 

    formula:分类模型形式,在第二个表达式中可以理解为y~x,即y相当于标签,x相当于特征(变量) 。

    data:   
数据框。

    subset: 可以指定数据集的一部分作为训练数据。 na.cation:缺失值处理,默认为删除缺失数据。

    scale:    将数据标准化,中心化,使其均值为0,方差为1,将自动执行。

    type:    svm的形式。可分为:C-classification ,nu-classification,

one-classification (for novelty detection) ,eps-regression, nu-regression 五种形式。后面两者为做回归时用到。默认为C分类器。

    kernel:在非线性可分时,我们引入核函数来做。R中提供的核函数如下:

    线性核: :  u‘*v

    多项式核: (gamma*u‘*v + coef0)^degree

    高斯核:   exp(-gamma*|u-v|^2)

    sigmoid核:tanh(gamma*u‘*v + coef0)

    默认为高斯核。顺带说一下,在kernel包中可以自定义核函数。

    degree:        多项式核的次数,默认为3

    gamma:       除去线性核外,其他核的参数,默认为1/数据维数

    coef0:         
多项式核与sigmoid核的参数,默认为0.

    cost:             
C分类中惩罚项c的取值

    nu:                
Nu分类,单一分类中nu的值

    cross:           
做k折交叉验证,计算分类正确性。

2. 对rpart包中的 kyphosis数据集建立支持向量机分类器

2.1 使用svm默认的参数在kyphosis数据集上建立支持向量机分类器

> library(e1071)

> library(rpart)

> kyphosis.svmmodel<- svm(Kyphosis~.,data = kyphosis)

> summary(kyphosis)

图2-1 建立支持向量机分类器

kyphosis数据集是rpart自带的数据集,kyphosis是描述儿童纠正脊柱手术数据集,一共有4个变量。根据变量的英文名称,可以了解到这是以驼背、年龄、编号、开始时间为变量的数据集,一共有81行数据。

图2-2 svm分类器的描述

该模型使用了svm()默认的C分类形式,惩罚项默认为1,核函数是radial,其他核的参数gamma默认为1/数据维数,即1/3,支持向量(支持平面上的样本点)的数目一共39个。

经过十折交叉验证得到总体精确率:77.77778

> pre.svm <-predict(kyphosis.svmmodel, kyphosis)

> table(pre.svm,kyphosis$Kyphosis)

图2-3

使用所建模型对样本进行预测,发现absent一项错分了9个样本。

结合10-折交叉验证得到的总体精确率77.77778。我们发现这一个模型并不够优。

2.2 对模型的修改

惩罚因子表示对错分的点加入多少惩罚,当C越大时,分错的点就会更少,但是过拟合的情况可能会比较严重;当C过小时,过拟合的情况相对不严重,但分错的点可能会比较多,模型的准确性将会下降。

将惩罚项cost由默认的1修改2.5。

>  kyphosis.svmmodel <- svm(Kyphosis~.,data =kyphosis,cost = 2.5,cross = 10)

> summary(kyphosis.svmmodel)

图2-4

图2-5

可以看到尽管10-折交叉验证的准确率上升至81.48148,但是仍有8个样本分错。

图2-6

将gamma系数由1/3改为3,将cost改为4得到新的模型。对数据即进行预测发现正确率为100%。

然而10-折交叉验证显示整体准确率为79.01235,比gamma = 1/3,cost=2.5还要低。这说明惩罚因子C可能取得有些大,出现了过拟合的情况。

时间: 2024-12-04 22:55:21

在kyphosis数据集建立支持向量机分类器的相关文章

分类问题(一)MINST数据集与二元分类器

分类问题 在机器学习中,主要有两大类问题,分别是分类和回归.下面我们先主讲分类问题. MINST 这里我们会用MINST数据集,也就是众所周知的手写数字集,机器学习中的 Hello World.sk-learn 提供了用于直接下载此数据集的方法: from sklearn.datasets import fetch_openml minst = fetch_openml('mnist_784', version=1) minst.keys() >dict_keys(['data', 'targe

R语言randomForest包实现随机森林——iris数据集和kyphosis数据集

library(randomForest)model.forest<-randomForest(Species~.,data=iris)pre.forest<-predict(model.forest,iris)table(pre.forest,iris$Species) library(rpart)library(randomForest)model.forest<-randomForest(Kyphosis~.,data=kyphosis)pre.forest<-predict

支持向量机通俗导论

支持向量机通俗导论(理解SVM的三层境界) 作者:July .致谢:pluskid.白石.JerryLead.说明:本文最初写于2012年6月,而后不断反反复复修改&优化,修改次数达上百次,最后修改于2016年11月. 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清楚,尽管网上已经有朋友写得不错了(见文末参考链接),但在描述数学公式的时候还是显

支持向量机通俗导论(理解SVM的三层境界)

作者:July.pluskid :致谢:白石.JerryLead 出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清楚,尽管网上已经有朋友写得不错了(见文末参考链接),但在描述数学公式的时候还是显得不够.得益于同学白石的数学证明,我还是想尝试写一下,希望本文在兼顾通俗易懂的基础上,真真正正能足以成为一篇完整概括和介

斯坦福第十二课:支持向量机(Support Vector Machines)

12.1  优化目标 12.2  大边界的直观理解 12.3  数学背后的大边界分类(可选) 12.4  核函数 1 12.5  核函数 2 12.6  使用支持向量机 12.1  优化目标 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法 A 还是学习算法 B,而更重要的是, 应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平.比 如:你为学习算法所设计的特征量的选择,以及如何选择正则化参数,

支持向量机入门到精通

转自:http://blog.csdn.net/macyang/article/details/38782399 第一层.了解SVM 1.0.什么是支持向量机SVM 要明白什么是SVM,便得从分类说起. 分类作为数据挖掘领域中一项非常重要的任务,它的目的是学会一个分类函数或分类模型(或者叫做分类器),而支持向量机本身便是一种监督式学习的方法(至于具体什么是监督学习与非监督学习,请参见此系列Machine L&Data Mining第一篇),它广泛的应用于统计分类以及回归分析中. 支持向量机(SV

支持向量机通俗导论(理解SVM的三层境地)

支持向量机通俗导论(理解SVM的三层境地) 作者:July :致谢:pluskid.白石.JerryLead.出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因非常简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清楚,尽管网上已经有朋友写得不错了(见文末參考链接),但在描写叙述数学公式的时候还是显得不够.得益于同学白石的数学证明,我还是想尝试写一下,希望本文在兼顾通

简介支持向量机热门(认识SVM三位置)

支持向量机通俗导论(理解SVM的三层境地) 作者:July .致谢:pluskid.白石.JerryLead.出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因非常简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清楚.尽管网上已经有朋友写得不错了(见文末參考链接),但在描写叙述数学公式的时候还是显得不够.得益于同学白石的数学证明,我还是想尝试写一下.希望本文在兼顾通

在R中使用支持向量机(SVM)进行数据挖掘(上)

在R中,可以使用e1071软件包所提供的各种函数来完成基于支持向量机的数据分析与挖掘任务.请在使用相关函数之前,安装并正确引用e1071包.该包中最重要的一个函数就是用来建立支持向量机模型的svm()函数.我们将结合后面的例子来演示它的用法. 下面这个例子中的数据源于1936年费希尔发表的一篇重要论文.彼时他收集了三种鸢尾花(分别标记为setosa.versicolor和virginica)的花萼和花瓣数据.包括花萼的长度和宽度,以及花瓣的长度和宽度.我们将根据这四个特征来建立支持向量机模型从而