IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 支持向量机SVM笔记 -> 正文阅读

[人工智能]支持向量机SVM笔记

支持向量机SVM

  • 支持向量机(SVM,也称支持向量网络),是机器学习中获得更关注最多的算法没有之一

  • 从实际应用看

    • SVM在各种实际问题中都表现非常优秀,他在手写识别数字和人脸识别中应用广泛,在文本和超文本的分类中举足轻重。同时,SVM也被用来执行图像的分类,并用于图像分割系统…
  • 从学术角度看

    • SVM是最接近深度学习的机器学习算法

1.支持向量机原理

  • 支持向量机分类原理

    • 支持向量机,就是通过找出边际最大的决策边界,来对数据进行分类的分类器,因此,支持向量机分类器又叫做最大边际分类器。
  • 支持向量机的分类方法,是在一组分布中找出一个超平面作为决策边界,使模型在数据上的分类误差尽量接近于0,尤其是在未知数据集上的分类误差尽量小
    在这里插入图片描述

  • 超平面

    • 在几何中,超平面是一个空间的子空间,它是维度比所在空间小一维的空间。如果数据空间本身是三维的,则其超几何是二维平面

    • 决策边界:在二分类问题中,如果一个超平面能够将数据划分为两个集合,其中每个集合中包含单独的一个类别,我们就说这个超平面是数据的"决策边界"

在这里插入图片描述

  • 决策边界的边际

    • 如图:我们有B1和B2两条可能的决策边界。可以八决策边界B1向两边平移,直到碰到离这条决策边界最近的方块和圆圈后停下,形成两个新的超平面,分别为b11和b12,并且我们将原始的决策边界移动到b11和b12中间,确保B1到b11和b12的距离相等。在b11和b12中间的距离,叫做B1这条决策边界的边际(margin),通常记作d

    • 为了简便,我们称b11和b12为"虚拟超平面"

在这里插入图片描述

  • 决策边界的边际对分类效果的影响

    • 如图表现出,拥有更大边际的决策边界在分类中的泛化误差更小,如果边际很小,则任何轻微扰动都会对决策边界的分类产生很大的影响,边际很小,是一种模型在训练集上表现很好,却在测试集表现糟糕的情况,所以会"过拟合"

    • 即,在寻找决策边界时,边际越大越好

在这里插入图片描述

2.如何找出边际最大的决策边界

  • 假设现在数据集中有N个训练样本,每个训练样本i可以表示为(xi,yi)i=1,2,3...N),其中xi是(x1i,x2i,x3i...xni)的特征向量。也就是说训练样本中的特征数据只有两种不同形式的特征。二分类的标签yi的取值为(1,-1)这两类结果。接下来可视化我们的N个样本数据的特征数据:(紫色为一类,红色为另一类)

在这里插入图片描述

  • 让所有紫色点的标签为1,红色点的标签为-1。我们要在这个数据集上寻找一个决策边界,在二维平面上,决 策边界(超平面)就是一条直线。二维平面上的任意一条线可以被表示为:
    在这里插入图片描述

在这里插入图片描述

  • 其中[a,-1]是参数向量,X是特征向量,b是截距

  • 在一组数据下,给定固定的w和b,就可以固定一条直线,在w和b不确定的情况下,这个表达式可以是任意一条直线。如果在w和b固定时,给定一个唯一的x取值,这个表达式就可以表示一个固定点,固定下来的直线就可以作为SVM的决策边界

  • 在SVM中,就是用这个表达式来表示决策边界,目标是求解能够让边际最大化的决策边界,所以要求解参数向量w和b

  • 如果在决策边界上任意取两个点xa,xb,则有:
    在这里插入图片描述
    在这里插入图片描述

  • 一个向量的转置乘以另一个向量,可以获得向量的点积(dot product)。两个向量的点积为0表示两个向量的方向是互相垂直的。xaxb是一条直线上的两个点,相减后得到的向量方向是由xa指向xb,所以xa-xb的方向是平行于他们所在的直线【决策边界】。而w与xa-xb相互垂直,所以参数向量w的方向必然是垂直于我们的决策边界

    • 此时有了决策边界,图中任意一个紫色的点xp可以表示为

      • w*xp+b=p
        • 紫色点所表示的标签y为1,规定p>0
    • 任意一个红色的点xr可以表示为

      • w*xr+b=r
        • 红色点所表示的标签y是-1,规定r<0
    • 如果有新的测试数据xt,根据以下公式判定

在这里插入图片描述

  • 决策边界的两边要有两个超平面,这两个超平面在二维空间中是两条平行线(就是虚拟超平面),他们的距离就是边际d,而决策边界位于这两条线中间,所以两条平行线是对称的,另这两条平行线被表示为:

在这里插入图片描述

  • 支持向量:

    • 让这两条线分别过两类数据中距离我们虚线决策边界最近的点,这些点被称为"支持向量"。另辞色类的点为xp,红色类的点为xr(xp和xr作为支持向量),得到:

在这里插入图片描述

  • 两式相减为了求出两条虚线之间的距离

  • 如图:xp-xr可以表示两点之间的连线(距离),而边际d平行于w,即,相当于得到了三角形的斜边,并知道一条直线边的方向

    • 数学性质得知:向量a乘以向量b方向上的单位向量,可以得到向量a在向量b方向上的投影的长度

    • xp-xr作为向量a,w作为向量b,既可以求出边际的长度

    • 向量b除以自身的模长||b||可以得到向量b方向上的单位向量

在这里插入图片描述

  • 我们将上述式子两边除以||w||,可以得到:

