转载至:https://zhuanlan.zhihu.com/p/158682254
逻辑回归(Logistic Regression)是一个广泛使用的二分类算法,输出标签为 ,通过sigmoid函数将线性回归模型
得到的实值转化到0~1,sigmoid函数如下:
其曲线形状如下,当y值大于0.5时,标签输出为1,当y值小于0.5时,标签输出为0。
![](https://img.haomeiwen.com/i13239924/50fa4349c8e6a4d8.png)
查阅网上关于逻辑回归模型的推导,一般有两种方法,一种是周志华老师的西瓜书中提到的对率回归模型。
方式一:对率回归模型:
该模型不容易求导,所以两边取对数,得到如下模型:
m为样本的个数,除以m是为了取平均,防止数据过大导致利用梯度算法时变化过大。
--表示标签为1的概率
--表示标签为0的概率
对率回归模型反应的是每个样本其值属于真实标记的概率,概率越大则模型越好,所以这种模型需要求最大值,使用梯度上升法求解:
--学习率
方式二:损失函数
出现最多的模型推导方式还是取交叉熵求损失函数,交叉熵的公式如下:
x为取值,p(x)为取到x的概率,将和
带入得到:
损失函数要求越小越好,所以使用梯度下降法:
事实上,可以看出 ,所以最终两种推导方式得到的梯度模型是一样的。下面给出
和
的推导过程。
公式求导
其中为样本
的预测值,
,n为特征数,
为单个样本。
上面两个公式的推导均用到了微积分中两个重要的求导法则一个是求复合函数的链式求导法则,一个是除法求导法则[1]。
除法定则:设 为关于
的函数,则
关于
的导数可表示为:
链式法则
以对
求导为例:
其中
将上面公式转化为矩阵形式:
(求和)
,
代入梯度公式:
matlab代码:
```
load fisheriris %加载数据
%fisheriris的数据包含150*4的样本数据meas以及150*1的标签species,包含三种类别,
%均以字符给出,我们选取两种并将其转化为0,1。特征也是从4个里面选取最后两个。%sigmoid函数
function y=sigmoid(x)
y=zeros(length(x),1);
for i=1:length(x)
y(i)=1.0/(1+exp(-x(i)));
end
end
function [label,w,a,b]=logistic(meas,species)
meas1=meas(51:150,3:4);
meas1(:,1)=meas1(:,1)/max(meas1(:,1));
meas1(:,2)=meas1(:,2)/max(meas1(:,2));
species=species(51:150);
label=ones(100,1);
for i=1:length(meas1)
% if species(i)=="setosa"
% plot(meas1(i,1),meas1(i,2),"r*")
% hold on
if species(i)=="versicolor"
plot(meas1(i,1),meas1(i,2),"bx")
label(i)=0; hold on
elseif species(i)=="virginica"
plot(meas1(i,1),meas1(i,2),"g+")
hold on
end
end
[m,n]=size(meas1);
w = ones(n,1);
b=1;
alpha=0.0001;
maxCycle=5000000;
for k =1:maxCycle
h=sigmoid(meas1*w+b);
error=label-h;
w=w+alpha*meas1.'*error/m;
b=b+alpha*sum(error)/m;
end
x=0:0.01:1;
y=(-w(1)*x-b)/w(2);
plot(x,y)
for i=1:100
a=sigmoid(meas1*w+b);
end
end
```
![](https://img.haomeiwen.com/i13239924/634658a009511dbf.png)
网友评论