支持向量机与PCA

支持向量机

支持向量机(Support Vector Machine,SVM)属于有监督学习模型,主要用 于解决数据分类问题。通常SVM用于二元分类问题,对于多元分类可将其分 解为多个二元分类问题,再进行分类,主要应用场景有图像分类、文本分 类、面部识别和垃圾邮件检测等领域。 • 本章共划分为两个小节,分别介绍支持向量机模型的基础以及支持向量机 的应用过程

章节结构

支持向量机模型

– 核函数

– 模型原理分析

• 支持向量机应用

– 基于SVM进行新闻主题分类

– 基于支持向量机和主成分分析的人脸识

一个例子:青光眼诊断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xgw0HyQ-1655199693713)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230620002.png)]

图中“+”表示开角型青光眼样本点,“〇 ”表示闭角型青光眼型样本点。样本数据相 互交叉较多,不易进行线性可分.

支持向量机模型

支持向量机在高维或无限维空间中构造超平面或超平面集合,将原有限维 空间映射到维数高得多的空间中,在该空间中进行分离可能会更容易。它 可以同时最小化经验误差和最大化集合边缘区,因此它也被称为最大间隔 分类器。直观来说,分类边界距离最近的训练数据点越远越好,因为这样 可以缩小分类器的泛化误差。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPGIDPXh-1655199693714)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230702801.png)]

模型基本思想

以一个二元分类问题为例讲解模型原理。首先假设有两类数据,如图需要 找出一条边界来将两类数据分隔开来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XrYYGiCx-1655199693714)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230729348.png)]

一般说来,需要选择的是具有较强分类能力的直线,有较稳定的分类结果 和较强的抗噪能力,比如在数据集扩展之后如下图所示。在这三种分隔方 式中,b的分隔效果更好.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCQWgZu5-1655199693715)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230751250.png)]

找到最优分类数据的分界线,使得对样本数据的分类效果更好的方法就是 要尽可能地远离两类数据点,即数据集的边缘点到分界线的距离d最大,这 里虚线穿过的边缘点称作支持向量,分类间隔为2d。如下图所示.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-suxY0jPd-1655199693715)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230809026.png)]

支持向量机原理

SVM是从线性可分情况下的最优分类面发展而来的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2EyUjnf-1655199693715)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230831696.png)]

容易看出,最优化目标就是最大化几何间隔,并且注意到几何间隔与 ‖w ‖ 反比,因此只需寻找最小的‖w ‖,即

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHXibhsz-1655199693715)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230905733.png)]

对于这个目标函数,可以用一个等价的目标函数来替代:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FXjh15zy-1655199693716)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230913898.png)]

为使分类对所有样本正确分类,要求满足如下约束:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ptt10gQp-1655199693716)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230928779.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D4mX60qh-1655199693716)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230944053.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-khpLqzOL-1655199693717)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606230954784.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9iQDY90-1655199693717)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606231003710.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wIXyzKjF-1655199693717)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606231045123.png)]核函数

支持向量机通过线性变换A(x)将输入空间X映射到高维特征空间Y,如果低维 空间存在函数K,x,y∈X,使得K(x,y)=A(x)·A(y),则称K(x,y)为核函数。核函数 方法可以与不同的算法相结合,形成多种不同的基于核函数的方法,常用 的核函数有:

– 线性核函数

– 多项式核函数

– 径向基核函数

– Sigmoid核

线性核函数

线性核函数(Linear Kernel)是最简单的核函数,主要用于线性可分的情况, 表达式如下:

K(x,y) = x·y+c

其中c是可选的常数。线性核函数是原始输入空间的内积,即特征空间和输 入空间的维度是一样的,参数较少运算速度较快。适用的情景是在特征数 量相对于样本数量非常多时。

多项式核函数

多项式核函数(Polynomial Kernel)是一种非稳态核函数,适合于正交归一化 后的数据,表达式如下:

K(x,y) = [a·x·y+c] d

其中a是调节参数,d是最高次项次数,c是可选的常数。

径向基核函数

径向基核函数(Radial Basis Function Kernel)具有很强的灵活性,应用广泛。 与多项式核函数相比参数较少。因此大多数情况下都有较好的性能。径向 基核函数类似于高斯函数,所以也被称为高斯核函数。在不确定用哪种核 函数时,可优先验证高斯核函数。表达式如下:

K(x,y) = exp{-[(||x-y||2 )/(2·a2 )]}

其中a 2越大。高斯核函数就会变得越平滑,此时函数随输入x变化较缓慢 ,模型的偏差和方差大,泛化能力差,容易过拟合。 a 2越小,高斯核函 数变化越剧烈,模型的偏差和方差越小,模型对噪声样本比较敏感.

Sigmoid核

Sigmoid核(Sigmoid Kernel)来源于MLP中的激活函数,SVM使用Sigmoid相当于 一个两层的感知机网络,表达式如下:

K(x,y) = tanh(a·x·y+c)

其中a表示调节参数,c为可选常数,一般情况c取1/n,n是数据维度.

支持向量机应用

支持向量机(SVM)算法比较适合图像和文本等样本特征较多的应用场合。 基于结构风险最小化原理,对样本集进行压缩,解决了以往需要大样本数 量进行训练的问题。它将文本通过计算抽象成向量化的训练数据,提高了 分类的精确率.

基于支持向量机和主成分分析的人脸识别

主成分分析(Principal Component Analysis , PCA)是一种降维方法,可以从 多种特征中解析出主要的影响因素,使用较少的特征数量表示整体。PCA的 目标就是找到方差大的维度作为特征。本案例可以被划分为六个步骤:

– 获取数据集

– 将图片转化为可处理的n维向量

– 分割数据集

– PCA主成分分析,降维处理

– 支持向量机分类

