fzu2021机器学习作业1

作业标题 《机器学习》第一次作业——第一至三章学习记录和心得
课程链接 中国大学MOOC·模式识别与机器学习
作业说明 根据慕课和补充课件进行学习,并在自己理解的基础上,在博客园记录前三章的学习笔记。注意各个知识点的互相联系
作业要求 表述学习心得。以及可以依据自己的理解,描述知识点串接的思路

目录

第一章

1.1 什么是模式识别?

定义:

根据已有的知识表达,针对待识别模式,判别决策其所述的类别或者预测其对应的回归值。

划分:

分为分类与回归两种。分类:输出量为离散的类别表达;回归:输出量为连续的信号表达。
回归是分类的基础,由回归值做判别决策可得到类别值。
如逻辑回归中使用 sigmoid 函数来预测决策概率,其输出是0-1之间的回归值,若再使用 sign 函数,取大于0.5为1,小于0.5为0则得到离散的类别值。

应用:

字符、交通标志、动作、语音、应用程序(基于TCP/IP)、银行信贷识别、股票价格预测、目标抓取、无人驾驶...可以说模式识别相较于NLP、CV等是一个范畴更大的概念

1.2 模式识别数学表达

数学解释:

模式识别可以看作一种函数映射f(x),将待识别模式x从输入空间映射到输出空间。函数f(x)是关于已有知识的表达。
比如猫狗图片分类任务中,一张图片x(3维数组),经过网络f的计算,其结果将是0(猫)或者1(狗)

模型的概念:

model,关于已有知识的一种表达方式,即函数f(x)
通常记录了函数的权重,如 f=wx+b 里的w。再通常,f会写成矩阵乘积形式,并且w将合并偏置b,即 f=WX
广义:特征提取+回归器+判别函数
狭义:特征提取+回归器
分类器:回归器+判别函数

图 1 判别函数、回归器、特征提取关系图
判别函数:

特定的非线性函数,记作g。二分类:sign函数;多分类:max函数(取回归值最大的作为结果)

特征:

用于区分不同类别模式的、可测量的量。
如对于甜橙来说,甜度、颜色、形状、气味、触感...都可以作为特征

特征向量:
图 2 特征向量定义与性质

想像多维坐标轴,每维都是一个特征,在该空间取一个点 x(x0, x1, ..., xn),每个坐标值代表了不同特征的量值,比如x1(甜度)=0.7(有点甜,但还没那么甜)。那么从坐标原点到该点的向量即为特征向量。

一小时过去了

1.3 特征向量的相关性

意义:

每个特征向量代表一个模式,计算向量间的相关性,是度量所识别模式是否相似的基础

点积:

两个向量 a(a0, a1, ..., an)b(b0, b1, ..., bn) 的点积定义为:a·b = a0b0+a1b1+……+anbn=|a||b|*cos<a,b>
使用矩阵乘法并把(纵列)向量当作n×1 矩阵,点积还可以写为:a·b = a.T*b,a.T为矩阵a的转置
点积计算结果为标量,有正有负,数值越大,说明两个向量间越相似

投影:

将向量a垂直投射到向量b方向上的长度(标量) a0 = |a|*cos<a,b>
在b方向上分解得越多,说明ab方向上越相似当cos<a,b>=0时完全等同
点积ab = 投影a0*向量b模长|b|

残差向量:

向量a分解到向量y方向上得到的投影向量a0与原向量a的误差
ra = a-a0=a-|a|*cos<a,b>/|b|*b

欧氏距离:

两个特征向量间的欧式距离可以表征二者之间的相似程度,与投影不同,综合考虑了方向和模长
d(a, b) = sqrt(∑(ai-bi)**2), i=1,2,…,n

1.4 机器学习的基本概念

线性模型:

模型结构为线性(直线、面、超平面):y=W.T*X
仅适用数据线性可分时,如鸢尾花数据集

非线性模型:

模型结构为非线性(曲线、曲面、超曲面):y=g(X)
适合数据线性不可分,如异或问题
常见非线性模型:多项式、神经网络、决策树

样本量vs模型参数量:

