您的位置:首页 > 编程语言 > MATLAB

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

2016-12-15 23:50 519 查看

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.线性划分与数据点:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 机器学习
相关文章推荐