'感知机','k近邻','朴素贝叶斯'

’感知机’,‘k近邻’,'朴素贝叶斯’

一、模型的泛化能力?

学习方法的泛化能力是指由该方法学习到的模型对未知数据的预测能力;是学习方法本质上的重要性质。现实中采用最多的办法就是通过测试误差来评价学习方法的泛化能力。但这种评价是依赖于测试数据集的,因为测试数据集是有限的,很可能得到的评价结果是不可靠的。

简单说,模型的泛化能力是指已经训练好的模型,对于非训练数据集进行测试的误差程度;

二、梯度下降法的思想和内容。

梯度定义:

某一函数沿着某点处的方向到处可以以最快速度取到极大值,该方向导数定义为该函数的梯度。

=df(θ)\nabla = \frac{\text{df}\left( \theta \right)}{\text{dθ}}

其中,θ\theta是自变量;\nabla表示梯度;f(θ)f\left( \theta \right)是关于θ\theta的函数;

我们要解决的梯度下降的公式为:

θ= θ0ηf(θ0)\theta = \ \theta_{0} - \eta \bullet \nabla f\left( \theta_{0} \right)

其中,η\eta为步长,θ\theta是由θ0\theta_{0}按照上式更新后的值;

梯度下降法合理性证明:

由泰勒公式可知

f(θ) f(θ0)+(θθ0)f(θ0)f\left( \theta \right) \approx \ f\left( \theta_{0} \right) + \left( \theta - \theta_{0} \right) \bullet \nabla f\left( \theta_{0} \right)

因为θθ0\theta - \theta_{0}为矢量,而η\eta为标量,因此用vv表示θθ0\theta - \theta_{0}的单位,因此

θ θ0=ηv\theta - \ \theta_{0} = \eta \bullet v

其中θ θ0\theta - \ \theta_{0}应该尽可能小,原式替换为

f(θ) f(θ0)+ηvf(θ0)f\left( \theta \right) \approx \ f\left( \theta_{0} \right) + \eta v \bullet \nabla f\left( \theta_{0} \right)

由于局部下降的目的是希望每次更新的θ\theta都能让f(θ)f\left( \theta \right)变小,因此则有

f(θ)f(θ0)ηvf(θ0)<0f\left( \theta \right) - f\left( \theta_{0} \right) \approx \eta v \bullet \nabla f\left( \theta_{0} \right) < 0

其中因为η\eta为标量,且一般为正数,所以不等式转换为:

vf(θ0)<0v \bullet \nabla f\left( \theta_{0} \right) < 0

显然vv表示下一步前进的单位向量;f(θ0)\nabla f\left( \theta_{0} \right)表示当前位置的梯度方向;

若A,B均为向量,α\alpha为两个向量之间的夹角;

显然AB=ABcosαA \cdot B = \left\| A \right\| \cdot \left\| B \right\|{\cdot \cos}\alpha,因此若要AB乘积最小,则AB反向;

也就是vvKaTeX parse error: Undefined control sequence: \the at position 16: \nabla f\left( \̲t̲h̲e̲ ̲ta_{0} \right)互为反向,v和当前梯度方向相反能让v f(θ0)v \cdot \ \nabla f\left( \theta_{0} \right)最大程度小,也就保证了v的方向是局部下降最快的;

v= f(θ0) f(θ0)v = - \frac{\ \nabla f\left( \theta_{0} \right)}{\ \left\| \nabla f\left( \theta_{0} \right) \right\|}

因此带入θ θ0=ηv\theta - \ \theta_{0} = \eta \bullet v,所以θ =θ0η f(θ0) f(θ0)\theta\ = \theta_{0} - \eta \bullet \frac{\ \nabla f\left( \theta_{0} \right)}{\ \left\| \nabla f\left( \theta_{0} \right) \right\|}

因为 f(θ0)\ \left\| \nabla f\left( \theta_{0} \right) \right\|是标量,可以并入到进步因子η\eta,最终

θ =θ0ηf(θ0)\theta\ = \theta_{0} - \eta \bullet \nabla f\left( \theta_{0} \right)

梯度下降法:

函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,以此达到我们的优化目标:

