附注:不要问我为什么写这么快,是16年写的。

1.名词解释

支持向量机中的机:在机器学习领域,常把一些算法看做一个机器,如分类机(也叫作分类器)

2.问题描述

空间中有很多已知类别的点,现在想用一个面分开他们,并能对未知类别的点很好的识别类别。

3.算法思想

由问题描述可知,现在算法要解决两个问题:

  1. 找到一个平面,可以很好的区分不同类别的点,即使分类器的训练误差小,线性可分时要求训练误差为0。

  2. 很好的识别未知类别样本的类别,即多大程度上信任该分类器在未知样本上分类的效果。

令满足以上两点的超平面方程为:

图1 画图展示

4.公式推导

这里接着上一步,公式推导如何求w和b,下图2所示。

图2 公式推导

5.程序实现(案例)

案例介绍:用体重和心脏重量来预测一只猫的性别。

语言:R语言,可在线安装e1071包,亦可在libsvm网站下载后安装程序包。

网址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/

#数据集来自MASS包的cats数据集
#下面的程序将实现用体重和心脏重量来预测一只猫的性别
library(e1071)
data(cats,package="MASS")
summary(cats)
inputData=data.frame(cats[, c (2,3)], Sex= as.factor(cats$Sex))
train=inputData[1:108,]#训练集
test=inputData[109:144,]#测试集
#初步建模
x=train[,-3]
y=train[,3]
#核函数选择高斯核函数
model1=svm(x,y,kernel='radial',gamma=if(is.vector(x)) 1 else1/ncol(x))
#计算训练误差,结果显示有14个样本类别错误
z=test[,-3]
zy=test[,3]
zy=as.integer(zy)
pred1=predict(model1,x)
table(pred1,y)
#优化模型
attach(train)#将数据集train按列单独确认为向量
type=c("C-classification","nu-classification","one-classification")
kernel=c("linear","polynomial","radial","sigmoid")
pred2=array(0,dim=c(108,3,4))
accuracy=matrix(0,3,4)
yy=as.integer(y)
for(i in 1:3)
{
for(j in 1:4)
{
pred2[,i,j]=predict(svm(x,y,type=type[i],kernel=kernel[j]),x)
if(i>2) accuracy[i,j]=sum(pred2[,i,j]!=1)
else accuracy[i,j]=sum(pred2[,i,j]!=yy)
}
}
#12种组合算法在训练集上的误差
wrong=matrix(0,3,4)
for(i in 1:3)
{
for(j in 1:4)
{
wrong[i,j]=mean(yy != pred2[,i,j])#错误率占比
}
}
#选择训练集上误差最小的三种组合,计算在测试集上的误差,三种组合在训练集上的错误率分别为0.241,0.259,0.278;三种组合分别是nu-classification+radial、C-classification+linear组合和C-classification+radial组合。
pred3=array(0,dim=c(108,3,4))
for(i in 1:3)
{
for(j in 1:4)
{
pred3[,i,j]=predict(svm(x,y,type=type[i],kernel=kernel[j]),z)
if(i>2) accuracy[i,j]=sum(pred3[,i,j]!=1)
else accuracy[i,j]=sum(pred3[,i,j]!=yy)
}
}
mean(zy != pred3[,2,3])
mean(zy != pred3[,1,1])
mean(zy != pred3[,1,3])
#计算结果分别为0.417,0,0
#在测试集上错误率为0的两种算法分别是C-classification+linear组合和C-classification+radial组合。

end!