样本个数与模型参数个数相同:W有唯一解
样本个数大于模型参数个数:W无准确解,往目标函数中额外添加一个标准,通过优化这个标准得到近似解
样本个数小于模型参数个数:W无解/无数个解,还需要在目标函数中加入体现对于参数解的约束条件,据此选出一个最优的解

图 3 机器学习流程图
监督式学习:

定义:训练样本及其输出真值都给定的学习
即每个样本的正确输出都已知的情况,可以通过最小化模型预测与真值之间的误差来优化模型

无监督式学习:

定义:只给定训练样本的学习
难度大于监督式,典型应用为聚类问题、图像分割

半监督式学习:

定义:部分训练样本标注,其余未标注的学习
可看作有约束条件的无监督式学习问题:标注过的训练样本用作约束条件,典型应用为网络流数据

强化学习:

定义:机器自行探索决策、真值滞后反馈
有些任务需要累积多次决策行动才能知道最终结果,如棋类游戏,例子:Alpha GO

1.5 模型的泛化能力

泛化能力

定义:训练好的模型不仅能用于训练样本,也要能用于没见过的新样本
泛化能力低:过拟合

提高泛化能力

选择复杂模型
往目标函数中添加正则项(如权重的范数|W|,限制模型参数尽量小)

超参数

如选取的多项式阶数、一组训练样本个数、学习率、正则系数
调参:从训练集划分出验证集,基于验证集调整选择超参数

1.6 评估方法与性能指标

留出法
  1. 随机划分,将数据集分为训练集和测试集,测试集用于评估模型
  2. 取统计值,随机进行上述划分若干次,取量化指标平均值作为最终结果
k折交叉验证
  1. 数据集分为k个子集,取其中一个为测试集,其余作为训练集
  2. 重复以不同方式划分k次,使得每个子集都有作为测试集,这k次评估值取平均作为最终结果
留一验证

k折交叉验证中k=样本总数n的情况

基本概念
  • 真阳性TP、假阳性FP、真阴性TN、假阴性FN
  • 准确度Accuracy,综合阳性与阴性度量识别正确程度,但阳/阴性样本数失衡则难以度量
  • 精度Precision,预测为阳性样本的准确程度,或称查准率
  • 召回率Recall,也作敏感度Sensitivity,全部阳性样本中被预测为阳性的比例,或称查全率
  • F-Score,通过加权平均综合Precision和Recall,F = (a**2 + 1)*p*r / (a**2*p + r)
  • F1-Score,取F-Score中a=1可得
  • 混淆矩阵ConfusionMatrix,总结分类模型预测结果的一个分析表,行代表预测值,列代表真值。每个元素根据每个测试样本预测值与真值的计数统计值得来。对角线值越大,表示模型性能越好。(大概因为对角线处预测值等于真值,元素越大,说明预测正确的情况越多)

又一小时过去了

图 4 基本概念计算图

图 5 混淆矩阵示例
PR曲线

横轴召回率,纵轴精度
精度高且召回率高说明模型性能好,但二者时常矛盾,无法同时很高
理想情况能取到右上角点(1, 1)。曲线越往右上凸,模型性能越好。
PR曲线绘制:
以置信度对样本进行排序,再由大到小将每个样本作为划分点,在该样本前的都判断为正例,之后的都判断为负例,对该次预测可以计算precision和recall,遍历所有划分即可绘制曲线。

第二章

2.1 MED分类器

类的原型

定义:代表这个类的一个模式或一组量,便于计算该类和测试样本之间的距离
均值作为原型:类中所有训练样本代表误差最小的一种表达方式
最近邻作为原型:表达误差大,对噪声与异常样本敏感

距离度量

标准:同一性、非负性、对称性、三角不等式
欧氏距离sqrt(∑(xi-zi)**2) = sqrt((X-Z).T * (X-Z))
曼哈顿距离∑|xi-zi| = |X-Z|
加权欧氏距离sqrt(∑wi*(xi-zi)**2) = sqrt((X-Z).T * Iw * (X-Z)), Iw为对角元素是wi的对角矩阵

