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. JBOSS未授权访问漏洞利用

    1. 环境搭建 https://www.cnblogs.com/chengNo1/p/14297387.html 搭建好vulhub平台后 进入对应漏洞目录 cd vulhub/jboss/CVE-2 ...

  2. Intellij IDEA 2021.2.3 最新版免费激活教程(可激活至 2099 年,亲测有效)

    ​ 申明,本教程 Intellij IDEA 最新版破解.激活码均收集与网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除.如条件允许,建议大家购买正版. 本教程更新于:2021 年 10 月 ...

  3. HDMI之TMDS通道

    HDMI标准继续沿用了和DVI相同的,由Silicon Image公司发明的TMDS(Time Minimized Differential Signal)最小化传输差分信号传输技术.TMDS是一种微 ...

  4. 《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)

    1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何自动化测试,这一篇宏哥在网上找了一个问卷调查,给小伙伴或童鞋们来演示一下.上 ...

  5. 2021CCPC河南省省赛

    大一萌新,第一次打比赛,虽然是线下赛,但送气球的环节还是很赞的! 这里主要是补一下自己的弱项和考试时没有做出来的题目. 1002(链接之后再放,官方还没公开题目...) 先说一下第二题,这个题一看就是 ...

  6. PE头详细分析

    目录 PE头详细分析 0x00 前言 0x01 PE文件介绍 0x02 PE头详细分析 DOS头解析 NT头解析 标准PE头解析 可选PE头解析 可选PE头结构 基址 代码段地址 数据段地址 OEP程 ...

  7. 第一篇:《Kubernetes 入门介绍》

    前言:本文是一篇 kubernetes(下文用 k8s 代替)的入门文章,将会涉及 k8s 的技术历史背景.架构.集群搭建.一个 Redis 的例子,以及如何使用 operator-sdk 开发 op ...

  8. Java8新特性之方法引用&Stream流

    Java8新特性 方法引用 前言 什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口. 可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常(即:非运行 ...

  9. 庆祝dotnet6,fastgithub送给你

    前言 dotnet6正式发布了,fastgithub是使用dotnet开发的一款github加速器,作为开发者,无人不知github,作为github用户,fastgithub也许是你不可或缺的本机工 ...

  10. 写给初学者的Linux errno 错误码机制

    不同于Java的异常处理机制, 当你使用C更多的接触到是基于错误码的异常机制, 简单来说就是当调用的函数发生异常时, 程序不会跳转到一个统一处理异常的地方, 取而代之的是返回一个整型错误码. 可能会有 ...