📔
国科大模式识别与机器学习笔记 2023
  • 课程概况
  • 第一章 概述
    • 1.1 概述
  • 第二章 生成式分类器
    • 2.1 模式识别与机器学习的目标
    • 2.2 正态分布模式的贝叶斯分类器
    • 2.3 均值向量和协方差矩阵的参数估计
    • 附 第二章作业
  • 第三章 判别式分类器
    • 3.1 判别式分类器与生成式分类器
    • 3.2 线性判别函数
    • 3.3 广义线性判别函数
    • 3.4 Fisher线性判别
    • 3.5 感知器算法
    • 3.6 可训练的确定性分类器的迭代算法
    • 3.7 势函数法
    • 3.8 决策树
    • 附 第三章作业
  • 第四章 特征选择和提取
    • 4.1 模式类别可分性的测度
    • 4.2 特征选择
    • 4.3 离散K-L变换
    • 附 第四章作业
  • 第五章 统计机器学习
    • 5.1 机器学习简介
    • 5.2 统计机器学习
  • 第六章 有监督学习
    • 6.1 有监督学习
    • 6.2 回归任务
    • 6.3 分类问题
    • 附 第六章作业
  • 第七章 支持向量机
    • 7.1 线性支持向量机
    • 7.2 核支持向量机
    • 7.3 序列最小优化算法
    • 附 第七章作业
  • 第八章 聚类
    • 8.1 基本概念
    • 8.2 经典聚类算法
    • 附 第八章作业
  • 第九章 降维
    • 9.1 基本概念
    • 9.2 维度选择
    • 9.3 维度抽取
  • 第十章 半监督学习
    • 10.1 基本概念
    • 10.2 半监督学习算法
  • 第十一章 概率图模型
    • 11.1 PGM简介
    • 11.2 有向图模型(贝叶斯网络)
    • 11.3 无向图模型(马尔科夫随机场)
    • 11.4 学习和推断
    • 11.5 典型概率图模型
    • 附 第十一章作业
  • 第十二章 集成学习
    • 12.1 简介
    • 12.2 Bagging
    • 12.3 Boosting
    • 附 第十二章作业
由 GitBook 提供支持
在本页
  • 3.2.1 线性判别函数
  • 两类问题的判别函数
  • 用判别函数进行分类的两个因素
  • n维线性判别函数
  • 3.2.2 线性判别函数的三种形式
  • 一、两分法
  • 二、两分法
  • 三、类别1转化为类别2
  • 四、小结
  • 绘图代码

这有帮助吗?

在GitHub上编辑
  1. 第三章 判别式分类器

3.2 线性判别函数

上一页3.1 判别式分类器与生成式分类器下一页3.3 广义线性判别函数

最后更新于1年前

这有帮助吗?

3.2.1 线性判别函数

两类问题的判别函数

假设x是二维模式样本x=(x1 x2)Tx=(x_1\ x_2)^Tx=(x1​ x2​)T,模式的平面图如下:

用判别函数进行分类的两个因素

  • 判别函数的几何性质

    • 线性的

    • 非线性的

  • 判别函数的系数:使用给定的模式样本确定判别函数的系数

n维线性判别函数

一个n维线性判别函数可以写为:

3.2.2 线性判别函数的三种形式

每条判别函数只区分是否属于某一类

上图中,白色区域为分类失败区域

  • 将M分类问题分为M个单独的分类问题

  • 需要M条线

  • 不一定能够找到判别函数区分开其它所有类别

每一条线分开两种类别

三、类别1转化为类别2

可以通过以下方式将方式1的判别函数转化为方式2的:

四、小结

  • 线性可分:模式分类若可以用任一线性函数划分,则称这些模式是线性可分的

  • 两种分类法的比较

    • 但是对于法一而言,并不是每一种情况都是线性可分的,因此法二对模式是线性可分的概率比法一大

绘图代码

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 10, 100)

y1 = x
y2 = -x + 5
y3 = np.ones_like(x)

plt.plot(x, y1, label='$d_1(x)=-x_1+x_2 = 0$')
plt.plot(x, y2, label='$d_2(x)=x_1+x_2-5 = 0$')
plt.plot(x, y3, label='$d_3(x)=-x_2+1 = 0$')

plt.axhline(y=0, color='black', linestyle='--', linewidth=0.8)
plt.xlabel('$x_1$')
plt.ylabel('$x_2$')
plt.axvline(x=0, color='black', linestyle='--', linewidth=0.8)

plt.fill_between(x, y2, np.maximum(y1, y3), where=(x <= 2.5), color='blue', alpha=0.2)
plt.fill_between(x, y1, np.maximum(y2, y3), where=(x >= 2.5), color='orange', alpha=0.2)
plt.fill([-5, 1, 4, 10], [-5, 1, 1, -5], color='green', alpha=0.2)

plt.annotate('$\\omega_1$\n$d_1(x)>0$\n$d_2(x)<0$\n$d_3(x)<0$',
             xy=(-4, 6), xytext=(-4, 4), fontsize=12, color='black')
plt.annotate('$\\omega_2$\n$d_2(x)>0$\n$d_1(x)<0$\n$d_3(x)<0$',
             xy=(7, 6), xytext=(7, 3), fontsize=12, color='black')