概念
  • 采用欧式距离作为距离度量,没有考虑特征变化的不同及特征之间的相关性
  • 计算待分类样本到各个类均值的距离,分类到距离近的类
  • 计算所有类别各自的协方差矩阵,若某cov矩阵对角线元素不相等:该类每维特征的变化不同;非对角元素不为0:该类特征之间存在相关性
python实现
import numpy as np


def euclidean_distance(x1, x2):
    x = np.subtract(x1, x2)
    return np.sqrt(x.T @ x)


def MED(x, *c):
    d = [euclidean_distance(x, cc) for cc in c]
    return np.argmin(d)

2.2 特征白化

目的

通过将原始特征映射到一个新的特征空间,使得在新空间中特征的协方差矩阵为单位矩阵,从而去除特征变化的不同及特征之间的相关性。

步骤
  1. 解耦,去除特征之间的相关性,即使对角元素为0,矩阵对角化
  2. 白化,对特征进行尺度变换,使每维特征的方差相等
  3. 解耦转换矩阵W1,白化转换矩阵W2。由W=W2*W1
  4. 转换后的特征y = Wx
  5. 转换后的协方差矩阵∑y = W*∑x*W.T
求解
  1. 对样本x计算其协方差矩阵 ∑x=np.cov(x)
  2. 解∑x的特征值与特征向量 λ, ν = np.linalg.eig(∑x)
  3. 单位化特征向量 Φ = ν/|v|
  4. 所有单位化特征向量组成矩阵 Φ = [...φ...]
  5. 所有特征值组成对角矩阵 ∧ = [...λ...] # 实际np.linalg.eig返回的λ就是∧
  6. Φ∧ = ∑xΦ 得到 ∧ = Φ.T∑xΦ
  7. 可见通过Φ将∑x成功对角化,故 W1 = Φ.T
  8. W2 = ∧**(-1/2)
  9. W = W2*W1 = ∧**(-1/2) * Φ.T

W1特性:W1转换前后欧氏距离保持一致,故W1只是起到旋转作用

2.3 MICD分类器

最小类内距离分类器,基于马氏距离
马氏距离 sqrt((X-Z).T * ∑i.inv * (X-Z)),∑i.inv为样本i协方差的逆

概念
  • 为克服MED缺点:没有考虑特征变化的不同及特征之间的相关性 而提出
  • 采用马氏距离作为距离度量,没有考虑特征变化的不同及特征之间的相关性?
  • 计算待分类样本到各个类均值的距离,分类到距离近的类
  • MICD缺陷:倾向于选择方差大的类
python实现
import numpy as np


def mahalanobis_distance(x1, x2):
    X = np.vstack([x1, x2])
    cov = np.cov(X.T)
    cov_inv = np.linalg.pinv(cov)
    # 伪逆,有误差
    # 参照上面的白化,这里的cov应该是x里各特征之间的协方差,是方阵
    delta = X[0] - X[1]
    dis = np.sqrt(delta @ cov_inv @ delta.T)
    return dis


def MICD(x, *c):
    d = [mahalanobis_distance(x, cc) for cc in c]
    return np.argmin(d)

双一小时过去了,好累

第三章

3.1 贝叶斯决策与MAP分类器

引言
  • MICD倾向于选择方差大的类
  • 像MED、MICD这种基于距离的决策没有考虑类的分布等先验知识
  • 引入概率P(Ci|x),表示样本x属于类别Ci的概率,即后验概率
贝叶斯规则
  • 基于先验概率P(Ci)、观测似然概率P(x|Ci)计算后验概率
  • P(Ci|x) = P(x|Ci)*P(Ci)/P(x),其中P(x)由P(x|Ci)、P(Ci)根据全概率公式可得
MAP分类器

最大化后验概率分类器,将测试样本分给后验概率最大的那个类,决策边界是两个后验概率相等的地方。
单维空间通常有两条决策边界,高维空间是复杂的非线性的边界。

MAP决策误差

概率误差等于未选择的类所对应的后验概率

图 6 MAP决策误差
MAP目标

最小化概率误差,当选用其他模型决策边界为下图中实线,此时若为R1类,则红色与绿色均是误差,若为R2类则蓝色部分是误差。MAP的决策边界下不存在红色区域,故误差最小。

图 7 MAP与其他模型决策误差比较