gradf(x0,x1,,xn)=( f x0,, f xn)\text{grad}f\left( x_{0},x_{1},\cdots,x_{n} \right) = \left( \frac{\ \partial f}{\ \partial x_{0}},\cdots,\frac{\ \partial f}{\ \partial x_{n}} \right)

同时梯度和偏导数都是向量,那么参考向量运算法则

Repeat{

x0:=x0α f x0x_{0} : = x_{0} - \alpha\frac{\ \partial f}{\ \partial x_{0}}

\vdots

xj:=xjα f xjx_{j} : = x_{j} - \alpha\frac{\ \partial f}{\ \partial x_{j}}

\vdots

xn:=xnα f xnx_{n} : = x_{n} - \alpha\frac{\ \partial f}{\ \partial x_{n}}

}

三、感知机的原理;

模型定义:

假设输入空间是xRnx \subseteq R^{n}输出空间是y={+11}y = \left\{ + 1, - 1 \right\},由输入空间到输出空间的函数

f(x)=sign(wx+b)f\left( x \right) = sign\left( w \cdot x + b \right)称为感知机;

其中,W和b称为感知机模型参数,wRnw \in R^{n}叫做权重(weight)或权重向量,bRb \in R叫做偏置(bias);

感知机学习策略:

假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。为了找出这样的超平面需要定义经验损失函数并将其最小化;

损失函数的一个自然选择是误分类点总数,但是这样的损失函数不是参数w,b的连续可导函数不容易优化。因此另一个选择就是误分类点到超平面s的总距离,这就是感知机模型采用的。

对于误分类点xix_{i}到超平面SS的距离是

1wyi(wxi+b),ww- \frac{1}{\left\| w \right\|}y_{i}\left( w \cdot x_{i} + b \right),其中\left\| w \right\| 为w的范数

这样,假设误分类点的集合为M,那么所有误分类点到超平面S的总距离为

1wxiMyi (wxi+b)- \frac{1}{\left\| w \right\|}\sum_{x_{i} \in M}^{}{y_{i}\ \left( w \cdot x_{i} + b \right)}

不考虑1w\frac{1}{\left\| w \right\|},就得到了感知机学习的损失函数

L(w,b)=xiMyi (wxi+b)L\left( w,b \right) = - \sum_{x_{i} \in M}^{}{y_{i}\ \left( w \cdot x_{i} + b \right)}

这个损失函数就是感知机学习的经验风险函数,感知机学习的策略就是在假设空间中选取损失函数最小的模型参数w,bw,b

感知机学习算法:

感知机学习算法是误分类驱动的,具体采用随机梯度下降法。及消化的过程不是一次让M中所有误分类点的梯度下降,而是随机的选择其中一个分类点使其梯度下降;

原始形式:

a. 选取初始值w0,B0w_{0},B_{0}

b. 在训练集中选取数据(xi,yi){(x}_{i},y_{i)}

c. 如果yi (wxi+b)0,y_{i}\ \left( w \cdot x_{i} + b \right) \leq 0,ww+ηyixiw \leftarrow w + \eta y_{i}x_{i}bb+ηyib \leftarrow b + \eta y_{i}

d. 转至(b),直至训练数据集中没有误分类点;

其收敛性可以从(Novikoff)定理得知

yi(woptxi+bopt)γy_{i}\left( w_{\text{opt}} \cdot x_{i} + b_{\text{opt}} \right) \geq \gamma;k  ( Rγ )2k\ \leq {\ \left( \ \frac{R}{\gamma}\ \right)}^{2};

此外,当数据集线性可分的时候,感知机学习算法的原始形式是收敛的,而训练集线性不可分的时候,学习算法不收敛,迭代结果会发生震荡;

对偶形式:

设修改次数为n则ai= ηni\mathbf{a}_{\mathbf{i}}\mathbf{= \ }\mathbf{\eta}\mathbf{n}_{\mathbf{i}}原始形式中不难看出

w=j=1N(ajxjyj),b=j=1N(ajyj)w = \sum_{j = 1}^{N}\left( a_{j}x_{j}y_{j} \right),b = \sum_{j = 1}^{N}\left( a_{j}y_{j} \right)