– 查看训练后的分类结果

主成分分析

主成分分析是最常用的线性降维方法,它的目标是通过某种线性投影,将 高维的数据映射到低维的空间中,并期望在所投影的维度上数据的方差最 大,以此使用较少的维度,同时保留较多原数据的维度 • 尽可能如果把所有的点都映射到一起,那么几乎所有的区分信息都丢失了 ,而如果映射后方差尽可能的大,那么数据点则会分散开来,特征更加明 显。PCA是丢失原始数据信息最少的一种线性降维方法,最接近原始数据 • PCA算法目标是求出样本数据的协方差矩阵的特征值和特征向量,而协方差 矩阵的特征向量的方向就是PCA需要投影的方向。使样本数据向低维投影后 ,能尽可能表征原始的数据。协方差矩阵可以用散布矩阵代替,协方差矩 阵乘以(n-1)就是散布矩阵,n为样本的数量。协方差矩阵和散布矩阵都是 对称矩阵,主对角线是各个随机变量(各个维度)的方差.

设有m条n维数据,PCA的一般步骤如下

– 将原始数据按列组成n行m列矩阵X

– 计算矩阵X中每个特征属性(n维)的平均向量M(平均值)

– 将X的每行(代表一个属性字段)进行零均值化,即减去M – 按照公式𝐶 = 1 m 𝑋𝑋 𝑇求出协方差矩阵

– 求出协方差矩阵的特征值及对应的特征向量

– 将特征向量按对应特征值从大到小按行排列成矩阵,取前k(k < n)行组成基向量P

– 通过𝑌 = 𝑃𝑋计算降维到k维后的样本特征

基于sklearn(Python语言下的机器学习库)和numpy随机生成2个类别共40 个3维空间的样本点,生成的代码如下:

mu_vec1 = np.array([0,0,0]) cov_mat1 = np.array([[1,0,0],[0,1,0],[0,0,1]]) class1_sample = np.random.multivariate_normal(mu_vec1, cov_mat1, 20).T mu_vec2 = np.array([1,1,1]) cov_mat2 = np.array([[1,0,0],[0,1,0],[0,0,1]]) class2_sample = np.random.multivariate_normal(mu_vec2, cov_mat2, 20).T

获取数据集

数据集来自于英国剑桥大学的AT&T人脸 数据集,此数据集共有40×10=400张图 片,图片大小为112x92,已经经过灰度 处理。一共被划分为40个类,每类中包 含的是同一个人的10张图像。

图片转化为向量

由于每张图片的大小为112x92,每张图片共有10304个像素点,这时需要一个 图片转化函数ImageConvert(),将每张图片转化为一个10304维向量,代码如 下:

def ImageConvert(): 

for i in range(1, 41): 

for j in range(1, 11): 

path = picture_savePath + "s" + str(i) + "/" + str(j) + ".pgm" 

#单通道读取图片

 img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)

h, w = img.shape img_

col = img.reshape(h * w) data.append(img_col)

label.append(i)

图片转化为向量

data变量中存储了每个图片的10304维信息,格式为列表变量(list)。变量 label中存储了每个图片的类别标签,为数字1~40。应用numpy生成特征向量 矩阵,代码如下:

import numpy as np 

C_data = np.array(data) 

C_label = np.array(label)

分割数据集

将训练集与测试集按照4:1的比例进行随机分割,即测试集占20%,代码如 下:

from sklearn.model_selection import train_test_split 

x_train, x_test, y_train, y_test = train_test_split(C_data, C_label, test_size=0.2, 

 random_state=256)

PCA主成分分析,降维处理

引入sklearn工具进行PCA处理:

from sklearn.decomposition import PCA

 pca = PCA(n_components=15, svd_solver='auto').fit(x_train) 

方法中的15表示处理后保留维度为15个,auto表示PCA会自动选择合适的

 SVD算法,进行维度转化: 

x_train_pca = pca.transform(x_train) 

x_test_pca = pca.transform(x_test

支持向量机分类

使用sklearn中的SVM工具包SVC(C-Support Vector Classification)来进行分类 ,核函数采用的是线性核函数,代码如下:

svc = SVC(kernel='linear') 

svc.fit(x_train, y_train)

查看训练后的分类结果

使用测试集评估分类器的效果,代码如下:

 print('%.5f' % svc.score(x_test_pca, y_test)) 

得到的输出正确率结果如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kFCcTaHl-1655199693718)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232137190.png)]

查看训练后的分类结果

进行对比实验,将保留维度为10和20时的效果依次如下面两张图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPDpO7KS-1655199693718)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232201115.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bv65FIlf-1655199693718)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232211331.png)]

从图中显示的正确率的情况对比来看,特征数量降为15时,训练的结果是 最好的.

线性不可分的情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZUUmXHja-1655199693719)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232231963.png)]

二维平面中分类曲线为椭圆(线性不可分)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rWi6R5Ou-1655199693719)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232258715.png)]

线性不可分的情况

两维向三维的映射:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1vttPIi-1655199693719)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232325812.png)]

在三维空间中线性可分

分类面:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bk0IL09r-1655199693719)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232354910.png)]

根据支持向量机求得决策函数为

最好的.

线性不可分的情况

[外链图片转存中…(img-ZUUmXHja-1655199693719)]

二维平面中分类曲线为椭圆(线性不可分)

[外链图片转存中…(img-rWi6R5Ou-1655199693719)]

线性不可分的情况

两维向三维的映射:

[外链图片转存中…(img-N1vttPIi-1655199693719)]

在三维空间中线性可分

分类面:[外链图片转存中…(img-Bk0IL09r-1655199693719)]

根据支持向量机求得决策函数为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mbneIRSF-1655199693720)(E:%5C%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98%5Cimage-20220606232408891.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值