1.理解支持向量机(SVM)

1)SVM特点

  • 支持向量机和神经网络都是“黑箱模型”的代表:潜在的模型基于复杂的数学系统,而且结果难以解释。
  • SVM的目标是创建一个平面边界(“超平面”),使得任何一边的数据划分都是均匀的。结合了kNN和线性回归。
  • 几乎适用于所有的学习任务,包括分类和数值预测。

2)用超平面分类

  • 线性可分:可以由一条直线或一个平面进行划分

  • 最大间隔超平面(MMH):很多线都能对数据点进行分类,但要寻找能使类形成最大间隔的那条线(因为在边界附近点位置的微小变化可能导致某些点落在线之外),支持向量就是每个类中最接近最大间隔超平面的点。所以单独使用支持向量,就能定义最大间隔超平面。

  • 线性可分条件下,最大间隔超平面要尽可能远离两组数据点的外边界(“凸包”),最大间隔超平面就是两个凸包之间的最短距离直线的垂直平分线,可通过“二次优化”算法实现。

  • 非线性可分:数据不是线性可分的条件下,使用一个“松弛变量”来创建一个软间隔,允许一些点落在线不正确的一边。

  • 非线性可分中的成本参数C:即所有违反约束的点,试图使总成本最小,而非寻找最大间隔。修改C将调整对于落在超平面错误一边的案例的惩罚。C越大,实现100%分离的优化就越困难。较小的C将把重点放在更宽的整体边缘。

3)对非线性空间使用核函数

  • 另一种处理非线性问题的方法,就是使用“核技巧”的处理将问题映射到一个更高维的空间,这样非线性关系可能会变为完全线性。

  • 从本质上讲,核技巧涉及一个添加能够表述度量特征之间数学关系新特征的过程。
  • 非线性核SVM的特点:

  • 核函数:线性核函数(特征的点积),多项式核函数(加一个非线性数据变换),S形核函数(类似神经网络的S形激活函数),高斯RBF核函数(类似RBF神经网络)。多数情况下,核函数的选择是任意的,因为性能可能只有轻微的变化。

2. 支持向量机应用示例

使用SVM进行光学字符识别(OCR图像处理):通过将印刷或手写文本转换为电子形式,保存在数据库种来处理纸质文件。

难点:

  • 图像的规则模式很难严格定义
  • 图像数据往往是噪声数据

1)收集数据

数据集包含26个大写英文字母的2000个案例,使用20种不同的随机重塑和扭曲的黑斯和白色字体印刷。

假设当图像字符被扫描到计算机,转换为像素,有16个统计属性(如水平垂直尺寸,黑色像素比例等)。

数据下载:

链接: https://pan.baidu.com/s/1q8zHWkMZcapwnX90PA4hOg 提取码: eaqt

2)探索和准备数据

SVM需要所有特征都是数值型的,而且每一个特征需要缩小到一个相当小的区间内。所以不要有因子,而且要做标准化。这里略过没做。

## Example: Optical Character Recognition ----

## Step 2: Exploring and preparing the data ----
# read in data and examine structure
letters <- read.csv("letterdata.csv")
str(letters) # divide into training and test data
letters_train <- letters[1:16000, ] #80%
letters_test <- letters[16001:20000, ] #20%

3)训练数据

SVM的R包有e1071,klaR和kernlab等,这里用kernlab(与caret连用,允许SVM使用各种自动化方法进行训练和评估)。

kernlab::ksvm(target~predictors,
data=mydata,
kernel="rbfdot", #隐非线性映射,rbfdot/polydot/tanhdot/vanilladot
c=1) #违法约束条件的惩罚,较大的c值导致较窄的边界

训练:

## Step 3: Training a model on the data ----
# begin by training a simple linear SVM
library(kernlab)
letter_classifier <- ksvm(letter ~ ., data = letters_train,
kernel = "vanilladot") #默认使用高斯RBF核函数,这里用线性函数 # look at basic information about the model
letter_classifier

4)评估模型

letter_predictions <- predict(letter_classifier, letters_test)

head(letter_predictions)

table(letter_predictions, letters_test$letter)

# look only at agreement vs. non-agreement
# construct a vector of TRUE/FALSE indicating correct/incorrect predictions
agreement <- letter_predictions == letters_test$letter
table(agreement)
prop.table(table(agreement))



识别的准确度大概为84%。

5)提高性能

可以使用一个更复杂的核函数,将数据映射到更高维的空间,获得一个较好的模型拟合度。如试试高斯RF核函数,或者修改成本约束参数C值来修正决策边界的宽度。

## Step 5: Improving model performance ----
set.seed(12345)
letter_classifier_rbf <- ksvm(letter ~ ., data = letters_train, kernel = "rbfdot") #高斯RBF核函数
letter_predictions_rbf <- predict(letter_classifier_rbf, letters_test) agreement_rbf <- letter_predictions_rbf == letters_test$letter
table(agreement_rbf)
prop.table(table(agreement_rbf))

