Part1-逻辑回归
由于编程没有使用Octave,所以关于Octave语言部分跳过
分类
例:
垃圾邮件分类、欺诈分类、肿瘤分类等
在以上这些例子中,我们所预测的结果y,都是可以有两个取值的变量,0或1,通常使用”0“来表示负类,用”1“来表示正类,因此,这也被称为二分类问题
类似的,结果y可以选取多个值的情况,被称为多分类问题
那么,如何设计一个分类算法呢?
以肿瘤分类为例,如图所示,我们可以将我们学过的线性回归算法应用到这个数据集,用直线对数据进行拟合, 如果想做出预测,可以将分类器输出的阈值设为0.5,即:
如果\(h_\theta(x) \ge 0.5\),则\(y=1\)
如果\(h_\theta(x) < 0.5\),则\(y=0\)
但是,这种方法,如果对于样本数据有一个新增异常的话,则会得到不一样的结果,如图,就会将一些不应该分类为"0"的数据分类为"0"
此外,对于线性回归的结果,是可以大于1或小于0的,而分类问题的标签通常都是"0"或"1"
综上所述,将线性回归用于分类问题并不是一个较好的方法
假设陈述
逻辑回归模型:
期望:\(0 \le h_\theta(x) \le 1\)
对于线性回归,假设:\(h_\theta(x)=\theta^Tx\)
对于逻辑回归,\(h_\theta(x)=g(\theta^Tx)\),并且定义函数g:\(g(z)=\frac{1}{1+e^{-z}}\),g也被称为激活函数或logistic 函数
即:\(h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}\)
激活函数\(g(z)\)如图:
假设输出的解释:
\(h_\theta(x)\)=对于输入\(x\),输出\(y=1\)的概率
例如:
对于肿瘤预测问题中,如果\(x=\left[ \begin{matrix} x_0 \\ x_1 \end{matrix} \right]=\left[ \begin{matrix} 1 \\ tumorSize \end{matrix} \right]\),输出\(h_\theta(x)=0.7\),说明对应肿瘤有70%可能是恶性
即:\(h_\theta(x) = P(y=1|x;\theta)\)(条件概率:即在给定输入\(x\)和参数\(\theta\)的条件下,输出\(y=1\)的概率)
\(P(y=0|x;\theta)+P(y=1|x;\theta)=1 \\ \Rightarrow P(y=0|x;\theta)=1-P(y=1|x;\theta)\)
决策边界
逻辑回归:
\(h_\theta=g(\theta^Tx)=P(y=1|x;\theta)\)
\(g(z) = \frac{1}{1+e^{-z}}\)
如果\(h_\theta(x) \ge 0.5\),\(y=1\),
如果\(h_\theta(x)<0.5\),\(y=0\)
观察\(g(z)\)函数曲线,可以发现,当\(z\ge0\)时,\(g(z) \ge 0.5\),又\(z=\theta^Tx\),因此,只要\(\theta^Tx \ge 0\)时,\(h_\theta(x) \ge 0.5\)
如图,假设对于图上这些点逻辑回归的结果为\(h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2),\theta=\left[ \begin{matrix} -3 \\ 1 \\ 1 \end{matrix} \right]\),画出一条直线\(-3+x_1+x_2 = 0\),这条线被称为决策边界
决策边界不是数据集的属性
非线性决策边界:
对于如图的训练数据,假设\(h_\theta(x)=g(\theta_0,\theta_1x_1+\theta_2x_2+\theta_3x_1^2+\theta_4x_2^2),\theta=\left[ \begin{matrix} -1 \\ 0 \\ 0 \\1 \\ 1 \end{matrix} \right]\),则绘制的就是一个非线性决策边界
代价函数
训练集:\(\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)},\cdots,(x^{(m)},y^{(m)})\}\)
共m个样本,\(x\in\left[ \begin{matrix} x_0 \\ x_1 \\ \cdots \\ x_n \end{matrix} \right],x_0=1,y\in\{0,1\}\)
\(h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}\)
如何选择参数\(\theta\)?
代价函数:
线性回归模型中:\(J(\theta)=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)})\)
\(Cost(h_\theta(x),y)=\frac{1}{2}(h_\theta(x)-y)^2\)
类似的,如果在逻辑回归中使用这样的代价函数,则\(J(\theta)\)关于\(\theta\)绘制出的曲线会是一个非凸函数,如图所示,如果将梯度下降法应用于这样的函数上,则不能保证它一定能收敛到全局最小值
因此,在逻辑回归中,我们需要另外找一个不同的代价函数,它是凸函数,使得我们可以很好的使用梯度下降法,而且能找到全局最小值,对应的函数如下: \[ Cost(h_\theta(x),y)=\left\{\begin{matrix}-\log(h_\theta(x)),y=1\\-\log(1-h_\theta(x)),y=0 \end{matrix}\right. \] \(y=1\)时,对应的函数图像如图:
原因:\(y=-\log z\)的函数图如下:
而\(g(z)=\frac{1}{1+e^{-z}}\)的值域在[0,1],所以最终图如图
对于这个\(Cost(h_\theta(x),y)\),当\(y=1,\)\(h_\theta(x)=1\)时,\(Cost=0\)
当\(h_\theta(x)\rightarrow 0\)时,\(Cost\rightarrow \infty\)
同理,对于\(y=0\)的情况,绘制的图如下:
总而言之,预测的值与实际值差距越大,对应的代价越大
简化代价函数和梯度下降
逻辑回归代价函数:
\(J(\theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_\theta(x^{(i)}),y^{(i)})\)
\(Cost(h_\theta(x),y)=\left\{\begin{matrix}-\log(h_\theta(x)),y=1\\-\log(1-h_\theta(x)),y=0 \end{matrix}\right.\)
注:\(y\)总是为0或1
简化:
\(Cost(h_\theta(x),y)=-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x))\)
进而代价函数:
\(J(\theta)=\frac{1}{m}Cost(h_\theta(x^{(i)}),y^{(i)})=-\frac{1}{m}[\sum_{i=1}^my^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]\)
为了拟合参数\(\theta\),我们需要:
\(min_{(\theta)} J(\theta)\)
梯度下降:
\(J(\theta)=-\frac{1}{m}[\sum_{i=1}^my^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]\)
想要\(min_{(\theta)} J(\theta)\),就需要重复\(\theta_j := \theta_j-\alpha \frac{\partial}{\partial \theta_j }J(\theta)\),同步更新\(\theta_j\)
其中导数项:\(\frac{\partial}{\partial \theta_j}J(\theta)=\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j\)
代入后:\(\theta_j := \theta_j -\alpha \sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j\)
高级优化
算法优化:
换个角度看梯度下降法,对于函数\(J(\theta)\),想要\(min_{(\theta)}J(\theta)\),那么我们需要做的是:
给定\(\theta\),可以计算\(J(\theta)\)和\(\frac{\partial}{\partial \theta_j}J(\theta) \ for(j=0,1,\cdots,n)\),然后将导数代入梯度下降公式中:\(\theta_j := \theta_j-\alpha\frac{\partial}{\partial \theta_j}J(\theta)\)
但是,梯度下降法并不是唯一的优化算法,还有的优化算法:
- 共轭梯度法
- BFGS
- L-BFGS
这三种算法的优点:
- 不需要手动选择\(\alpha\)
- 通常比梯度下降更快
缺点:
- 更加复杂
多分类
例:
对于邮件文件夹,可能可以分为以下几个标签:工作、好友、家人、兴趣等
对于天气,可以分为:晴、多云、雨、雪等
对于以上这些,y可以取一些离散值,且数量大于2个的,就是多分类问题
对于多分类问题,可以采用一对多思想,同样将二分类应用在多分类问题上
一对多,也可以称为一对余,顾名思义:
假设我们有一个训练集,包含三个类别,我们就可以将这个训练集转换为三个独立的二分类问题,大致过程如图:
然后,就有三个二分类器:\(h_\theta^{(i)}(x)=P(y=i|x;\theta) \ (i=1,2,3)\)
最后,对于一个新输入的\(x\),则对应的预测为对应类别概率最大的结果,即:\(max_{(i)}h_\theta^{(i)}(x)\)