3.2 MAP分类器:高斯观测概率

先验和观测概率表达方式
  • 常数表达(P(Ci)=0.2)
  • 参数化解析表达(高斯分布等)
  • 非参数化表达(直方图、核密度、蒙特卡洛等)
观测概率:单维高斯分布

取观测似然概率为一维高斯分布

图 8 高斯分布P(x|Ck)

将高斯分布带入MAP分类器,取对数化简MAP的判别公式

若两个类的标准差σ相等,决策边界是线性的,只有一条
当两个类先验概率不同,因为决策边界会偏向(即靠近)先验概率小的类(该类在x轴上区域减小了),即更可能决策为先验概率高的类

若两个类的标准差σ不等,决策边界是非线性的,有两条
此时MAP分类器会倾向于选择方差较小(紧致)的类。

可以看到,MAP倾向于先验概率大、分布集中的类,同时解决了MED与MICD存在的问题。

观测概率:高维高斯分布

取观测似然概率为多维高斯分布

图 9 高维高斯分布P(x|Ci)

将高维高斯分布带入MAP分类器,取对数化简MAP的判别公式
其决策边界是一个超二次型,始终偏离MICD决策边界一定距离

3.3 决策风险与贝叶斯分类器

决策风险

贝叶斯决策错误会带来风险,不同的错误决策风险程度也不一致
可定义损失表征当前决策动作相对于其他候选类别的风险程度

损失:λ(αi|Cj),简写为λij,其中αi为决策动作,Cj是αi对应的决策类别
λ可以手动设置也可以通过学习训练而来
决策风险R(αi|x) = ∑λij*P(Cj|x)

贝叶斯分类器

在MAP分类器基础上,加入决策风险因素,就得到贝叶斯分类器
给定一个测试样本x,贝叶斯分类器选择决策风险最小的类

叒一小时过去了

贝叶斯决策的期望损失

给定单个测试样本,贝叶斯决策的损失就是决策风险R
对于所有样本,期望损失为所有样本决策损失之和

朴素贝叶斯分类器

贝叶斯分类器:决策目标:最小化期望损失
如果特征是多维的,那么特征之间的相关性会导致学习困难
因此通过假设特征之间符合独立同分布简化计算,此即朴素贝叶斯分类器

拒绝选项

MAP虽然是选择最大后验概率所属的类,但可能没比另一个类的概率高多少,例如在两个类别决策边界附近,这种决策并不确定

为了避免出现错误决策,就引入了拒绝选项,将这种情况划定为拒绝区域,拒绝分类

图 10 拒绝区域

3.4 最大似然估计

引言

在前述的贝叶斯决策中,求取后验概率需要事先知道每个类的先验概率似然概率,这两个概率分布需要通过机器学习算法得到

监督式学习方法

参数化方法:给定概率分布的解析表达,学习这些解析表达函数中的参数。比如假定分布服从高斯分布,就可以通过学习确定高斯分布的均值与方差,从而确定该分布。常用方法为最大似然估计和贝叶斯估计

非参数化方法:概率密度函数形式未知,基于概率密度估计技术,估计非参数化的概率密度表达

最大似然估计

待学习的概率密度函数记作p(x|θ),θ是待学习的参数,代表在θ下取到x的概率,是样本数据x的分布

从p(x|θ)采样N个符合iid条件(独立同分布)的训练样本,则所有样本联合概率密度为 L = p(x1, x2, ..., xn|θ) = ∏p(xi|θ),此即似然函数

极大似然估计就是在θ所有取值中试图找到一个能使数据出现概率最大的值,即 \(\hat{\theta}_{ML}=argmax _{\theta} \prod_{n=1}^{N} p\left(x_{n} \mid \theta\right)\),表示参数θ能最大化拟合样本数据x

观测概率估计:高斯分布

假定观测似然概率(p(x|θ))服从高斯分布,即 \(p(x|\mu, \Sigma) = \frac{1}{\sqrt{2\pi}\,\Sigma} e^{-\frac{(x-\mu)^2}{2 {\Sigma} ^2}}\),此时θ为高斯分布的\(\mu, \Sigma\)

