[Machine Learning]学习笔记-Logistic Regression
模型-二分类任务
Logistic regression,亦称logtic regression,翻译为“对数几率回归”,是一种分类学习方法。和先前的线性回归模型不同的是,输出的y一般是离散量的集合,如输出(y in {0,1})的二分类任务。
考虑二分类任务,线性回归模型产生的(Z= heta ^TX)是连续的实值,需要用一个函数(g( heta ^TX))将z转换为0/1值。
![](https://ws4.sinaimg.cn/large/006tNc79gy1fl995wy1bgj31kw1037ce.jpg)
可以采用对数几率函数(Logistic Function,亦称Sigmoid Function):
[g(z)=frac{1}{1+e^{-z}}
]
至此,可以确定假设方程(h_ heta(x))的形式:
[egin{align*}& h_ heta (x) = g ( heta^T x )
ewline
ewline& z = heta^T x
ewline& g(z) = dfrac{1}{1 + e^{-z}}end{align*}
]
令(y=g(z)),可得:
[ln frac{y}{1-y}= heta^T x
]
若将y视为样本为正例的可能性,则1-y为反例可能性。
上式可重写为:
[ln frac{p(y=1 | x ; heta)}{p(y=0 | x ; heta)}= heta^T x
]
显然有:
[p(y=1 | x ; heta)=frac{e^{ heta^T x}}{1+e^{ heta^T x}}=h_ heta (x)
\p(y=0 | x ; heta)=frac{1}{1+e^{ heta^T x}}=1-h_ heta (x)
]
可以由极大似然法(maximum likelihood method)来估计( heta),
最大化似然概率(L( heta)),即令每个样本属于其真实标记的概率越大越好:
[egin{equation*}
egin{split}
L(oldsymbol{ heta}) & =p(mathbf{y}|mathbf{X}; oldsymbol{ heta}) \
& =prod_{i=1}^{m}p(y_{i}|mathbf{x}_{i}; oldsymbol{ heta}) \
& =prod_{i=1}^{m} (h_{oldsymbol{ heta}}(mathbf{x}_{i}))^{y_{i}} (1-h_{oldsymbol{ heta}}(mathbf{x}_{i}))^{1-y_{i}}
end{split}
end{equation*}
]
为了方便求导,对等式两边同时取对数,将(L( heta))转换为凸函数(convex function),可得:
[egin{equation*}
egin{split}
l(oldsymbol{ heta}) & = ext{log}L(oldsymbol{ heta}) \
& = sum_{i=1}^{m} y_{i} ext{log} h_(mathbf{x}_{i})+(1-y_{i}) ext{log}(1-h_(mathbf{x_i}))
end{split}
end{equation*}
]
要使(l( heta))达到最大值,可以构造代价函数(J( heta)):
[J( heta) = - frac{1}{m} displaystyle sum_{i=1}^m [y^{(i)}log (h_ heta (x^{(i)})) + (1 - y^{(i)})log (1 - h_ heta(x^{(i)}))]
]
接下来就可以用梯度下降法求得(J( heta))的最小值了。
[egin{align*}& Repeat ; lbrace
ewline & ; heta_j := heta_j - alpha dfrac{partial}{partial heta_j}J( heta)
ewline &
braceend{align*}
]
求偏导:
[egin{equation*}
egin{split}
frac{partial }{partial heta_{j}}l(oldsymbol{ heta}) & = -frac{1}{m}left ( frac{y}{g(oldsymbol{ heta}^{T}mathbf{x})}-frac{1-y}{1-g(oldsymbol{ heta}^{T}mathbf{x})}
ight) frac{partial }{partial heta_{j}} g(oldsymbol{ heta}^{T}mathbf{x}) \
& =-frac{1}{m}left( frac{y}{g(oldsymbol{ heta}^{T}mathbf{x})}-frac{1-y}{1-g(oldsymbol{ heta}^{T}mathbf{x})}
ight) g(oldsymbol{ heta}^{T}mathbf{x}) (1-g(oldsymbol{ heta}^{T}mathbf{x})) frac{partial }{partial heta_{j}} oldsymbol{ heta}^{T}mathbf{x} \
& =-frac{1}{m}left( y(1-g(oldsymbol{ heta}^{T}mathbf{x})) -(1-y) g(oldsymbol{ heta}^{T}mathbf{x})
ight)x_{j} \
& =-frac{1}{m}(y-g(oldsymbol{ heta}^{T}mathbf{x}))x_{j} \
& =frac{1}{m}(h_{oldsymbol{ heta}}(mathbf{x})-y)x_{j} \
end{split}
end{equation*}]
化简后可得:
[egin{align*} & Repeat ; lbrace
ewline & ; heta_j := heta_j - frac{alpha}{m} sum_{i=1}^m (h_ heta(x^{(i)}) - y^{(i)}) x_j^{(i)}
ewline &
brace end{align*}
]
week 3的课中介绍了matlab中采用梯度下降法的优化函数:fminunc
只要写出如下形式的代价函数后:
function [J, grad] = costFunction(theta, X, y)
J = 0;
grad = zeros(size(theta));
rows=size(X,1);
cols=size(X,2);
hx=sigmoid(X*theta); %rows*1的h_theta(x^i)的值
for i=1:rows
J=J-1/m*(y(i)*log(hx(i))+(1-y(i))*log(1-hx(i)));
for j=1:cols
grad(j)=grad(j)+1/m*(hx(i)-y(i))*X(i,j);
end
end
就可以调用该函数计算出( heta)和J:
options = optimset('GradObj', 'on', 'MaxIter', 400);
% Run fminunc to obtain the optimal theta
% This function will return theta and the cost
[theta, cost] = ...
fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
这篇博客中介绍了详细用法,先mark一下。
多分类任务
基本解决思路是将多分类任务拆解为若干个二分类任务求解。
最经典的拆分策略有三种:"一对一"(OvO),“一对其余”(OvR)和多对多(MvM)。
在这里介绍下OvR:对于N个类别,分别训练N个分类器,每个分类器仅将一个类作为正例,其余作为反例。最后将置信度最大的分类器的结果作为预测的结果。如下:
[egin{align*}& y in lbrace0, 1 ... n
brace
ewline& h_ heta^{(0)}(x) = P(y = 0 | x ; heta)
ewline& h_ heta^{(1)}(x) = P(y = 1 | x ; heta)
ewline& cdots
ewline& h_ heta^{(n)}(x) = P(y = n | x ; heta)
ewline& mathrm{prediction} = max_i( h_ heta ^{(i)}(x) )
ewlineend{align*}
]