实例点更新次数越多,意味着它距离分离超平面越近,也就越难正确分类,这样对结果影响最大;

a) a0a \leftarrow 0, b0\ b \leftarrow 0

b) 在训练集中选取数据(xi,yi){(x}_{i},y_{i)}

c) 如果yi j=1N(ajxjyjxi+b)0,y_{i}\ \sum_{j = 1}^{N}\left( a_{j}x_{j}y_{j} \cdot x_{i} + b \right) \leq 0,ww+ηyixiw \leftarrow w + \eta y_{i}x_{i},bb+ηyib \leftarrow b + \eta y_{i}

d) 转至(b),直至训练数据集中没有误分类点;

对偶形式中训练示例仅以内积的形式出现。为了方便,可以预先将训练集中实例间的内机计算出来并用矩阵的形式存储,这个就是所谓的Gram矩阵;

G=[xixj]n×nG = \left\lbrack x_{i} \cdot x_{j} \right\rbrack_{n \times n}

四、K近邻的原理;

核心原理:

  1. 根据给定的距离度量,在训练集TT中找出与xx最邻近的kk个点,涵盖这kk个点的xx的邻域记作Nk(x);N_{k}\left( x \right);

  2. Nk(x)N_{k}\left( x \right)中根据分类决策规则(如多数表决)决定xx的类别yy

相关细节:

  • K邻近算法的特殊情况是k=1k = 1的时候称为最邻近模型。

  • K近邻没有显示的学习过程

  • K近邻算法中,当训练集、距离度量(欧氏距离)、k值、分类决策规则(如多数表决)确定后,对于任何一个新的输入,他所属的类别唯一确定。每个训练点拥有一个单元,所有训练示例点构成对特征空间的划分每个单元都有其所在点的类标记;

  • 距离度量:度量距离通常用欧氏距离,也可用更一般的LpL_{p}距离(p根据情况取);

Lp(xi,xj)=(l=1nxi(l)xj(l)p)1nL_{p}\left( x_{i}{,x}_{j} \right) = \left( \sum_{l = 1}^{n}\left| x_{i}^{\left( l \right)} - x_{j}^{\left( l \right)} \right|^{p} \right)^{\frac{1}{n}}

  • K值:一般取一个比较小的数值,如果过小会造成过拟合,过大会让整体模型变得简单,通常采用交叉验证法来选取最优的k值

  • **分类决策规则:**往往是多数表决,多数表决等价于经验风险最小化;

  • K近邻算法主要需要考虑对训练数据进行快速k近邻搜索,为了提高k近邻搜索的效率,可以考虑使用特殊的结构存储训练的数据,具体方法有很多,kd树就是其中的一种;

五、朴素贝叶斯的原理;

基本方法:

朴素贝叶斯法对条件概率分布做了条件独立性假设。由于这是一个较强的假设,朴素贝叶斯法也因此得名,具体的,条件独立性假设是:

P(X=xy=ck)=P(X(1)=x(1),,X(n)=x(n)|y=ck)P\left( X = x|y = c_{k} \right) = P\left( X^{\left( 1 \right)} = x^{\left( 1 \right)},\cdots,X^{\left( n \right)} = x^{\left( n \right)} \middle| y = c_{k} \right)

=j=1nP(X(j)=x(j)|y=ck)1= \prod_{j = 1}^{n}{P\left( X^{\left( j \right)} = x^{\left( j \right)} \middle| y = c_{k} \right)}(1)

条件独立性假设等同于说用于分类的特征在类确定的条件下都是条件独立的。这一假设使得朴素贝叶斯比较简单,但也会牺牲准确率;

后验概率计算根据贝叶斯定理进行:

P(y=ckX=x)=P(X=xy=ck)P(y=ck)kP(X=xy=ck)P(y=ck)    2P\left( y = c_{k}|X = x \right) = \frac{P\left( X = x|y = c_{k} \right)P\left( y = c_{k} \right)}{\sum_{k}^{}{P\left( X = x|y = c_{k} \right)P\left( y = c_{k} \right)}}\text{\ \ \ \ }(2)