Ci类(!注意,仅表示其中一个类)的似然函数就变为\(p\left(x_{1}, x_{2}, \ldots, x_{N_{i}} \mid \mu, \Sigma\right)=\prod_{n=1}^{N_{i}} \frac{1}{(2 \pi)^{\frac{p}{2}}|\Sigma|^{1 / 2}} e^{-\frac{1}{2}\left(x_{n}-\mu\right)^{T} \Sigma^{-1}\left(x_{n}-\mu\right)}\)

对上述Ci类的似然函数取对数,这可以防止概率连乘造成的下溢。再分别对μ与∑求偏导,并令导数为0...(经过复杂的运算)...最后可解出:
\(\hat{\mu}_{M L}=\frac{1}{N} \sum_{n=1}^{N_{1}} x_{n}\)
,即高斯分布的均值的最大似然估计等于所有样本的均值
\(\hat{\Sigma}_{M L}=\frac{1}{N} \sum_{n=1}^{N_{1}}\left(x_{n}-\hat{\mu}\right)\left(x_{n}-\hat{\mu}\right)^{T}\),高斯分布的协方差的最大似然估计等于所有所有样本的协方差

叕一小时过去了

3.5 最大似然的估计偏差

无偏估计

参数的估计量的数学期望是该参数的真值,则该估计量称作无偏估计,它意味着只要训练样本足够多,该估计值就是参数的真实值

高斯均值/协方差

求取\(E[\hat{\mu}_{ML}]=\ldots=\mu\),故均值的最大似然估计是无偏估计
同理求取\(E[\hat{\Sigma}_{ML}]=\ldots!=\Sigma\),故协方差的最大似然估计是有偏估计

高斯协方差估计偏差

协方差估计偏差为\(\frac{1}{N}\Sigma\),是一个较小的数,实际计算可以将训练样本的协方差乘以\(\frac{N}{N-1}\)来修正协方差的估计值

3.6 贝叶斯估计(1) -估计θ的后验概率

定义

贝叶斯估计:给定参数θ分布的先验概率p(θ)和训练样本,估计参数θ分布的后验概率

与最大似然估计MLP还是MAP不同,贝叶斯估计不直接估计参数θ的值,而是允许参数θ服从一定概率分布,然后求出θ的期望值作为其最终值

先验概率反映了关于θ的最初猜测及其不确定信息

参数的后验概率

给定单个Ci类的训练样本集合Di,针对θ应用贝叶斯理论,由于p(Di)是与θ无关的数,可记作1/α,根据iid条件得到其后验概率:
\(p\left(\theta \mid \mathcal{D}_{i}\right)=p\left(\theta \mid\left\{\boldsymbol{x}_{n}\right\}\right)=\alpha \prod_{n=1}^{N_{i}} p\left(\boldsymbol{x}_{n} \mid \theta\right) p(\theta)\quad *1\)

假设Ci类观测似然概率是单维高斯分布,且方差σ**2已知,则θ只是高斯分布的均值
\(p\left(\boldsymbol{x}_{n} \mid \theta\right) = \Nu\left(\theta,\ \sigma^2\right)\quad *2\)

假设θ的先验概率分布也服从单维高斯分布,且该分布的均值和方差(因为单维所以这里是方差而非协方差)已知
\(p\left(\boldsymbol{\theta} \right) = \Nu\left(\mu_{0},\ \sigma^{2}_{0}\right)\quad *3\)

带入上述*2、*3到*1,可得\(p\left(\theta \mid\left\{\boldsymbol{x}_{n}\right\}\right)\)表达式,记作*4,(太复杂不想写了)