在这里插入图片描述

  • 求最大化d,就是求w的最小值,把求解 的最小值转化为,求解以下函数的最小值:

在这里插入图片描述

  • 只所以要在模长上加上平方,是因为模长的本质是一个距离(距离公式中是带根号的),所以它是一个带根号的存在,我们对它取平方,是为了消除根号,不带平方也可以。

  • 两条虚线表示的超平面,表示的是样本数据边缘所在的点,所以对于任意样本i,可以把决策函数写作

在这里插入图片描述

  • 如果wxi+b>=1,yi=1,则yi(wxi+b)>=1,如果wxi+b<=-1,yi=-1,则yi(wxi+b)>=1

  • 最终得到支持向量机的损失函数

在这里插入图片描述

  • subject to:标识并且的意思

3.拉格朗日乘数

  • 对损失函数求解,目标是求解让损失函数最小化的w,如果||w||=0f(w)必然很小,但是||w||=0是一个无效值【因为我们的决策边界wx+b=0,如果w为0,则这个向量包含的所有元素都为0,就有b=0这个唯一值,如果b和w都为0,决策边界不可能是一条直线,条件yi(wxi+b)>=1就不可能实现,所以w不可以是一个0向量】
  • 即,我们希望找出一种方式,能够让我们的条件yi(wxi+b)>=1在计算中也被纳入考虑,就是使用拉格朗日乘数法

4.非线性SVM与核函数

  • 不是所有的数据都是线性可分的,不是所有的数据都能一眼看出有一条直线,或一个平面,甚至一个超平面可以将数据完全分开。如下图,对于这样的数据,需要对它进行升维变化,让数据从原始的空间x投射到新空间q(x)中,升维之后,明显可以找出一个平面,能够将数据切分开来

    • q(x)是一个映射函数,他代表了某种能够将数据升维的非线性的变换,对数据进行这样的变换,确保数据在自己的空间中一定能够线性可分

在这里插入图片描述

  • 核函数

    • 我们很难去找出一个函数q(x)来满足我们的需求,并且在我们并不知道数据究竟被映射到了一个多少维度的空间当中,有可能数据被映射到了无限空间中,我们的计算和预测就会很难。
    • 核函数K(xi,test)能够用原始的数据空间中的向量计算来表示升维后的空间中的点积q(x)*q(xtest),以帮助我们寻找合适的q(x),适合不同的核函数,就可以解决不同数据分布下寻找超平面问题
    • 这个功能由参数"kernel(?k?rnl)"和一系列与核函数相关的参数来进行控制
      在这里插入图片描述
      在这里插入图片描述
  • 观察结果

    • 线性核函数和多项式核函数在非线性数据上表现会浮动,如果数据相对线性可分,则表现不错,如果是像环形数据那样彻底不可分,则表现很糟糕,在线性数据集上,线性核函数和多项式核函数即便有扰动项也可以表现不错,即多项式核函数【多项式函数妒多被用于图像处理之中】虽然可以处理非线性情况,但是更偏向于线性的功能
    • Sigmoid核函数,在非线性数据上强于两个线性核函数,但效果明显不如rbf,他在线性数据上完全比不上线性的核函数,对扰动项抵抗也比较弱,所以它的功能比较弱小,很少用到
    • rbf:高斯径向基核函数基本在任何数据基上都表现不错,属于比较万能的核函数。【rbf不擅长处理数据分布不均衡的数据】
  • 使用核函数优先使用高斯径向基核函数,它适用于核转换到很高的空间的情况,在各种情况下效果都不错,如果rbf效果不好,再试其它的核函数;

5.示例

from sklearn.datasets import load_breast_cancer
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

data=load_breast_cancer()
feature=data.data
target=data.target
feature.shape #(569, 30)
np.unique(target)#array([0, 1])

pca=PCA(n_components=2)
pca_feature=pca.fit_transform(feature)
pca_feature.shape #(569, 2)
# 处理:初步任意选取两种特征,将其映射在散点图中查看是否线性可分。
plt.scatter(feature[:,0],feature[:,1],c=target)

x_train,x_test,y_train,y_test=train_test_split(feature,target,test_size=0.3,random_state=420)
Kernel=['linear','rbf']
for kernel in Kernel:
    #cache_size:在计算机中为SVM提供多大的内存空间用于计算,单位为Mb
    clf=SVC(kernel=kernel,cache_size=1000)
    clf.fit(x_train,y_train)
    print('the accuracy under kernel %s is %f' %(kernel,clf.score(x_test,y_test)))
# the accuracy under kernel linear is 0.929825
# the accuracy under kernel rbf is 0.918129
# rbf在线性数据上也可以表现得非常好,那在这里,为什么跑出来的结果如此糟糕呢

#通过观察特征数据的标准差,最大,最小值发现特征中的数据分布很不均衡,则试着对其进行归一化处理
x=StandardScaler().fit_transform(feature)
x_train,x_test,y_train,y_test=train_test_split(x,target,test_size=0.3,random_state=420)
Kernel=['linear','rbf']
for kernel in Kernel:
    clf=SVC(kernel=kernel,cache_size=1000)
    clf.fit(x_train,y_train)
    print("The accuracy under kernel %s is %f" % (kernel,clf.score(x_test,y_test)))
# The accuracy under kernel linear is 0.976608
# The accuracy under kernel rbf is 0.970760
#发现rbf的分数提高了
#结论:rbf不擅长处理数据分布不均衡的数据。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-07 13:43:59  更:2022-02-07 13:46:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 20:28:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码