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

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'-hy);%Matrix operations 
    ol=l;
    l=s'*RX*y'-sum(log(1+exp(s'*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),'ro');
        hold on;
    else
        plot(rx(1,i),rx(2,i),'go');
        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.线性划分与数据点:

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值