将(1)带入(2)中,就有朴素贝叶斯分类的基本公式,朴素贝叶斯分类器可表示为:

y=f(x)=arg maxckP(y=ck)j=1nP(X(j)=x(j)|y=ck)kP(y=ck)j=1nP(X(j)=x(j)|y=ck) {y = f\left( x \right) = {\text{arg\ }\max_{\text{ck}}}\frac{P\left( y = c_{k} \right)\prod_{j = 1}^{n}{P\left( X^{\left( j \right)} = x^{\left( j \right)} \middle| y = c_{k} \right)}}{\sum_{k}^{}{P\left( y = c_{k} \right)\prod_{j = 1}^{n}{P\left( X^{\left( j \right)} = x^{\left( j \right)} \middle| y = c_{k} \right)}}}}_{\ }

由于坟墓对所有的ckc_{k}都是相同的,所以

y=arg maxck P(y=ck)j=1nP(X(j)=x(j)|y=ck){y = \arg\ \max_{\text{ck}}}_{\ }P\left( y = c_{k} \right)\prod_{j = 1}^{n}{P\left( X^{\left( j \right)} = x^{\left( j \right)} \middle| y = c_{k} \right)}

后概率最大化:

朴素贝叶斯法将实力分到后验概率最大的类中,等价于期望风险最小化。假设