支持向量机(SVM)理论总结系列.线性可分(附带R程序案例:用体重和心脏重量来预测一只猫的性别)的更多相关文章

  1. 更新几篇之前写在公众号上的文章:线性可分时SVM理论推导;关联分析做捆绑销售和推荐;分词、去停用词和画词云

    适合阅读人群:有一定的数学基础. 这几篇文章是16年写的,之前发布在个人公众号上,公众号现已弃用.回过头来再看这几篇文章,发现写的过于稚嫩,思考也不全面,这说明我又进步了,但还是作为学习笔记记在这里了 ...

  2. 统计学习:线性支持向量机(SVM)

    学习策略 软间隔最大化 上一章我们所定义的"线性可分支持向量机"要求训练数据是线性可分的.然而在实际中,训练数据往往包括异常值(outlier),故而常是线性不可分的.这就要求我们 ...

  3. 以图像分割为例浅谈支持向量机(SVM)

    1. 什么是支持向量机?   在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...

  4. 机器学习(二)—支持向量机SVM

    1.SVM的原理是什么? SVM是一种二类分类模型.它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器.(间隔最大是它有别于感知机) 试图寻找一个超平面来对样本分割,把样本中的正例和反例 ...

  5. 支持向量机SVM基本问题

    1.SVM的原理是什么? SVM是一种二类分类模型.它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器.(间隔最大是它有别于感知机) 试图寻找一个超平面来对样本分割,把样本中的正例和反例 ...

  6. 支持向量机SVM——专治线性不可分

    SVM原理 线性可分与线性不可分 线性可分 线性不可分-------[无论用哪条直线都无法将女生情绪正确分类] SVM的核函数可以帮助我们: 假设‘开心’是轻飘飘的,“不开心”是沉重的 将三维视图还原 ...

  7. OpenCV支持向量机SVM对线性不可分数据的处理

    支持向量机对线性不可分数据的处理 目标 本文档尝试解答如下问题: 在训练数据线性不可分时,如何定义此情形下支持向量机的最优化问题. 如何设置 CvSVMParams 中的参数来解决此类问题. 动机 为 ...

  8. 线性可分支持向量机与软间隔最大化--SVM(2)

    线性可分支持向量机与软间隔最大化--SVM 给定线性可分的数据集 假设输入空间(特征向量)为,输出空间为. 输入 表示实例的特征向量,对应于输入空间的点: 输出 表示示例的类别. 我们说可以通过间隔最 ...

  9. 线性可分支持向量机--SVM(1)

    线性可分支持向量机--SVM (1) 给定线性可分的数据集 假设输入空间(特征向量)为,输出空间为. 输入 表示实例的特征向量,对应于输入空间的点: 输出 表示示例的类别. 线性可分支持向量机的定义: ...

随机推荐

  1. C语言-switch语句

    switch (表达式的值) { case 1: 语句1 break; case 2: 语句2 break; case 3: 语句3 break; case 4: 语句4 break; ...... ...

  2. xml的生成和发送

    s2014-04-07 10:01:05 之前学的是解析,现在需要生成xml, 然后利用蓝牙或者wifi发送到服务器 2014-04-07 10:36:34 采用dom4j创建xml报错 后来发现安卓 ...

  3. ExportExcel

    package cn.com.jansh.core.util; import java.awt.print.Book; import java.io.BufferedInputStream; impo ...

  4. 论MySQL数据库中两种数据引擎的差别

    InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定. 基本的差别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持. MyISAM类型的表强 ...

  5. CSS3 :target伪类的理解与使用

    CSS3 :target伪类用来改变页面中锚链接URL所指向的ID元素的样式,例如你要改变描链接指向#tab的元素字体颜色为蓝色,哪么你可以这样写成#tab:target {color:blue} 浏 ...

  6. iOS 之 const

    const int a与 int const a一样. const int *a ;//指针可以修改,指向常整形的指针 int* const a;// 常指针, int* 作为一个整体被限制, 所以指 ...

  7. IndexAction.java (Java之负基础实战)

    生成Get and Set 方法: 例如:public String view; 右击view > Source > Generate Getters and Setters...

  8. 负载均衡 Lvs DR 模式笔记

    先来一张原理图,相当于ip-tun模式把tunl0的那块网卡配置在eth0:0的这个接口上,避免了兼容性的问题

  9. spring mvc在Controller中获取ApplicationContext

    spring mvc在Controller中获取ApplicationContext web.xml中进行正常的beans.xml和spring-mvc.xml的配置: 需要在beans.xml中进行 ...

  10. PHP Memcached 实现简单数据库缓存

    Memcache常用方法 Memcache::add — 添加一个值,如果已经存在,则返回false Memcache::addServer — 添加一个可供使用的服务器地址 Memcache::cl ...