训练时间更长,将准确度提高到了93%。


机器学习与R语言系列推文汇总:

【机器学习与R语言】1-机器学习简介

【机器学习与R语言】2-K近邻(kNN)

【机器学习与R语言】3-朴素贝叶斯(NB)

【机器学习与R语言】4-决策树

【机器学习与R语言】5-规则学习

【机器学习与R语言】6-线性回归

【机器学习与R语言】7-回归树和模型树

【机器学习与R语言】8-神经网络

【机器学习与R语言】9-支持向量机

【机器学习与R语言】10-关联规则

【机器学习与R语言】11-Kmeans聚类

【机器学习与R语言】12-如何评估模型的性能?

【机器学习与R语言】13-如何提高模型的性能?

【机器学习与R语言】9- 支持向量机的更多相关文章

  1. (转)R语言 SVM支持向量机在 R 语言中的实现和使用

    支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向 ...

  2. 【机器学习与R语言】13- 如何提高模型的性能?

    目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...

  3. 【机器学习与R语言】1-机器学习简介

    目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...

  4. 【机器学习与R语言】12- 如何评估模型的性能?

    目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...

  5. 【机器学习与R语言】11- Kmeans聚类

    目录 1.理解Kmeans聚类 1)基本概念 2)kmeans运作的基本原理 2.Kmeans聚类应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解Km ...

  6. 【机器学习与R语言】10- 关联规则

    目录 1.理解关联规则 1)基本认识 2)Apriori算法 2.关联规则应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解关联规则 1)基本认识 购物 ...

  7. 【机器学习与R语言】8- 神经网络

    目录 1.理解神经网络 1)基本概念 2)激活函数 3)网络拓扑 4)训练算法 2.神经网络应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 1.理解神经网络 1) ...

  8. 【机器学习与R语言】7-回归树和模型树

    目录 1.理解回归树和模型树 2.回归树和模型树应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理解回归树和模型树 决策树用于数值预测: 回归树:基于到达 ...

  9. 【机器学习与R语言】6-线性回归

    目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...

随机推荐

  1. Codeforces1575D

    思路分析 此题采用dfs,注意X选中了之后所有的X值相同,所以需要一个flag来存储X的值. 注意前导0要单独讨论,然后就是当'X'或者'_'在第一位时不能选0,其它位可以选0 - 9 任意一个数. ...

  2. Coursera Deep Learning笔记 序列模型(一)循环序列模型[RNN GRU LSTM]

    参考1 参考2 参考3 1. 为什么选择序列模型 序列模型能够应用在许多领域,例如: 语音识别 音乐发生器 情感分类 DNA序列分析 机器翻译 视频动作识别 命名实体识别 这些序列模型都可以称作使用标 ...

  3. 架构师之路-https底层原理

    引子 先说说我对架构师的理解.从业务能力上,需要的是发现问题和解决问题的能力:从团队建设上,需要的是能培养团队的业务能力:从项目管理上,把控好整个项目和软件产品的全生命周期. 我搜索了一下架构师的培训 ...

  4. 2021CCPC网络赛(重赛)题解

    自己还是太菜了,五个小时一个题也没磕出来,还是队友牛逼!... Primality Test 先看这个题,可能一上去就被\(\frac{f(x)+f(f(x))}{2}\)向下取整吓住了,但仔细想想, ...

  5. 开发笔记----- python3 小甜点

    一.字典内容排序 1.根据 值大小排序,默认reverse=False:从小到大排序,True:从大到小排序.例: >>> dic1 = {'a1':4,'b1':12,'c1':1 ...

  6. Docker 制作Nginx镜像

    参考文章:https://www.jianshu.com/p/dc4cd0547d1e 镜像的制作方式有两种,一种是下载别人的镜像之后再制作成自己的镜像,一种是从头开始制作自己的镜像 第一种,下载别人 ...

  7. 转向系统的传递路径分析(Transfer Path Analysis)入门的一些分享

    分享一些自己对于<转向系统><传递路径分析>的理解 (只是一些个人理解,不涉及任何公司隐私问题,logo就懒得一个个去擦了) (1) (2) (3) (4) (5) (6) ( ...

  8. Java操作MongoDB之mongodb-driver(一)

    1. mongodb-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动. (1)通过maven仓库导入:https://mvnrepository.com/ar ...

  9. 攻防世界 WEB 高手进阶区 unserialize3 Writeup

    攻防世界 WEB 高手进阶区 unserialize3 Writeup 题目介绍 题目考点 PHP反序列化 __wakeup漏洞 Writeup 题名 unserialize 是反序列化函数名 了解一 ...

  10. 访问kubernetes CRD的几种方式

    访问kubernetes CRD的几种方式 最近在使用代码操作VictoriaMetrics Operator的CRD资源的过程中,探究了集中访问CRD资源的方式.下面以VictoriaMetrics ...