首页 > 其他分享 >【机器学习】支持向量机(个人笔记)

【机器学习】支持向量机(个人笔记)

时间:2024-06-12 12:21:56浏览次数:24  
标签:误差 svm 机器 features labels 笔记 分类器 向量 gamma

目录

源代码文件请点击此处

SVM 分类器的误差函数

SVM 使用两条平行线,使用中心线作为参考系 \(L: \ w_1x_1 + w_2x_2 + b = 0\)。我们构造两条线,一条在上面,一条在下面,分别为:

\[L+: \ w_1x_1 + w_2x_2 + b = 1 \\ L-: \ w_1x_1 + w_2x_2 + b = -1 \]

分类器由 \(L+\) 和 \(L-\) 组成。为训练 SVM,我们需要为由两条线组成的分类器构建一个误差函数,期望达成的目标有两个:

  • 两条线中的每一条都应尽可能对点进行分类。
  • 两条线应尽可能彼此远离。

误差函数表示如下:

\[误差 = 分类误差 + 距离误差 \]

分类误差函数

点 \((x_1, x_2)\) 的预测函数为

\[\hat{y} = step(w_1x_1 + w_2x_2 + b) \]

显然这是一个离散感知器,其中:

\[y = step(x) = \begin{cases} 0, x \leq 0 \\ 1, x > 0 \end{cases} \]

定义分类误差函数如下:

\[\begin{cases} 0, 错误分类 \\ |w_1x_1 + w_2x_2 + b|, 正确分类 \end{cases} \]

例如,考虑标签为 \(0\) 的点 \((4,3)\),两个感知器给出的预测为:

\[L+: \hat{y} = step(2x_1 + 3x_2 - 7) = 1 \\ L-: \hat{y} = step(2x_1 + 3x_2 - 5) = 1 \]

可以看到两个感知器均预测错误,此时分类误差为:

\[|2x_1 + 3x_2 - 7| + |2x_1 + 3x_2 - 5| = 22 \]

距离误差函数

若两个线性方程如下:

\[L+: \ w_1x_1 + w_2x_2 + b = 1 \\ L-: \ w_1x_1 + w_2x_2 + b = -1 \]

根据两条平行直线间的距离公式:

\[d = \frac{|C_1 - C_2|}{\sqrt{A^2 + B^2}} \]

则这两条平行线的垂直距离为:

\[d = \frac{2}{\sqrt{w_1^2 + w_2^2}} \]

此为距离误差。注意到,当 \(w_1^2 + w_2^2\) 很大时,\(d\) 很小;当 \(w_1^2 + w_2^2\) 很小时,\(d\) 很大。因此 \(w_1^2 + w_2^2\) 是一个很好的误差函数。

C 参数

很多时候我们希望 SVM 分类器能侧重于分类误差或距离误差其中一个方面,那么我们可以使用 C 参数:

\[误差 = C \cdot 分类误差 + 距离误差 \]

C 参数如何控制两者的呢?

  • C 很大:误差公式以分类误差为主,SVM 分类器更侧重于对点进行正确分类;
  • C 很小:误差公式以距离误差为主,SVM 分类器更侧重于保持线之间的距离。

下面是一个例子:

svm_c_001 = SVC(kernel='linear', C=0.01)
svm_c_001.fit(features, labels)
 
svm_c_100 = SVC(kernel='linear', C=100)
svm_c_100.fit(features, labels)

上图为 C=0.01 的情况,下图为 C=100 的情况:

image

image

非线性边界的 SVM 分类器(内核方法)

多项式内核

  • 在变量 \(x_1, x_2\) 使用 2 阶多项式内核,就需要计算这些单项式:\(x_1, x_2, x_1^2, x_1x_2, x_2^2\),然后尝试把它们线性组合起来,比如通过检查发现这是一个有效的分类器公式:\(x_1^2 + x_2^2 = 1\)
  • 这相当于将二维平面映射到一个五维平面,即点 \((x_1, x_2)\) 到点 \((x_1, x_2, x_1^2, x_1x_2, x_2^2)\) 的映射
  • 类似地,在变量 \(x_1, x_2\) 使用 3 阶多项式内核,就需要计算这些单项式:\(x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3\),然后尝试把它们线性组合起来,通过检查发现一个有效的分类器公式