plt.annotate('$\\omega_3$\n$d_3(x)>0$\n$d_1(x)<0$\n$d_2(x)<0$',
             xy=(-1, -4), xytext=(1, -4), fontsize=12, color='black')

plt.xlim(-5, 10)
plt.ylim(-5, 10)

plt.legend(loc='lower right')

plt.show()
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 10, 100)
y = np.linspace(-5, 10, 100)

y1 = x
y2 = -x + 5
x1 = np.full_like(y, 2)

plt.plot(x, y1, label='$d_{23}(x)=-x_1+x_2 = 0$')
plt.plot(x, y2, label='$d_{12}(x)=x_1+x_2-5 = 0$')
plt.plot(x1, y, label='$d_{13}(x)=-x_1+2 = 0$')

plt.axhline(y=0, color='black', linestyle='--', linewidth=0.8)
plt.xlabel('$x_1$')
plt.ylabel('$x_2$')
plt.axvline(x=0, color='black', linestyle='--', linewidth=0.8)

plt.fill_between(x, np.maximum(y1, y2), 10 * np.ones_like(x), color='blue', alpha=0.2)
plt.fill_between(x, y2, -5 * np.ones_like(x), where=(x <= 2), color='orange', alpha=0.2)
plt.fill_between(x, y1, -5 * np.ones_like(x), where=(x > 1.9), color='green', alpha=0.2)

plt.annotate('$\\omega_1$\n$d_{12}(x)>0$\n$d_{13}(x)>0$',
             xy=(-3, 2), xytext=(-3, 2), fontsize=12, color='black')
plt.annotate('$\\omega_2$\n$d_{32}(x)>0$\n$d_{12}(x)>0$',
             xy=(1, 6), xytext=(1, 5), fontsize=12, color='black')
plt.annotate('$\\omega_3$\n$d_{32}(x)>0$\n$d_{13}(x)>0$',
             xy=(6, 1), xytext=(6, 1), fontsize=12, color='black')

plt.xlim(-5, 10)
plt.ylim(-5, 10)
plt.grid(True)

plt.legend(loc='lower right')

plt.show()

此时,分属于ω1\omega_1ω1​和ω2\omega_2ω2​两类的模式可以用一个直线方程进行划分:

d(x)=w1x1+w2x2+w3=0d(x) = w_1x_1 + w_2x_2 + w_3 = 0d(x)=w1​x1​+w2​x2​+w3​=0

其中,x1x_1x1​、x2x_2x2​称为坐标变量,w1w_1w1​、w2w_2w2​、w3w_3w3​称为参数方程,则将一个位置模式带入,有:

若d(x)>0d(x)>0d(x)>0,则x∈ω1x\in \omega_1x∈ω1​

若d(x)<0d(x)<0d(x)<0,则x∈ω2x\in \omega_2x∈ω2​

此处的d(x)=0d(x)=0d(x)=0就称为判别函数

d(x)=w1x1+w2x2+⋯+wnxn+wn+1=w0Tx+wn+1d(x)=w_1x_1 + w_2x_2 + \cdots + w_nx_n + w_{n+1} = w_0^Tx + w_{n+1}d(x)=w1​x1​+w2​x2​+⋯+wn​xn​+wn+1​=w0T​x+wn+1​

其中,w0=(w1,w2,…,wn)T\boldsymbol{w}_0=(w_1,w_2,\dots,w_n)^Tw0​=(w1​,w2​,…,wn​)T称为权向量

此外,d(x)d(x)d(x)还可以写为:

d(x)=wTxd(x)=w^Txd(x)=wTx

其中,x=(x1,x2,…,xn,1)\boldsymbol{x}=(x_1,x_2,\dots,x_n,1)x=(x1​,x2​,…,xn​,1)称为增广模式向量,w0=(w1,w2,…,wn,wn+1)T\boldsymbol{w}_0=(w_1,w_2,\dots,w_n,w_{n+1})^Tw0​=(w1​,w2​,…,wn​,wn+1​)T称为增广权向量

一、ωi\ωi‾\omega_i\backslash\overline{\omega_i}ωi​\ωi​​两分法

二、ωi\ωj‾\omega_i\backslash\overline{\omega_j}ωi​\ωj​​两分法

d12(x)=d1(x)−d2(x)=0d13(x)=d1(x)−d3(x)=0d23(x)=d2(x)−d3(x)=0d_{12}(x) = d_1(x) - d_2(x) = 0 \\ d_{13}(x) = d_1(x) - d_3(x) = 0 \\ d_{23}(x) = d_2(x) - d_3(x) = 0d12​(x)=d1​(x)−d2​(x)=0d13​(x)=d1​(x)−d3​(x)=0d23​(x)=d2​(x)−d3​(x)=0

一旦线性函数的系数wkw_kwk​被确定,则此函数就可以作为分类的基础

对于M分类,法一需要M个判别函数,法二需要M(M−1)2\frac{M(M-1)}{2}2M(M−1)​个判别函数,因此当模式较多时,法二需要更多的判别函数

img
image-20230928113317386
image-20230928134949845