L(Y,f(x))={1,Yf(x)0,Y=f(x) L\left( Y,f\left( x \right) \right) = \left\{ \begin{matrix} 1,Y \neq f(x) \\ 0,Y = f(x) \\ \end{matrix} \right.\

其中f(x)f(x)为分类决策函数,此时期望风险函数为

Rexp(f)=E[L(Y,f(x))]R_{\exp}\left( f \right) = E\left\lbrack L(Y,f(x)) \right\rbrack

期望是对分布P(X,Y)P(X,Y)取的,由此条件期望

Rexp(f)=Ek=1k[L(ck,f(x))]P(ckX)R_{\exp}\left( f \right) = E\sum_{k = 1}^{k}{\left\lbrack L\left( c_{k},f\left( x \right) \right) \right\rbrack P(c_{k}|X)}

为了使期望风险最小化,只需对*X=xX = x*逐个极小化,由此得到

f(x)=argminyϵYk=1kL(ck,y)P(ck|X=x)f\left( x \right) = arg\min_{\text{yϵY}}{\sum_{k = 1}^{k}{L\left( c_{k},y \right)P\left( c_{k} \middle| X = x \right)}}

=argminyϵYk=1kP(yckX=x)= arg\min_{\text{yϵY}}{\sum_{k = 1}^{k}{P(y \neq c_{k}|X = x)}}

=argminyϵY(1P(y=ck|X=x))= arg\min_{\text{yϵY}}{(1 - P\left( y = c_{k} \middle| X = x \right))}

=argmaxyϵYP(y=ck|X=x)= arg\max_{\text{yϵY}}{P\left( y = c_{k} \middle| X = x \right)}

这样一来就根据风险最小化准则得到了后验概率最大化准则

f(x)= argmaxckP(y=ck|X=x)f\left( x \right) = \ arg\max_{\text{ck}}{P\left( y = c_{k} \middle| X = x \right)}

也就是朴素贝叶斯的原理;

朴素贝叶斯的参数估计:

极大似然估计:

在朴素贝叶斯法中,学习就意味着估计P(Y=ck)P(Y = c_{k})P(X(j)=x(j)|y=ck)P\left( X^{(j)} = x^{(j)} \middle| y = c_{k} \right),可以应用极大似然估计法(模型确定,且样本量大)估计相应的概率

先验概率:

P(Y=ck)=i=1nI(yi=ck)NP\left( Y = c_{k} \right) = \frac{\sum_{i = 1}^{n}{I(y_{i}{= c}_{k})}}{N}

条件概率:

P(X(j)=x(j)|y=ck)=i=1nI(xi(j)=ajlyi=ck)i=1nI(yk=ck)P\left( X^{(j)} = x^{(j)} \middle| y = c_{k} \right) = \frac{\sum_{i = 1}^{n}{I(x_{i}^{\left( j \right)} = a_{\text{jl}},y_{i}{= c}_{k})}}{\sum_{i = 1}^{n}{I(y_{k}{= c}_{k})}}

贝叶斯估计:

使用极大似然估计可能会出现索要估计得概率值为0的情况。这会影响到后验概率的计算结果,是分类产生偏差。解决方案是采用贝叶斯估计:

条件概率:

P(X(j)=x(j)|y=ck)=i=1nI(xi(j)=ajlyi=ck)+λi=1nI(yk=ck)+SjλP\left( X^{(j)} = x^{(j)} \middle| y = c_{k} \right) = \frac{\sum_{i = 1}^{n}{I\left( x_{i}^{\left( j \right)} = a_{\text{jl}},y_{i}{= c}_{k} \right) + \lambda}}{\sum_{i = 1}^{n}{I(y_{k}{= c}_{k})} + S_{j}\lambda}

先验概率:

P(Y=ck)=i=1nI(yi=ck)+λN+kλP\left( Y = c_{k} \right) = \frac{\sum_{i = 1}^{n}{I\left( y_{i}{= c}_{k} \right) + \lambda}}{N + k\lambda}

学习和分类算法:

  • 计算先验概率及条件概率

  • 对于给定的实例x,计算

P(y=ck)j=1nP(X(j)=x(j)|y=ck)P\left( y = c_{k} \right)\prod_{j = 1}^{n}{P\left( X^{\left( j \right)} = x^{\left( j \right)} \middle| y = c_{k} \right)}

  • 确定实例*xx*的类

y=arg maxck P(y=ck)j=1nP(X(j)=x(j)|y=ck){y = \arg\ \max_{\text{ck}}}_{\ }P\left( y = c_{k} \right)\prod_{j = 1}^{n}{P\left( X^{\left( j \right)} = x^{\left( j \right)} \middle| y = c_{k} \right)}

六、朴素贝叶斯简单实例;

原理:

朴素贝叶斯发法具体算法如上描述;

源码:

数据集来源《统计学习方法》63页例题一

%%---------------------程序入口---------------------

clc
clear
%书中例题实现朴素贝叶斯
%特征1的取值集合
A1=[1;2;3];
%特征2的取值集合
A2=[4;5;6];%S M L
AValues={A1;A2};
%Y的取值集合
YValue=[-1;1];
%数据集和
T=[ 1,4,-1;
    1,5,-1;
    1,5,1;
    1,4,1;
    1,4,-1;
    2,4,-1;
    2,5,-1;
    2,5,1;
    2,6,1;
    2,6,1;
    3,6,1;
    3,5,1;
    3,5,1;
    3,6,1;
    3,6,-1];
%训练朴素贝叶斯模型
theta = NBtrain(T(:, 1:size(T, 2) - 1), T(:, size(T, 2)), AValues, YValue);
%训练带la平滑的朴素贝叶斯模型
ltheta = LaplaceNBtrain(T(:, 1:size(T, 2) - 1), T(:, size(T, 2)), AValues, YValue, 1);
%测试两个数据与书中答案相符
correct = 0;
for i=1:length(T)
    if NBtest(theta, [T(i,1),T(i,2);], AValues, YValue)*T(i,3)==1
        correct = correct + 1;
    end
end
accuracy = correct/length(T);
disp(['极大似然做出参数估计对原始数据的准确率为'  num2str(accuracy)])


correct = 0;
 for i=1:length(T)
    if NBtest(ltheta, [T(i,1),T(i,2);], AValues, YValue)*T(i,3)==1
        correct = correct + 1;
    end
 end
accuracy = correct/length(T);
disp(['贝叶斯估计做出参数估计对原始数据的准确率为'  num2str(accuracy)])

%%---------------------使用训练模型进行预测---------------------

function y = NBtest(theta, X, AValues, YValue)
    Xindice=ones(size(X, 1), size(X, 2));
    %找到特征在取值集合中的下标,将X矩阵转化为下标矩阵
    for j=1:1:size(X, 2)
        AXi = AValues{j, 1};
        for i=1:1:size(X, 1)
            for t=1:1:size(AXi, 1)
                if(X(i, j) == AXi(t, 1))
                    Xindice(i, j) = t;
                    break
                end
            end
        end
    end
    %矩阵用于记录所有X在不同Yi下的P(X|Y)P(Y)
    Ys = zeros(size(X, 1), size(YValue, 1));
    PX_Y = theta{1,1};
    PY = theta{2,1};
    for i=1:1:size(Ys, 1)
        x=Xindice(i, :);
        for k=1:1:size(Ys, 2)
            ans = PY(k, 1);
            for j=1:1:size(x, 2)
                ans = ans * PX_Y{k, j}(x(1, j), 1);
            end
            Ys(i, k) = ans;
        end
    end
    Ys;
    %后验概率最大化
    y=zeros(size(Ys, 1), 1);
    for i=1:1:size(Ys, 1)
        max = -1;
        max_indice = 0;
        for j=1:1:size(Ys, 2)
            if(Ys(i, j) > max)
                max = Ys(i, j);
                max_indice = j;
            end
        end
        y(i, 1) = YValue(max_indice, 1);
    end
end

%---------------------极大似然估计---------------------

function theta=NBtrain(X,Y,AValues,YValue)
    %计算先验概率
    TY = zeros(size(YValue, 1), 1);
    for i=1:1:size(Y, 1)
        for j=1:1:size(YValue)
            if(Y(i, 1) == YValue(j, 1))
                Y(i,1);
                TY(j, 1) = TY(j, 1) + 1;
            end
        end
    end
    PY = TY/size(Y, 1);
    %计算条件概率
    PX_Y=cell(size(YValue, 1), size(X, 2));
    for k=1:1:size(YValue, 1)
        %条件y=yk
        for i=1:1:size(X, 2)
            %i为特征编号
            %取得第i个特征的取值集合
            XAi = AValues{i, 1};
            TXij_Y = zeros(size(XAi, 1), 1);
            for j=1:1:size(XAi, 1)
                %查找数据中所有Y=yk且特征i的值为Aij的数据个数并累加
                for t=1:1:size(X, 1)
                    if(Y(t, 1)==YValue(k, 1) && X(t, i) == XAi(j, 1))
                        TXij_Y(j, 1) = TXij_Y(j, 1) + 1;
                    end
                end
            end
            PX_Y{k, i} = TXij_Y/TY(k, 1);
        end
    end
    theta = cell(2,1);
    theta{1,1} = PX_Y;
    theta{2,1} = PY;
end
%---------------------贝叶斯估计---------------------

function theta=LaplaceNBtrain(X,Y,AValues,YValue,lambda)
    %计算先验概率
    TY = zeros(size(YValue, 1), 1);
    for i=1:1:size(Y, 1)
        for j=1:1:size(YValue)
            if(Y(i, 1) == YValue(j, 1))
                Y(i,1);
                TY(j, 1) = TY(j, 1) + 1;
            end
        end
    end
    PY = (TY + lambda)/(size(Y, 1) + lambda * size(YValue, 1));
    %计算条件概率
    PX_Y=cell(size(YValue, 1), size(X, 2));
    for k=1:1:size(YValue, 1)
        %条件y=yk
        for i=1:1:size(X, 2)
            %i为特征编号
            %取得第i个特征的取值集合
            XAi = AValues{i, 1};
            TXij_Y = zeros(size(XAi, 1), 1);
            for j=1:1:size(XAi, 1)
                %查找数据中所有Y=yk且特征i的值为Aij的数据个数并累加
                for t=1:1:size(X, 1)
                    if(Y(t, 1)==YValue(k, 1) && X(t, i) == XAi(j, 1))
                        TXij_Y(j, 1) = TXij_Y(j, 1) + 1;
                    end
                end
            end
            PX_Y{k, i} = (TXij_Y + lambda)/(TY(k, 1) + lambda * size(XAi, 1));
        end
    end
    theta = cell(2,1);
    theta{1,1} = PX_Y;
    theta{2,1} = PY;
end

实验结果:

在这里插入图片描述

发布了5 篇原创文章 · 获赞 0 · 访问量 160
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览