逻辑斯蒂回归模型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
逻辑斯蒂回归模型(logistic regression model )------分类模型
1、 二项逻辑斯蒂回归模型
)
exp(1)
exp()1(b x w b x w x Y P +⋅++⋅== )
exp(11)0(b x w x Y P +⋅+== 其中 是参数和是输出,是输入,R R Y R x n n ∈∈∈∈b w {1,0}
对于给定的输入x ,按照上两式求出)0(x Y P =、)1(x Y P =,将实例x 分到概率较大的那一类
为了方便我们将权值向量w 和输入x 加以扩充
)
exp(1)exp()0()exp(1)exp()1(),,,,,(,)1,,,,(x 32121x w x w x Y P x w x w x Y P b w w w w w x x x T
n T n ⋅+⋅==⋅+⋅==⋯⋯=⋯⋯=,这样令 对于模型的参数w 的估计,采用极大似然估计法
设 )(1)0()
()1(x x Y P x x Y P φφ-====,给定训练集T={(x1,y1)(x2,y2)……(xl,yl )}
似然函数为
[][]i i
y i y L i i x x -=-∏11
)(1)(φφ 对数似然函数为 )]
exp(1log()([)](1log()(1)(log [)(11i i L i i i i i L
i i x w x w y x x x y w f ⋅+-⋅=-+-=∑∑==φφφ
对)(w f 求极大值,得到w 的估计值
以对数似然函数为目标函数的最优化问题是一个无约束最优化问题,通常采用最速下降法、拟牛顿法
最速下降法程序
基于Armijo 非精确线搜索的最速下降法Matlab 程序
function [x,val,k]=grad(fun,gfun,x0)
%功能: 用最速下降法求解无约束问题: min f(x)
%输入: x0是初始点, fun, gfun 分别是目标函数和梯度
%输出: x, val 分别是近似最优点和最优值, k 是迭代次数.
maxk=5000; %最大迭代次数
rho=0.5;sigma=0.4;
k=0; epsilon=1e-5;
while(k<maxk)
g=feval(gfun,x0); %计算梯度
d=-g; %计算搜索方向
if(norm(d)<epsilon), break; end
m=0; mk=0;
while(m<20) %Armijo搜索
if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g’*d) mk=m; break;
end
m=m+1;
end
x0=x0+rho^mk*d;
k=k+1;
end
x=x0;
val=feval(fun,x0);
BFGS 算法程序
基于Armijo 搜索的BFGS 算法的Matlab 程序
function [x,val,k]=bfgs(fun,gfun,x0,varargin)
%功能: 用BFGS算法求解无约束问题: min f(x)
%输入: x0是初始点, fun, gfun分别是目标函数及其梯度;
% varargin是输入的可变参数变量, 简单调用bfgs时可以忽略它, % 但若其它程序循环调用该程序时将发挥重要的作用
%输出: x, val分别是近似最优点和最优值, k是迭代次数.
maxk=500; %给出最大迭代次数
rho=0.55;sigma=0.4; epsilon=1e-5;
k=0; n=length(x0);
Bk=eye(n); %Bk=feval(’Hess’,x0);
while(k<maxk)
gk=feval(gfun,x0,varargin–:˝); %计算梯度
if(norm(gk).epsilon), break; end %检验终止准则
dk=-Bk“gk; %解方程组, 计算搜索方向
m=0; mk=0;
while(m.20) % 用Armijo搜索求步长
newf=feval(fun,x0+rho^m*dk,varargin–:˝);
oldf=feval(fun,x0,varargin–:˝);
if(newf.oldf+sigma*rho^m*gk’*dk)
mk=m; break;
end
m=m+1;
end
%BFGS校正
x=x0+rho^mk*dk;
sk=x-x0; yk=feval(gfun,x,varargin–:˝)-gk;
if(yk’*sk.0)
Bk=Bk-(Bk*sk*sk’*Bk)/(sk’*Bk*sk)+(yk*yk’)/(yk’*sk); end
k=k+1; x0=x;
end
val=feval(fun,x0,varargin–:˝);。