机器学习笔记-day03

六、逻辑回归(Logistic Regression)

6.1 分类问题

\(y\in\{0, 1\}\)

用线性回归解决分类问题,通常不是一个很好的选择

线性回归的结果并不总是在0和1之间

逻辑回归就是将结果整合到0和1之间

6.2 假说表示

Sigmoid function == Logistic function

\(h_\theta(x) = g(\theta^Tx)\)

其中\(g(z) = \frac{1}{1+e^{-z}}\)

==> \(h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}\)

该方法的含义是:\(h_\theta(x) = P(y=1|x;\theta)\),即系数为\(\theta\)时,\(x\)归类为1的概率。

其中\(P(y=0|x,\theta) = 1 - P(y=1|x,\theta)\)

6.3 决策边界

\(h_\theta(x) \ge 0.5\)时,预测\(y=1\)

\(h_\theta(x) < 0.5\)时,预测\(y=0\)

根据\(g(z)\)的图像可知:

\(z=0\)时,\(g(z)=0.5\)

\(z>0\)时,\(g(z) > 0.5\)

\(z<0\)时,\(g(z) < 0.5\)

\(z=\theta^Tx\),即:\(\theta^Tx \geq0\)时,预测\(y=1\)\(\theta^T < 0\)时,预测\(y=0\)

假设模型为:

当参数为[-3, 1, 1],则当 \(-3 + x_1 + x_2 \geq 0\),即\(x_1 + x_2 \geq 3\)时,模型将预测 \(y=1\)

直线 \(x_1 + x_2 = 3\),就是边界线。


通过添加二次方的特征,获取更加复杂的边界,如上图中:

\(h_\theta(x) = g(\theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x^2_1 + \theta_4x^2_2)\),取[-1, 0, 0, 1, 1]时,得到的边界是$x^2_1 + x^2_2 =1 $

我们可以用非常复杂的模型来适应非常复杂形状的判定边界。

6.4 代价函数

线性回归:

\[J(\theta) = \frac{1}{m}\sum^{m}_{i=1}{\underbrace{ \frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 }_{ Cost(h_\theta(x^{(i)})-y^{(i)}) }} \]

\(Cost(h_\theta(x^{(i)})-y^{(i)}) = \frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2\)

逻辑回归:

\(Cost(h_\theta(x),y) = \begin{cases}-log(h_\theta(x)) & if\;y = 1\\-log(1-h_\theta(x)) & if \; y = 0\end{cases}\)

\(h_\theta(x)\)\(Cost(h_\theta(x),y)\)之间的关系如下图:

这样构建的\(Cost(h_\theta(x),y)\)函数的特点是:

当实际的\(y=1\)\(h_\theta(x)\)也为1时,误差为0;

\(y=1\)\(h_\theta(x)\)不为1时误差随着\(h_\theta\)变小而变大;

当实际的\(y=0\)\(h_\theta(x)\)也为0时,代价为0,;

\(y=0\)\(h_\theta(x)\)不为0时误差随着\(h_\theta\)变大而变大;

6.5 简化的成本函数和梯度下降

将构建的\(Cost(h_\theta(x),y)\)函数简化如下:

\(Cost(h_\theta(x),y) = -y * log(h_\theta(x)) - (1-y) * log(1-h_\theta(x))\)代入代价函数,得到:

\(J(\theta) = \frac{1}{m}\sum^{m}_{i=1}{[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))]}\),即:\(J(\theta) = -\frac{1}{m}\sum^{m}_{i=1}{[y^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]}\)

这个代价函数,是从统计学的极大似然法得来的。

梯度下降的方法和线性回归的思路是一致的,即:

\[Repeta\;{ \theta_j := \theta_j - \alpha\sum^{m}_{i=1}{h_\theta(x^{(i)}-y^{(i)})x^{(i)}_j} } \]

区别是:

线性回归:\(h_\theta(x) = \theta^Tx\)

逻辑回归:\(h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}\)

6.6 高级优化

...

6.7 多类别分类:一对多

一对多的处理,就是将一对多转化为“一对余”,计算出每种分类的概率,然后取最大值

