首页 > 程序开发 > 软件开发 > 其他 >

malab实现 参数估计的梯度下降法

2016-12-16

malab实现 参数估计的梯度下降法:1 公式推导:na?ve贝叶斯可以获得函数的后验概率。

1.公式推导

na?ve贝叶斯可以获得函数的后验概率:

则:
且:
此式大于0时,此时P(Y=0|X)>P(Y=1|X),获得线性划分:公式
最大条件似然是求使:公式
出现最大值的情况(即W的取值)。
先对该式进行对数运算:

经过化简,获得:

对W中所有元素求偏导:

获得梯度下降需要的表达式:

将其转换为矩阵更新运算:
W=W+ηX(Y-hY)

2.具体matlab实现

x=[1,2,3,4,5,6,7,8,9,10,11,12;
   12,3,2,4,9,10,1,2,7,1,5,6];%two features
y=[1,0,0,0,1,1,0,0,1,0,1,1];%12 points
m=length(x(:,1));
n=length(x(1,:));
rx = x+ normrnd(0,2,m,n);%add noise
RX= ones(m+1,n);
for i=1:m
    RX(i+1,:)=rx(i,:);
end%Initialize
a=0.01;%Step length
s=ones(m+1,1);
s=s+0.3*sqrt(0.5)*randn(size(s));%Initialize W
hy=ones(n,1);
num=1;
l=s'*RX*y'-sum(log(1+exp(s'*RX))); %所求的最大表达式l(W)
rs=1;
while(rs>0.0001||rs<0)
    for i=1:n
       hy(i)=1-1/(1+exp(s(1)+s(2)*x(1,i)+s(3)*x(2,i)));%get hy
    end
    s=s+a.*RX*(y&#39;-hy);%Matrix operations 
    ol=l;
    l=s&#39;*RX*y&#39;-sum(log(1+exp(s&#39;*RX)));
    rs=l-ol;
    if(rs<0)
        a=a/2;
    end;
    num=num+1;
end
for i=1:n%Draw point
    if(y(i)==1)
        plot(rx(1,i),rx(2,i),&#39;ro&#39;);
        hold on;
    else
        plot(rx(1,i),rx(2,i),&#39;go&#39;);
        hold on;
    end
end
ss=ones(1,2);
ss(1)=-s(2)/s(3);
ss(2)=-s(1)/s(3);
xx = -10:0.1:20;
yy=polyval(ss,xx);
plot(xx,yy);%Linear classification 
hold on;

3.线性划分与数据点:

相关文章
最新文章
热点推荐