zoukankan      html  css  js  c++  java
  • 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{ heta}_{ML}=argmax _{ heta} prod_{n=1}^{N} pleft(x_{n} mid heta ight)),表示参数θ能最大化拟合样本数据x

    观测概率估计:高斯分布

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

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

    对上述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} ight)left(x_{n}-hat{mu} ight)^{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条件得到其后验概率:
    (pleft( heta mid mathcal{D}_{i} ight)=pleft( heta midleft{oldsymbol{x}_{n} ight} ight)=alpha prod_{n=1}^{N_{i}} pleft(oldsymbol{x}_{n} mid heta ight) p( heta)quad *1)

    假设Ci类观测似然概率是单维高斯分布,且方差σ**2已知,则θ只是高斯分布的均值
    (pleft(oldsymbol{x}_{n} mid heta ight) = Nuleft( heta, sigma^2 ight)quad *2)

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

    带入上述*2、*3到*1,可得(pleft( heta midleft{oldsymbol{x}_{n} ight} ight))表达式,记作*4,(太复杂不想写了)

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

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

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

    叕又一小时过去了

    总结

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

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

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

    利用θ的后验概率

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

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

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

    贝叶斯估计vs

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

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

    vs最大似然估计

    把观测似然的参数θ看作确定值,即参数空间一个固定的点
    最大似然估计有明确的目标函数,通过优化技术可以直接求取( heta_{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}) 为中心的单位超立方体
    窗口函数可写成一个核函数(Kleft(x mid x_{n}, h ight) = Kleft(frac{x-x_{n}}{h} ight))
    训练样本落入R则核函数输出为1,否则为0
    落入区域R的训练样本总数:(k = sum_{n=1}^{N} Kleft(x mid x_{n}, h ight))

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

    叕叒一小时过去了

    核函数

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

    核密度估计特点

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

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

    带宽选择

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

    vs直方图

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

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

    终于结束了

  • 相关阅读:
    windows下plsql 设置 里面timestamp显示的格式
    HypericHQ
    POJ 3132 &amp; ZOJ 2822 Sum of Different Primes(dp)
    Fragment为载体可自己主动布局的CardView(GitHub上写开源项目初体验)
    Eclipse下配置Ant脚本 自己主动打包带签名的Android apk
    王立平--eclipse本地配置svn
    UVALive
    [Redis专辑][1]ubuntu12.04下安装php-redis的方法和步骤
    MapReduce&#160;图解流程
    打印1到最大的n位数
  • 原文地址:https://www.cnblogs.com/Stareven233/p/14725729.html
Copyright © 2011-2022 走看看