【机器学习与R语言】9- 支持向量机
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- 支持向量机的更多相关文章
- (转)R语言 SVM支持向量机在 R 语言中的实现和使用
支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向 ...
- 【机器学习与R语言】13- 如何提高模型的性能?
目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...
- 【机器学习与R语言】1-机器学习简介
目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...
- 【机器学习与R语言】12- 如何评估模型的性能?
目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...
- 【机器学习与R语言】11- Kmeans聚类
目录 1.理解Kmeans聚类 1)基本概念 2)kmeans运作的基本原理 2.Kmeans聚类应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解Km ...
- 【机器学习与R语言】10- 关联规则
目录 1.理解关联规则 1)基本认识 2)Apriori算法 2.关联规则应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解关联规则 1)基本认识 购物 ...
- 【机器学习与R语言】8- 神经网络
目录 1.理解神经网络 1)基本概念 2)激活函数 3)网络拓扑 4)训练算法 2.神经网络应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 1.理解神经网络 1) ...
- 【机器学习与R语言】7-回归树和模型树
目录 1.理解回归树和模型树 2.回归树和模型树应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理解回归树和模型树 决策树用于数值预测: 回归树:基于到达 ...
- 【机器学习与R语言】6-线性回归
目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...
随机推荐
- Codeforces1575D
思路分析 此题采用dfs,注意X选中了之后所有的X值相同,所以需要一个flag来存储X的值. 注意前导0要单独讨论,然后就是当'X'或者'_'在第一位时不能选0,其它位可以选0 - 9 任意一个数. ...
- 技术博客--微信小程序canvas实现图片编辑
技术博客--微信小程序canvas实现图片编辑 我们的这个小程序不仅仅是想给用户提供一个保存和查找的平台,还希望能给用户一个展示自己创意的舞台,因此我们实现了图片的编辑部分.我们对对图片的编辑集成了很 ...
- Python大数据应用
一.三国演义人物出场统计 先检查安装包 1.jieba库基本介绍 (1)jieba库概述 jieba是优秀的中文分词第三方库 中文文本需要通过分词获得单个的词语 jieba是优秀的中文分词第三方库,需 ...
- gawk使用方法简介
转载:gawk 使用方法简介 - 简书 (jianshu.com) gawk 是最初 Unix 系统上 awk 程序的 GNU 版本.相对于作为流式编辑器的 sed 而言,它提供了更为强大的编程语言特 ...
- clone-graph leetcode C++
Clone an undirected graph. Each node in the graph contains alabeland a list of itsneighbors. OJ's un ...
- 树行DP小结
顾名思义:就是在树上做的DP,依据DFS的性质,在访问过儿子之后返回后将儿子的状态传递给父亲... 先看例题: 此题用贪心也能过,不过正解是DP. 对于树上的DP我们可以直接考虑最优解下各点的状态来方 ...
- Luogu P1023 [NOIp2000提高组]税收与补贴问题 | 数学
题目链接 思路:列不等式组,然后解出不等式,得出答案的取值范围,最后取一个绝对值最小的答案就行了. #include<iostream> #include<cstdio> #i ...
- html5的Message信息提示框
1.定义dialog <dialog id="showDialog"> <div>您没有权限访问本页面!</div> </dialog&g ...
- Pycharm的安装简介
Pycharm 1. Pycharm简介 PyCharm是由JetBrains打造的一款Python IDE,VS2010的重构插件Resharper就是出自JetBrains之手.同时支持Googl ...
- Iptables 代理局域网内的主机上网
参考连接:https://developer.aliyun.com/article/607330 环境为云环境,有外网主机的IP为192.168.0.39,无外网主机的IP为192.168.0.228 ...