七、正则化(Regularization)

7.1 过拟合的问题

特征太多,训练数据太少,容易出现过拟合现象

解决方法:

  • 减少特征数量
  • 正则化
    • 保留所有特征,但是减少量级

7.2 代价函数

\(\displaystyle J(\theta) = \frac{1}{2m}[\sum^{m}_{i=1}(h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda\sum^n_{j=1}\theta^2_j ]\)

\(\lambda\)又称为正则化参数(Regularization Parameter),如果\(\lambda\)参数过大,模型将变为\(h_\theta(x) = \theta_0\)

7.3 正则化线性回归

正规化代价函数:

\(\displaystyle J(\theta) = \frac{1}{2m}[\sum^{m}_{i=1}(h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda\sum^n_{j=1}\theta^2_j ]\)

不对\(\theta_0\)进行正则化

\(Repeat\;until\;convergence\;\{\\ \theta_0 := \theta_0 - \alpha\frac{1}{m}\sum^m_{i=1}((h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)})\\ \theta_j := \theta_j - \alpha[\frac{1}{m}\sum^m_{i=1}((h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j + \frac{\lambda}{m}\theta_j]\\for\;j=1,2,...,n\\\}\)

\(\theta_j := \theta_j(1-\alpha\frac{\lambda}{m}) - \alpha\frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j\)

\(1-\alpha\frac{\lambda}{m}\) 只比1略小一点

利用正轨方程来求解正则化现行回归模型,方法如下:

7.4 正则化的逻辑回归模型

\(\displaystyle J(\theta) = \frac{1}{m}\sum^m_{i=1}[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum^n_{j=1}\theta^2_j\)

\(Repeat\;until\;convergence\;\{\\ \theta_0 := \theta_0 - \alpha\frac{1}{m}\sum^m_{i=1}((h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)})\\ \theta_j := \theta_j - \alpha[\frac{1}{m}\sum^m_{i=1}((h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j + \frac{\lambda}{m}\theta_j]\\for\;j=1,2,...,n\\\}\)

其中\(h_\theta(x) = g(\theta^TX)\)

注意:

  1. 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但由于两者的不同所以还是有很大差别。
  2. 不参与其中的任何一个正则化。

八、神经网络:表述(Neural Networks: Representation)

8.1 非线性假设

我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。

8.2 神经元和大脑

神经网络所需计算量过大,随着计算机计算能力的提升而东山再起。

8.3 模型表示1

神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。

我们设计出了类似于神经元的神经网络,效果如下:

其中\(x_1\), \(x_2\),\(x_3\) 是输入单元(input units),我们将原始数据输入给它们。\(a_1\), \(a_2\),\(a_3\) 是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算\(h_\theta(x)\)

神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):

\(a^{(j)}_i\)代表第\(j\)层的第\(i\)个激活单元。\(\Theta^{(j)}\)代表从第\(j\)层映射到第\(j+1\)层时的权重的矩阵,例如\(\Theta^{(1)}\)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第\(j+1\)层的激活单元数量为行数,以第\(j\)层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中的尺寸为 3*4。

对于上图所示的模型,激活单元和输出分别表达为:

\(a^{(2)}_1 = g(\Theta^{(1)}_{10}x_0+\Theta^{(1)}_{11}x_1+\Theta^{(1)}_{12}x_2+\Theta^{(1)}_{13}x_3)\\ a^{(2)}_2 = g(\Theta^{(1)}_{20}x_0+\Theta^{(1)}_{21}x_1+\Theta^{(1)}_{22}x_2+\Theta^{(1)}_{23}x_3)\\ a^{(3)}_3 = g(\Theta^{(1)}_{30}x_0+\Theta^{(1)}_{31}x_1+\Theta^{(1)}_{32}x_2+\Theta^{(1)}_{33}x_3)\\ h_\Theta(x) = g(\Theta^{(2)}_{10}a^{(2)}_0+\Theta^{(2)}_{11}a^{(2)}_1+\Theta^{(2)}_{12}a^{(2)}_2+\Theta^{(2)}_{13}a^{(2)}_3)\)

每一个\(a\)都是由上一层所有的\(x\)和每一个\(x\)所对应的weight决定的。

(我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION ))

8.4 模型表示2

( FORWARD PROPAGATION ) 相对于使用循环来编码,利用向量化的方法会使得计算更为简便

我们令\(z^{(2)} = \theta^{(1)}\) ,则\(a^{(2)} = g(z^{(2)})\) ,计算后添加\(a^{(2)}_0=1\)。 计算输出的值为:

我们令\(z^{(3)} = \theta^{(2)}a^{(2)}\),则 \(h_\theta(x) = a^{(3)} = g(z^{(3)})\)。 这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:\(z^{(2)} = \Theta^{(1)}X^T\), \(a^{(2)} = g(z^{(2)})\)

为了更好了了解Neuron Networks的工作原理,我们先把左半部分遮住:

右半部分其实就是以, 按照Logistic Regression的方式输出:

其实神经网络就像是logistic regression,只不过我们把logistic regression中的输入向量 \([x_1 \sim x_3]\)变成了中间层的\([a^{(2)}_1 \sim a^{(2)}_3]\), 即:\(h_\theta(x) = g(\Theta^{(2)}_0a^{(2)}_0 + \Theta^{(2)}_1a^{(2)}_1 + \Theta^{(2)}_2a^{(2)}_2 + \Theta^{(2)}_3a^{(2)}_3)\)

我们可以\(a_0, a_1, a_2, a_3\)把看成更为高级的特征值,也就是\(x_0, x_1, x_2, x_3\)的进化体,并且它们是由\(x\)\(\theta\)决定的,因为是梯度下降的,所以\(a\)是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将\(x\)次方厉害,也能更好的预测新数据。 这就是神经网络相比于逻辑回归和线性回归的优势。

8.5 样本和直观理解1

从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用数据中的原始特征\(x_1,x_2,...,x_n\),我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。

神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。

举例说明:逻辑与(AND);下图中左半部分是神经网络的设计与output层表达式,右边上部分是sigmod函数,下半部分是真值表。

我们可以用这样的一个神经网络表示AND 函数:

其中\(\theta_0 = -30, \theta_1 = 20, \theta_2 = 20\)我们的输出函数即为:\(h_\Theta(x) = g(-30 + 20x_1 + 20x_2)\)

我们知道\(g(x)\)的图像是:

所以我们有:$h_\Theta(x) \approx x_1,AND,x_2 $

所以我们的:\(h_\Theta(x)\)就是AND函数。

接下来再介绍一个OR函数:

ORAND整体一样,区别只在于的取值不同。

8.6 样本和直观理解2

二元逻辑运算符(BINARY LOGICAL OPERATORS)当输入特征为布尔值(0或1)时,我们可以用一个单一的激活层可以作为二元逻辑运算符,为了表示不同的运算符,我们只需要选择不同的权重即可。

下图的神经元(三个权重分别为-30,20,20)可以被视为作用同于逻辑与(AND):

下图的神经元(三个权重分别为-10,20,20)可以被视为作用等同于逻辑或(OR):

下图的神经元(两个权重分别为 10,-20)可以被视为作用等同于逻辑非(NOT):

我们可以利用神经元来组合成更为复杂的神经网络以实现更复杂的运算。例如我们要实现XNOR 功能(输入的两个值必须一样,均为1或均为0),即\(XNOR = (x_1\;and\;x_2)\;OR\;((NOT\;x_1)\;AND\;(NOT\;x_2))\)

首先构造一个能表达\((NOT\;x_1)\;AND\;(NOT\;x_2)\)部分的神经元:

然后将表示 AND 的神经元和表示\(NOT\;x_1)AND(NOT\;x_2)\)的神经元以及表示 OR 的神经元进行组合:

我们就得到了一个能实现\(XNOR\)运算符功能的神经网络。

按这种方法我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。

这就是神经网络的厉害之处。

8.7 多类分类

posted on 2020-10-13 21:48  moket  阅读(115)  评论(0)    收藏  举报