逻辑回归(Logistic regression)
前面几篇文章都是在讨论回归问题,从这一部分开始,过渡到分类问题。第一篇文章中曾经写过:如果输出值为连续值,则可归为回归问题;如果输出值为若干离散值,则为分类问题。
从最简单的问题开始,我们假设输出值y只有两个值{0,1}。这时,如果用线性回归,我们很难找到符合要求的线性函数,于是,采用另一种回归——逻辑回归。
在线性回归中,我们假设其“规律”为一个线性函数:
而在逻辑回归中,我们假设其“规律”为一个逻辑函数:
其中,
称为逻辑函数或sigmoid函数。
逻辑函数的图形如下:
这是一条很优美的s型曲线,z大于0,g(z)大于0.5,z小于0,g(z)小于0.5;z趋于无穷大时,g(z)趋近于1,z趋于无穷小时,g(z)趋近于0.
另外,逻辑函数的导数有如下性质:
接下来,我们开始将概率方面的东西引入逻辑回归。P(y = 1 | x; θ)表示:当θ确定时,输入为x时,输出y可能为1的概率。不妨假设:
根据上面的假设,可以以更紧凑的方式写出输出y的概率密度函数
如果训练集中每一个样本都是独立生成的,那就可以得到似然函数的表达式:
所谓似然函数,可以这么理解:对于某一个θ,训练集是X时,输出为y的可能性有多大。怎样衡量可能性呢?这里是通过计算每一个训练样本的输出可能为目标值的概率,然后再将所有样本的这些概率相乘。
我们的目的,自然是找到一个θ,使似然函数取得最大值。与线性回归类似,我们可以采用梯度上升的方法来获取θ: (注意:梯度上升方法是用“+”,而梯度下降方法用“-”)
对于一个训练样本,有:
l(θ)是似然函数的对数形式:l(θ)=logL(θ).由此,可以得到更新策略:
它与随机梯度下降算法很相似。
思考:1.为什么要假设P(y = 1 | x; θ) = hθ(x)?
我的答案:hθ(x) = g(θTx) 是输入为x时,对输出的一种假设。这里还有一层隐含的含义:θTx实际上是对样本的一种线性划分。若θTx<0,则表示将x划分到输出为y=0那一类,此时P(y = 1 | x; θ)自然应该较小;若θTx>0,则表示将x划分到输出为y=1那一类,此时P(y = 1 | x; θ)自然应该较大。而sigmoid函数完全符合这一映射要求。
2.讲义上的问题:上面得到的更新策略与随机梯度下降算法很相似,但它却是与线性回归完全不同的概念,为什么会出现这种情况?
我的答案:线性回归是调整θ,使得hθ(x)符合样本的固有规律;而逻辑回归则相反,它是对样本点进行一个映射,使得映射后的样本点分布符合sigmoid函数的规律。但它们的相同点是,都有一个渐进逼近的过程,所以产生的更新策略会很相似。
matlab代码如下:
%logicRegressionTrain function is used to train samples using logic
%regression.%FEATURE is the features of the samples.%VALUE is the output of the samples.%THETA is parameter of the hypotheses.function [theta] = logicRegressionTrain(feature,value)length = size(feature,2);num = size(feature,1);features = [ones(num,1) feature];theta = zeros(length + 1,1);alpha = 0.005/(num*10);%theta = 1 + rand(1,length + 1);for i = 1:100000; delta = value - h_func(features,theta);% costvalue = delta'*delta;% if costvalue < 1e-10;% display 'break the if condition'% break;% end theta = theta + alpha*features'*delta;% theta(1) = theta(1) + alpha*sum(delta.*features(:,1));% theta(2) = theta(2) + alpha*sum(delta.*features(:,2));endtheta = theta/theta(1);end
function [hypVal] = h_func(features,theta)
rate = features*theta;hypVal = 1./(1 + exp(-rate));end