2018-05-06
## 第三周 Logistic Regression逻辑回归
### 1 Classification and Representation
#### 1.1 分类Classification
要尝试分类,一种方法是使用线性回归,并将所有大于0.5的预测值映射为1,将小于0.5的所有预测值映射为0.但是,此方法不适用,因为分类实际上不是线性函数。
**二元分类问题(binary classification problem)**
y只有两个值,0或1;
例如:我们为电子邮件系统构建垃圾分类器,然后$x^{(i)}$可能是某件邮件的某些功能,如果它是一封垃圾邮件,则y是1;否则为0;因此 $y \in [0,1]$. 0也被称为负类,1为正类;有时用符号'-'和'+'表示。
#### 1.2 Hypothesis Representation 假设函数的表现形式
逻辑回归模型 $h_\theta(x) = g(\theta^Tx)$
希望 $0 \leq h_\theta(x) \leq 1$
$z = \theta^Tx$
$g(z) = \frac{1}{1+e^{-z}}$
**g(z)是逻辑函数(logistic function) 或者S型函数(sigmoid function)**
以上两个函数合并,得到$h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}$
![逻辑函数图](picture/third_week/logistic_function_1.png)
图中显示函数g(z)将任何实数映射到(0,1)之间
$h_\theta(x) = P(y=1|x;\theta)=1-P(y=0|x;\theta)$
$P(y=1|x;\theta)+P(y=0|x;\theta)=1$
其中P表示概率probability,是输出y=1的概率
例如: $h_\theta(x) = 0.7$
对于一个特征为x的患者,y=1的概率是0.7,肿瘤是恶性的概率是70%
#### 1.3 Decision Boundary决策边界
$h_\theta(x) = g(\theta^Tx)$
$z = \theta^Tx$
假设预测结果 'y =1' if $h_\theta(x) \geq 0.5$
那么$g(z) \geq 0.5$
如图:当x轴代表的z值大于0时,g(z)大于0.5;所以$z \geq 0$; 又$z = \theta^Tx$
> 记住(数学运算,目前不太理解)
$z=0, e^0 = 1 => g(z)=\frac{1}{2}$
$z \to\infty, e^{\infty}\to0 => g(z)=1$
$z \to-\infty, e^\infty \rightarrow \infty => g(z)=0$
结论 $\theta^Tx \geq 0$
同样,预测 'y=0' if $h_\theta(x) < 0.5 $
$\theta^Tx < 0$
***决策边界是假设函数的一个属性***,不是数据集的属性
![](picture/third_week/decision_boundary_1.png)
> 不是用训练集来定义决策边界,而是用训练集来拟合参数θ,***给定了参数向量θ,决策边界就确定了***
> 决策边界是分隔y = 0和y = 1的区域的线。它由我们的假设函数创建。
非线性决策边界
![](picture/third_week/decision_boundary_2.png)
高阶多项式特征变量,可以得到非常复杂的决策边界
***
### 2 Logistic Regression Model
#### 2.1 Cost Function 代价函数拟合参数
Linear regression :$J(\theta)=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_\theta(x^{(i)}-y^{(i)})^2$
$Cost(h_\theta(x^{(i)}, y^{(i)})=\frac{1}{2}(h_\theta(x^{(i)}-y^{(i)})^2$
$$J(\theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_\theta(x^{(i)}, y^{(i)})$$
去掉上标i,得到
$Cost(h_\theta(x), y)=\frac{1}{2}(h_\theta(x)-y)^2$
得到关于$h_\theta(x)$和y的公式,平方误差的1/2;预测值是$h_\theta(x)$,实际结果是y;
![](picture/third_week/cost_function_1.png)
逻辑回归的代价函数
![](picture/third_week/cost_function_2.png)
Cost =0 if y=1, $h_\theta(x)=1$
如果 $h_\theta(x) \to 0 => Cost \to \infty$
![](picture/third_week/cost_function_3.png)
> $Cost(h_\theta(x),y) =0\quad if\quad h_\theta(x)=y$
$Cost(h_\theta(x),y) \to \infty \quad if\ y =0\ and\quad h_\theta(x) \to 1$
$Cost(h_\theta(x),y) \to \infty \quad if\ y=1\ and \quad h_\theta(x) \to 0$
![](picture/third_week/cost_function_4.png)
#### 2.2 Simplified Cost Function and Gradient Descent
$Cost(h_\theta(x), y)=\begin{cases}
-log(h_\theta(x)) & if\ y = 1 \\
-log(1-h_\theta(x)) & if\ y = 0 \\
\end{cases}$
> 注意:y=0 or 1
整合一个公式:
$Cost(h_\theta(x),y)=-y \cdot log(h_\theta(x))-(1-y)log(1-h_\theta(x))$
if y=1, 代入公式,得到
$Cost(h_\theta(x), y)=-log(h_\theta(x))$
if y=0,代入公式,得到
$Cost(h_\theta(x), y)=-log(1-h_\theta(x))$
逻辑回归的代价函数:
$$\begin{align}
J(\theta) &=\frac{1}{m}\sum_{i=1}^{m}Cost(h_\theta(x^{(i)}), y^{(i)}) \\
&=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_\theta(x^{(i)}+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]
\end{align}$$
矢量化实现:
$h= g(X\theta)$
$J(\theta)=\frac{1}{m} \cdot(-y^Tlog(h)-(1-y)^Tlog(1-h))$
**梯度下降:**
期望得到 $min_\theta J(\theta):$
Repeat {
$\theta_j := \theta_j - \alpha\frac{\delta}{\delta\theta_j}J(\theta)$
}
> 注意: simultaneously update all同时更新所有的$\theta_j$
其中,$\frac{\delta}{\delta\theta_j}J(\theta)=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
Repeat {
$$\theta_j := \theta_j - \frac{\alpha}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j$$
}
> 注意:这里的$h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}$
***梯度下降的矢量化实现:***
$\theta := \theta - \frac{\alpha}{m}X^T(g(X\theta)-y)$
![](picture/third_week/cost_function_5.png)
#### 2.3 Advanced Optimization 高级优化算法/概念
代价函数J(θ),希望得到最小的minJ(θ),通过梯度下降算法算出J(θ)及偏导数项
梯度下降算法不是我们可以使用的唯一算法,还有更高级,更复杂的算法计算这两项,这些算法就是为我们优化代价函数的不同方法
优化算法:
- Gradient Descent
- Conjugate gradient
- BFGS (共轭梯度/变尺度法)
- L-BFGS (限制变尺度法)
以上算法的优缺点:
通常不需要手动选择学习率α(这些算法的思路:给出计算导数项和代价函数的方法,可以认为算法有一个智能的内部循环,称为线性搜素linear search算法,它可以尝试不同的学习率α并自动选择一个好的学习速率α,甚至可以为每次迭代选择不同的学习速率)
收敛快于梯度下降
缺点:比梯度下降复杂
建议:不要自己编写这些更复杂的算法(除非您是数值计算方面的专家),而是使用这些库,因为它们已经过测试和高度优化
首先,提供一个函数,来评估给定输入值θ的以下两个函数:J(θ),$\frac{\delta}{\delta\theta_j}J(\theta)$
![](picture/third_week/advanced_optimization_1.png)
上图中返回的第一个参数是代价函数J值,第二个参数是梯度值;
![](picture/third_week/advanced_optimization_3.png)
高级优化函数fminunc():表示Octave里无约束最小化函数;调用方式如下:
options变量:存储配置;**'GradObj','on'**:设置梯度目标参数为打开(on)
**'MaxIter','100':**迭代次数,100次;
initialTheta: 给出θ的猜测初始值,向量必须是d维的,$d \geq 2$
@:函数指针
例题:
![](picture/third_week/advanced_optimization_2.png)