*4展开,省略与θ无关项后可改写成高斯分布的形式(均值和方差记作\(\mu_{\theta}和\sigma_{\theta}\)
\(p\left(\theta \mid\left\{x_{n}\right\}\right) = \frac{1}{\sqrt{2\pi}\,\sigma_{\theta}} e^{-\frac{(\theta-\mu_{\theta})^2}{2 \sigma_{\theta}^2}}\quad *5\)

对比*4与*5,主要看θ的平方和一次方项的系数,于是可以解出参数\(\mu_{\theta}和\sigma^2_{\theta}\),记作*6,这样就得到了θ的后验概率,它是一个高斯分布,均值和方差为\(\mu_{\theta}和\sigma_{\theta}\)

观察*6,若先验方差\(\sigma_{0}=0\),意味先验确定性大,先验均值影响大,后续训练样本的进入对参数估计没有太多改变
\(\sigma_{0} \gg \theta\),意味先验确定性非常小。刚开始由于样本小估计不准,但随着样本增加,后验均值会逼近样本均值

叕又一小时过去了

总结

当训练样本个数Ni非常大时,\(\lim\mu_{\theta} = m\)\(\lim\sigma^2_{\theta} = 0\),样本均值m就是θ的无偏估计

贝叶斯估计具有不断学习的能力,它允许最初的、基于少量训练样本的、不太准确的估计,随着样本个数的增加,可以串行地不断修正参数估计值,从而达到该参数的期望真值

3.7 贝叶斯估计(2) -估计观测似然关于θ的边缘概率

利用θ的后验概率

给定单个Ci类的训练样本集合Di,由于θ取值很多,这里求θ的边缘概率(对θ求积分),进一步表达出P(x|Di):

图 11 关于θ的边缘概率P(x|Di)

带入后分成与θ相关或不相关的两部分,整理后发现观测似然概率可以看做是关于x的高斯分布:
\(p\left(x \mid D_{i} \right) = \Nu\left(\mu_{\theta},\ \sigma^{2}+\sigma^{2}_{\theta}\right)\)

贝叶斯估计vs

把参数看作参数空间的一个概率分布
贝叶斯估计依赖训练样本来估计参数的后验概率,从而得到观测似然函数的边缘概率: \(p\left(x \mid D_{i} \right)\)
这个边缘概率就是分类器最后要用到的观测似然概率

观察其表达式,\(\sigma^{2}_{\theta}\)代表了对于未知均值\(\mu\)的不确定性,随着样本个数增大,\(\mu_{\theta}\)趋近真实均值m。此时\(p\left(x \mid D_{i} \right) \rightarrow \Nu\left(\mu,\ \sigma^{2}\right)\),趋近于假设的真实的观测似然的分布

vs最大似然估计

把观测似然的参数θ看作确定值,即参数空间一个固定的点
最大似然估计有明确的目标函数,通过优化技术可以直接求取\(\theta_{ML}\),即求偏导就可得到估计值
而在贝叶斯估计里θ有多种取值的可能性,要先求θ的边缘概率才能得到观测似然,计算复杂度更高

3.8 KNN估计

引言

之前讲的贝叶斯估计等都是假设概率分布为高斯分布,但如果分布未知,就需要使用无参数估计技术来实现概率密度估计
常用的无参数估计技术:KNN、直方图、核密度,皆基于\(p(x) = \frac{k}{NV}\)去估计概率密度

叕双一小时过去了

KNN估计概念

K近邻估计,给定N个训练样本和k值,以待分类的样本x为中心,由内向外找到区域R,R里面包含k个训练样本,第k个样本与x距离记作\(d_{k}(x)\),则区域R的体积\(V = 2d_{k}(x)\)
概率密度估计表达为:\(p(x) \approx \frac{k}{2Nd_{k}(x)}\)
当训练样本个数N越大,k取值越大,概率估计越准确

KNN估计特点

优点:
根据训练样本分布的疏密情况,自适应确定区域R的范围

缺点:
KNN估计不是连续函数
也不是真正的概率密度表达,概率密度函数积分为∞而非1
推理测试阶段(训练完投入使用后)仍需要存储所有测试样本
易受噪声影响

KNN分类器

基于MAP分类器,假设每个类的观测似然函数基于KNN估计
(利用先验后验概率、观测似然等进行理论推导...)
=>
以测试样本x为中心出发找到与其距离最近的k个样本,这k个里占比最大的类别就作为x的类别

python实现
import numpy as np


class KNN():
    def train(self, X, y):
        self.X_train = X
        self.y_train = y

    def compute_distances_no_loops(self, X):
        num_test = X.shape[0]
        num_train = self.X_train.shape[0]
        dists = np.zeros((num_test, num_train))
        a = np.sum(X ** 2, axis=1).reshape(num_test, 1)
        b = np.sum(self.X_train ** 2, axis=1).reshape(1, num_train)
        dists = np.sqrt(a + b - 2 * np.matmul(X, self.X_train.T))
        return dists

    def predict_labels(self, dists, k=1):
        num_test = dists.shape[0]
        y_pred = np.zeros(num_test)
        for i in range(num_test):
            closest_y = []
            seq = np.argsort(dists[i])
            closest_y.extend(self.y_train[seq[:k]])
            cnt = dict.fromkeys(closest_y, 0)
            for l in closest_y:
                cnt[l] += 1
            cnt = sorted(cnt, key=cnt.get, reverse=True)
            y_pred[i] = cnt[0]
        return y_pred

    def predict(self, X, k=1):
        num_test = X.shape[0]
        num_train = self.X_train.shape[0]
        dists = np.zeros((num_test, num_train))
        a = np.sum(X ** 2, axis=1).reshape(num_test, 1)
        b = np.sum(self.X_train ** 2, axis=1).reshape(1, num_train)
        dists = np.sqrt(a + b - 2 * np.matmul(X, self.X_train.T))
        return self.predict_labels(dists, k=k)

3.9 直方图与核密度估计

引言

KNN需要存储所有测试样本,且易受噪声影响
=>使用其他方法

直方图估计概念

将特征空间划分为m个格子(bins),每个格子就是一个区域R,即区域的位置固定、大小固定,而k值不需要给定,与KNN相反。
概率密度估计表达为:\(p(x) = \frac{k_{m}}{Nh},\ if\ x \in b_{m}\)
其中\(b_{m}\)是第m个格子的名字,\(k_{m}\)是第m个格子里的样本数
可见直方图估计也不是连续的

直方图估计特点

优点:
固定区域R:减少噪声污染造成的估计误差
不需要存储训练样本

缺点:
固定R的位置:若x在相邻格子交界处,则当前格子不是以x为中心,导致统计和概率估计不准确
固定R的大小:缺乏概率估计的自适应能力,导致过于尖锐或平滑

直方图统计阶段:双线性插值

针对手动确定R导致R的位置固定,自适应能力不强的问题而提出

图 12 双线性插值

此时x并不是固定属于某个格子,而是按权重分属这两个格子,这两个格子的统计值\(k_{i}、k_{j}\)相应增加一定比例的x
虽然应用了双线性插值,但自适应能力仍然缺乏

核密度估计概念

为了解决knn已被噪声污染、直方图估计缺乏自适应能努力的问题

自适应R:以任意带估计样本x为中心,固定带宽h,依次确定一个区域R

定义一个窗口函数,以\(u = \frac{x-x_{n}}{h}\) 为中心的单位超立方体
窗口函数可写成一个核函数\(K\left(x \mid x_{n},\ h\right) = K\left(\frac{x-x_{n}}{h}\right)\)
训练样本落入R则核函数输出为1,否则为0
落入区域R的训练样本总数:\(k = \sum_{n=1}^{N} K\left(x \mid x_{n},\ h\right)\)

概率密度估计表达为:\(p(x) = \frac{1}{NV}\sum_{n=1}^{N} K\left(x \mid x_{n},\ h\right)\)

叕叒一小时过去了

核函数

核函数必须是对称函数
核函数可以是高斯分布、均匀分布、三角分布等
如果基于高斯核函数,则估计的概率密度是连续的

核密度估计特点

优点:
以x为中心,自适应确定R的位置(类似KNN)
使用所有训练样本,不是基于第k个近邻点来估计概率密度,没有KNN的噪声问题
若选取连续的核函数,则估计的概率密度也是连续的

缺点:
和直方图估计相比,核密度估计不提前根据训练样本估计每个格子统计值,仍然需要存储所有训练样本

带宽选择

原则:泛化能力
带宽h决定了估计概率的平滑程度,根据训练样本估计出来的概率分布要具有泛化能力

vs直方图

核密度估计比直方图估计更加平滑

图 13 核密度与直方图分布对比

终于结束了

posted @ 2021-05-03 18:05  NoNoe  阅读(283)  评论(1编辑  收藏  举报