1 - Classification
Logistic Regression解决的并不是regression问题,而是分类(Classification)问题。例如:Email(Spam/Not)、Tumor(Malignant/Benign)
此时,不能再用Linear Regression的Gradient Descent方法来拟合了,现在的问题需要用Logistic Regression来解决,对用的Hypothesis函数取值范围必须在0-1之间。
2 - Hypothesis Representation 拟合函数
- Hypothesis:
hθ(x)=g(θTx)
- hθ(x) 代表y=1的可能性的大小
- 若h大于0.5,那么就取1,如果小于0.5就取0.
- Sigmoid function/Logistic function:
g(z)=11+e−z
- 当 z >=0,0.5 <= y < 1
- 当 z< 0,0 < y < 0.5
3 - Decision Boundary 分类边界
- 对于2中的公式,可知,当 θTx >= 0 时,y = 1; 当 θTx < 0 时,y = 0。此时 θTx >= 0 即为Decision Bounday。
- 分类边界类型:
- 直线: hθ(x)=g(θ0+θ1x1+θ2x2)
- 圆: hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x22)
- 更复杂的: hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x21x2+θ5x21x22+θ6x31x2)
4 - Cost Function 代价函数
J(θ)=1m∑i=1mCost(hθ(x(i)),y(i))Cost(hθ(x),y)={−log(hθ(x))ify=1−log(1−hθ(x))ify=0Note:y=0or1always
- 关于Cost函数
- 通过maximum likelihood estimation(即极大似然估计)计算得来。
- 之所以不用原来线性回归的误差公式,是因为Sigmoid函数的存在会使J函数最终的结果不是凸函数,存在多个极值点。
5 - Simplified Cost Function and Gradient Descent 简化的代价函数、梯度下降法
- Cost Function:
J(θ)=1m∑i=1mCost(hθ(x(i)),y(i))=−1m[∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
现在要求的是满足时的 θ 的取值,那么可以采用Gradient Descent方法来求得:
Repeat{θj:=θj−α∂∂θjJ(θ)(simultaneouslyupdateallθj)}而代入偏导结果之后是:
Repeat{θj:=θj−α∑(i)m(hθ(x(i))−y(i))x(i)j(simultaneouslyupdateallθj)}梯度下降公式与线性回归中的完全相同!
6 - Advanced Optimization 高级优化
6.1 计算条件
要想计算Cost function的最小值,除了Gradient Descent还有其他方法。首先理清计算条件:
- J(θ)
- ∂∂θjJ(θ)
- θ初值
6.2 其他算法
主要有:
- Conjugate gradient
- BFGS
- L-BFGS
与Gradient Descent相比较,这些算法:
- 优点:
- 不需要人工选择α的值
- 通常比gradient descent运行快
- 缺点:
- 更加复杂(实现起来比较)
6.3 高级算法的使用方法
- 实现一个costFunction:
- 输入:theta(列向量)
- 输出:jVal(误差的值)、gradient(θ的调整量,列向量)
- 调用fminunc函数:
- 输入:@costFunction,initialTheta,options
- 输出:optTheta(计算出的θ值),functionVal(最小误差),exitFlag
- 其中:options为函数参数选项,例如
options = optimset('GradObj', 'on', 'MaxIter', 100);
示例:
function [jVal, gradient] = costFunction(theta)
jVal = (theta(1)-5)^2 +(theta(2)-5)^2;
gradient = zeros(2,1);
gradient(1) = 2*(theta(1)-5);
gradient(2) = 2*(theta(2)-5);
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options);
7 - Multiclass Classification- One-vs-all
多值分类问题:
- Email tagging:Work、Friends、Family、Hobby
- Medical diagrams:Not ill、Cold、Flu
- Weather:Sunny、Cloudy、Rain、Snow
解决办法:One-vs-all(one-vs-rest)
- 为每一个类别训练一个logsitic regression分类器。
- 当输入x时,分别计算每个分类器的hθ(x)的值,选取最大的作为其分类。