代码如下:

svm_degree_2 = SVC(kernel='poly', degree=2)
svm_degree_2.fit(features, labels)
print("[Degree=2] Accuracy=", svm_degree_2.score(features, labels))

svm_degree_4 = SVC(kernel='poly', degree=4)
svm_degree_4.fit(features, labels)
print("[Degree=4] Accuracy=", svm_degree_4.score(features, labels))

当分类器为 2 阶多项式的运行结果:

image

当分类器为 4 阶多项式的运行结果:

image

径向基函数(RBF)内核

径向基函数:

  • 当变量只有一个时,最简单的径向基函数为 \(y = e^{-x^2}\),此函数看起来像标准正态分布,函数凸起处为 \(x=0\)
  • 当变量有 2 个时,最简单的径向基函数为 \(z = e^{-(x^2 + y^2)}\),此函数看起来像标准正态分布,函数凸起处为 \((0,0)\)
  • 当变量有 \(n\) 个时,基本径向基函数为 \(y = e^{-(x_1^2 + ... + x_n^2)}\),\(n\) 维凸点以 0 为中心
  • 若希望以点 \((p_1, ..., p_n)\) 为中心凸起,则基本径向基函数为 \(y = e^{-[(x_1-p_1)^2 + ... + (x_n-p_n)^2]}\)
  • 添加 \(\gamma\) 参数:\(y = e^{-\gamma[(x_1-p_1)^2 + ... + (x_n-p_n)^2]}\),用于控制拟合程度(形象理解,即调整凸起程度
    • 当 \(\gamma\) 值非常小时,模型会欠拟合
    • 当 \(\gamma\) 值非常大时,模型会严重过拟合,合适的 \(\gamma\) 值非常重要

相似度公式:

  • 对于点 \(p\) 和点 \(q\),\(相似度(p,q) = e^{-距离(p,q)^2}\)
  • 一维数据集中,点 \(x_1\) 和点 \(x_2\) 的相似度为 \(e^{-(x_1-x_2)^2}\)
  • 二维数据集中,点 \(A(x_1, y_1)\) 和点 \(B(x_2, y_2)\) 的相似度为 \(e^{-[(x_1-x_2)^2 + (y_1-y_2)^2]}\)
  • 若该数据集有 \(n\) 个数据点,则应计算 \(n^2\) 个相似度;每个点到自身的相似度一定为 1;距离越近,相似度越高

有了相似度公式,就可以定义分类器了。假设数据集有 \(n\) 个数据点 \(X_i\),每个点对应标签 \(L_i\)(取值为 0 或 1),则对于点 \(X\) 的分类预测如下:

\[\hat{y} = step[\sum^n_{i=1} (-1)^{L_i - 1} \cdot e^{-距离(X, X_i)^2}] \]

形象理解:这相当于在一个二维平面上,为标记为 0 的点添加了一个“山谷”,为标记为 1 的点添加了一个“山峰”。对每个点都如此操作,最后使用阈值 0 画出一个“海岸线”,这就是最后的分类边界(boundary)。

代码如下:

svm_gamma_01 = SVC(kernel='rbf', gamma=0.1)
svm_gamma_01.fit(features, labels)
print("[Gamma=0.1] Accuracy=", svm_gamma_01.score(features, labels))

svm_gamma_1 = SVC(kernel='rbf', gamma=1)
svm_gamma_1.fit(features, labels)
print("[Gamma=1] Accuracy=", svm_gamma_1.score(features, labels))


svm_gamma_10 = SVC(kernel='rbf', gamma=10)
svm_gamma_10.fit(features, labels)
print("[Gamma=10] Accuracy=", svm_gamma_10.score(features, labels))


svm_gamma_100 = SVC(kernel='rbf', gamma=100)
svm_gamma_100.fit(features, labels)
print("[Gamma=100] Accuracy=", svm_gamma_100.score(features, labels))

\(\gamma=0.1\) 时的运行结果:

image

\(\gamma=1\) 时的运行结果:

image

\(\gamma=10\) 时的运行结果:

image

\(\gamma=100\) 时的运行结果:

image

标签:误差,svm,机器,features,labels,笔记,分类器,向量,gamma
From: https://www.cnblogs.com/Mount256/p/18243700

相关文章

  • 03《android studio开发实战(第三版)》阅读笔记
    第四章:用户界面开发 本章介绍了Android中的常见布局管理器,如LinearLayout、RelativeLayout和ConstraintLayout,以及它们的使用场景和特点。 学习了各种用户界面元素,如TextView、EditText、Button等的使用方法,以及如何将它们组合在一起创建复杂的用户界面。理解了Android中的资源......
  • 人工智能——机器学习——神经网络(深度学习)
    一.人工智能:人工智能是让机器获得像人类一样具有思考和推理机制的智能技术,这一概念最早出现在1956年召开的达特茅斯会议上。其中深度学习可以理解为神经网络。刚开始只有神经网络的概念,随着神经网络的层数增加,就逐渐将神经网络叫做深度学习。神经网络发展简史:神经网络的......
  • 《Linux内核完全注释》学习笔记:2.7 Linux内核源代码的目录结构
    由于Linux内核是一种单内核模式的系统,因此内核中所有程序几乎都有紧密的联系,它们之间的调用关系非常密切。所以在阅读一个源代码文件时往往需要参阅其他相关的文件。因此有必要在开始阅读内核源代码之前,先熟悉一下源代码文件的目录结构。这里我们首先列出Linux内核完整的源代......
  • 机器学习课程设计,人工智能课程设计,深度学习课程设计--基于Transformer的家庭暴力情绪
    文章目录摘要第一章背景与意义1.1背景1.1.1家庭暴力发展现状1.1.2家庭暴力的危害1.2意义与目的第二章关键技术与方法2.1文本模态特征提取法2.2视频模态特征提取法2.3音频模态特征提取法2.4注意力机制(Attention)2.5多头注意力机制(Multi-Attention)2.6Transfor......
  • Python学习笔记5:入门知识(五)
    引言距离上次更新Python的学习笔记,有个四五天,主要原因有两个:一是忙,没有时间,第二个就是之前学的路线,已经到头了,我找不到下面学习路线的资料。主要说下第二点是主要原因。我为啥明知道这个只能到入门一点点还用这份资料?主要还是因为大佬入门知识写的好,我学起来感觉不吃力,有......
  • Mac安装win7虚拟机笔记
    本来安装虚拟机也不是啥难事,但是遇到Mac这事就不一样了。镜像网上下的镜像都是好多都是ghost镜像,没办法安装到虚拟机,然后网上查询获得下面的win7地址:Windows764位ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A......
  • 【机器学习】多层神经网络实验
    环境安装pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplescikit-learnpipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplekerasimportnumpyasnpfromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDensefromskl......
  • 阅读笔记8
    作者深入介绍了软件工程的基本知识,为我们阐述了软件的本质、软件开发的不同阶段以及软件的特殊性。作者提到软件=程序+软件工程,强调了完成整个软件开发活动对于将程序转化为可用软件的重要性。此外,作者还总结了自己做过的项目类型,例如为了学习而构建的项目、为了展示技术而构建的......
  • 【PB案例学习笔记】-05 图片浏览器
    写在前面这是PB案例学习笔记系列文章的第5篇,该系列文章适合具有一定PB基础的读者。通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.gi......
  • 详细说说机器学习在自然语言处理的应用
    机器学习在自然语言处理(NLP)中的应用非常广泛,涵盖了多个方面。以下将详细介绍机器学习在NLP中的几个主要应用领域:文本分类与情感分析文本分类:机器学习算法如支持向量机(SVM)、朴素贝叶斯(NaiveBayes)等被广泛应用于文本分类任务,如新闻文章分类、垃圾邮件过滤等。这些算法能够通......