机器学习(二)

  • 矩阵通常用大写字母来表示,小写字母用来表示原始的数字或标量或向量。 (并非必须这样)
  • 不存在逆矩阵的矩阵, 它的专有名词是奇异矩阵,或者叫退化矩阵 。

多元线性回归

以下讨论一种新的线性回归的版本,这种形式适用于多个变量或者多特征量的情况。

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + ...+\theta_nx_n hθ(x)=θ0+θ1x1+θ2x2+...+θnxn
For convenience of notation , define x 0 x_0 x0 = 1. ( x 0 ( i ) x_0^{(i)} x0(i) = 1)
上式可以表示为 θ T x \theta^Tx θTx
其中 θ 和 x \theta和x θx均为 R ( n + 1 ) \R^{(n+1)} R(n+1)阶列向量

如何设定该假设的参数?
如何使用梯度下降法来处理多元线性回归?

New algorithm(n>=1):
Repeat {
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j :=\theta_j - \alpha \frac{1}{m} \sum_{i = 1}^m ( h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)
(simulataneously update θ j \theta_j θj for j = 0, 1, …n)
}

梯度下降运算中的实用技巧

下面将介绍一个称为特征缩放的方法。这个方法如下:
如果你有一个机器学习问题,这个问题有多个特征,如果你能确保这些特征都处在一个相近的范围,即确保不同特征的取值在相近的范围内,这样梯度下降法就能更快地收敛。

  • 例如: 房子的大小 x 1 x_1 x1,以及房间的数量 x 2 x_2 x2特征缩放后, 分别表示为
    x 1 = s i z e ( f e e t 2 ) 2000 x_1 = \frac {size(feet^2)}{2000} x1=2000size(feet2)
    x 2 = n u m b e r   o f   b e d r o o m s 5 x_2 = \frac {number{\,}of{\,} bedrooms}{5} x2=5numberofbedrooms
  • 在执行特征缩放时,我们通常的目的是,把特征的取值约束到-1到+1的范围内。
  • 你可能需要通过除以不用的数,来让它们处于同一范围内。-1和+起这两个数字并不是太重要,只是特征范围太大或者太小都不合适。不用担心特征是否在完全相同的范围或区间内,但是只要它们足够接近的话,梯度下降法就会正常地工作。

在特征缩放中,有时候我们也会进行一个称为均值归一化的工作。

  • 如果你有个特征 x i x_i xi, 你就用 x i − μ i x_i - \mu_i xiμi来替换,让你的特征值具有为0的平均值。更一般的规律是,你可以把 x 1 x_1 x1替换为 x 1 − μ 1 s 1 \frac {x_1 - \mu_1}{s_1} s1x1μ1,其中定义 μ 1 \mu_1 μ1是训练集中 x 1 x_1 x1的平均值,而 s 1 s_1 s1是该特征值的范围(最大值减去最小值就可以了,也可以设置为标准差)。
  • 只要将特征转换为相近似的范围就是可以的,特征缩放其实并不需要太精确,只是为了让梯度下降能够运行得更快一点,收敛所需得迭代次数更少。

这里集中讨论学习率 α \alpha α
如何选择学习率 α \alpha α

  • 我做的是,首先确保梯度下降正常工作,梯度下降算法所做的事情就是为你找到一个 θ \theta θ值,并且希望它最小化代价函数J( θ \theta θ),因此我会在梯度下降算法运行时,绘出代价函数J( θ \theta θ)的值,这里的x轴表示的是梯度下降算法的迭代次数,y轴表示梯度下降算法迭代x次之后,得到的 θ \theta θ算出的J( θ \theta θ)值。所以曲线显示的是梯度下降的每步迭代后,代价函数的值。
  • 如果梯度下降算法正常工作的话,每一步迭代之后J( θ \theta θ)都应该下降,这条曲线的一个用处在于,它可以告诉你,当迭代了一定次数之后,再迭代,看起来并没有下降多少,这条曲线看起来已经很平坦了,迭代了一定次数之后,梯度下降算法差不多已经收敛了,因为代价函数没再继续下降了,所以通过这条曲线可以帮助你判断,梯度下降算法已经收敛。
  • 对于每一个特定的问题,梯度下降算法所需的迭代次数可能会相差很大。所以可能对于某一个问题,梯度下降算法只需要30步迭代就可以达到收敛,然而换一个问题,也许梯度下降算法就需要3000步迭代,对于另一个机器学习问题,则可能需要三百万步迭代。实际上我们很难提前判断,梯度下降算法需要迭代多少次才能收敛,我们通常画出这样子的曲线,画出代价函数随迭代步数增加的变化曲线。通常我通过看这种曲线来判断,梯度下降算法是否已经收敛。
  • 看这种这种图还可以提前告诉你,算法没有正常工作。具体地说,如果你画出代价函数J( θ \theta θ)随迭代步数的变化曲线,看到图形中J( θ \theta θ)实际上在不断上升,这就表明,梯度下降算法没有正常工作,而这样的曲线图通常意味着你应该使用较小的学习率 α \alpha α。如果你看到J( θ \theta θ)曲线先下降后上升然后再次下降再次上升如此往复,而解决这种问题的方法,通常也是选择较小的 α \alpha α值。
  • 另外也可以进行一些自动的收敛测试,也就是让一种算法,来告诉你梯度下降算法是否已经收敛。这里是自动收敛测试一个非常典型的例子。如果代价函数J( θ \theta θ)一步迭代后的下降小于一个很小的值 ε \varepsilon ε,这个测试就判断函数已经收敛。 ε \varepsilon ε可以是1e-3。但我发现,通常要选择一个合适的阈值 ε \varepsilon ε是相当困难的。因此,为了检查梯度下降算法是否收敛,我实际上还是更倾向于通过看曲线图,而不是依靠自动收敛测试。
  • 在代价函数的基本假设之下,该假设适用于线性回归,数学家已证明,只要学习率 α \alpha α足够小,那么每次迭代之后代价函数J( θ \theta θ)都会下降,因此如果代价函数没有下降,那可能是因为学习率过大。另外,如果学习率太小的话,那么梯度下降算法可能收敛得很慢。(注:在某些情况下,如果学习率 α \alpha α过大,也可能会出现收敛缓慢。)

如何将模型与数据进行拟合呢?

使用多元线性回归的方法,我们可以对算法进行一个简单的修改来实现它。

  • h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) h_\theta(x) = \theta_0 + \theta_1(size) + \theta_2\sqrt[]{(size)} hθ(x)=θ0+θ1(size)+θ2(size)
    这个模型能帮你拟合出这样一条曲线,趋势是上升的,但慢慢变得平缓,不会下降回来。
  • …没做笔记。

正规方程

正规方程提供了一种求 θ \theta θ的解析解法,所以我们不再需要运行迭代算法,而是可以直接一次性求解 θ \theta θ的最优值。

  • 以训练样本m = 4为例。
  • 首先在数据集中加上一列,对应额外特征变量的 x 0 x_0 x0,它的取值永远为1。接下来构造一个矩阵X,这个矩阵基本包含了训练样本的所有特征变量。 取我们想预测的值构建一个向量y。所以,X是一个m*(n+1)维矩阵,y会是一个m维向量,其中m是样本数量,n是特征变量数(实际上是n+1,因为加上了额外的特征变量 x 0 x_0 x0),最后用矩阵X和向量y来计算以下式子,这样就能得到使得代价函数最小化的 θ \theta θ
    θ = ( X T X ) − 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)1XTy
  • 如果你使用的是正规方程法,那你就不需要特征缩放。

何时用正规方程?何时用梯度下降?

假如你有m个训练样本,n个特征变量。

  • 梯度下降算法的缺点是,你需要选择学习速率 α \alpha α,这通常表示需要运行多次,尝试不同的学习速率 α \alpha α,找到运行效果最好的那个。梯度下降法的另一个缺点是,它需要多次迭代,这取决于具体细节,计算可能会更慢。
    梯度下降法在特征变量很多的情况下也能运行地相当好,所以即使你有上百万的特征变量,你可以运行梯度下降法并且通常很有效,它会正常地运行。
  • 正规方程不需要选择学习速率 α \alpha α,也不需要迭代,即不需要画J( θ \theta θ)曲线来检查收敛性,或者任何额外步骤。正规方程法需要计算出 ( X T X ) − 1 (X^TX)^{-1} (XTX)1,它是一个n*n的矩阵,其中n是特征变量的数量,对大多数计算机应用来说,实现逆矩阵计算的代价,以矩阵维度的三次方增长,因此计算这个逆矩阵的代价,大概是n的三次方级时间,有时稍微比n的三次方级快一些,如果n很大的话,那么计算这个量会慢。
  • n比较大的时候选梯度下降比较好,n比较小的时候选正规方程比较好。如果n上百上千,用正规方程法,计算机的速度还可以。如果n上万,上万乘上万维的矩阵做逆变换会开始有点慢,此时我可能开始倾向于梯度下降法,但也不绝对。(n到底到多少算大这件事没有确切的标准)

如果矩阵 X T X X^TX XTX不可逆,一般有以下两种原因。

  1. 如果由于某些原因,你的学习问题包含了多余的特征。
  2. 你在运行的学习算法,有很多特征,具体地说,在m小于或等于n的时候。

向量化

如果你在实施线性回归的时候,使用两个以上的特征量,有时我们会在线性回归中使用几十,几百,甚至几千个特征。当你使用向量化实现线性回归时,相比你过去用for循环,通常运行速度会更快。
下面给出一些向量化的例子。

  • 例1
    h θ ( x ) = ∑ j = 0 n θ j x j = θ T x h_\theta (x) = \sum _{j=0}^n \theta_j x_j = \theta^Tx hθ(x)=j=0nθjxj=θTx
    其中 θ \theta θ就是 [ θ 0 θ 1 . . . θ n ] \left[ \begin{matrix} \theta_0 \\ \theta_1 \\ .\\.\\. \\ \theta_n \end{matrix} \right] θ0θ1...θn
    x就是 [ x 0 x 1 . . . x n ] \left[ \begin{matrix} x_0 \\ x_1 \\ .\\.\\. \\ x_n \end{matrix} \right] x0x1...xn

  • 例2(以线性梯度下降法的实现为例)
    线性梯度下降算法的公式如下:
    θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i = 1}{m}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)
    可向量化为如下式子:
    θ : = θ − α δ \theta := \theta - \alpha \delta θ:=θαδ
    when
    δ = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \delta = \frac{1}{m} \sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x^{(i)} δ=m1i=1m(hθ(x(i))y(i))x(i)
    其中 α \alpha α是一个实数; δ \delta δ是n+1维向量,向量的第一个元素等于 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \frac{1}{m} \sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} m1i=1m(hθ(x(i))y(i))x0(i)
    [ δ 0 δ 1 . . . δ n ] \left[ \begin{matrix} \delta_0 \\ \delta_1 \\ .\\.\\. \\ \delta_n \end{matrix} \right] δ0δ1...δn
    x j x_j xj是一个n+1维向量:
    [ x j 0 x j 1 . . . x j n ] \left[ \begin{matrix} x_j^0 \\ x_j^1\\ .\\.\\. \\ x_j^n \end{matrix} \right] xj0xj1...xjn

分类问题

  • 我们用0表示的类可以叫负类,表示没有我们要找的某样东西;用1表示的类可以叫正类,表示有我们要寻找的东西。(不是明确规定必须如此)

从二分类问题开始讨论,把线性回归用于分类问题通常不是一个好主意。
在二元分类问题中y = 0 or 1,如果你使用线性回归,假设算法的输出值远大于1或者远小于0,还是会有点奇怪。
由此引入logistics回归算法,该算法用在标签y为离散值0或1的情况下,其特点在于,算法的输出值一直介于0和1之间。
注:logistics算法属于分类算法。

  • logistics回归算法:
    want 0 ⩽ \leqslant h θ ( x ) h_\theta(x) hθ(x) ⩽ \leqslant 1
    逻辑回归算法中的假设函数如下,该函数输出的是给定 x x x和参数 θ \theta θ时, y y y = 1的估计概率:
    h θ ( x ) = g ( θ T x ) h_\theta(x) = g(\theta^Tx) hθ(x)=g(θTx)
    g(z)为sigmoid函数,或logistics函数:
    g ( z ) = 1 1 + e − z ( z ∈ R ) g(z) = \frac{1}{1+e^{-z}}(z∈R) g(z)=1+ez1zR
    函数图像如下:在这里插入图片描述
    suppose predict
    “ y = 1 "        i f    h θ ( x ) ⩾ 0.5 “ y = 0 ”        i f    h θ ( x ) < 0.5 “y =1" \;\;\; if\;h_\theta(x) \geqslant 0.5 \\“y = 0”\;\;\;if\;h_\theta(x)<0.5 y=1"ifhθ(x)0.5y=0”ifhθ(x)<0.5
    0.5取1或取0都可以,这里取1。

  • 决策边界

决策边界是假设函数的一个属性,决定于其参数,只要给定了参数向量 θ \theta θ,所求的决策边界就已经决定了,它不是数据集的属性。 而训练集的作用是用来拟合参数 θ \theta θ
决策边界可以是非线性的。

举例如下图所示:
在这里插入图片描述
图中洋红色线为决策边界。
但实际上我们并不需要通过绘制训练集来决定决策边界。

拟合logistics回归

如何拟合logistics回归模型的参数 θ \theta θ,具体来说,我要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的logistic回归模型的拟合问题。

  • 例:
    我们有一个训练集,里面有m个训练样本,我们的每个样本,用n+1维的特征向量表示且 x 0 x_0 x0 =1。
    注意:如果把梯度下降法用在 非凸函数上, 不能保证它会收敛到全局最小值(非凸函数有很多局部最小值)。相应地,我们希望我们的代价函数是一个单弓形凸函数,如果对它使用梯度下降法,我们可以保证梯度下降法,会收敛到该函数的全局最小值。
    Logistic regression Cost function:
    C o s t ( h θ ( x ) , y ) = { − log ⁡ ( h θ ( x ) ) i f    y = 1 − log ⁡ ( 1 − h θ ( x ) )    i f    y = 0 Cost(h_\theta(x),y) = \left\{\begin{array}{cc} - \log(h_\theta(x))& if\;y = 1\\ -\log(1-h_\theta(x))&\;if\;y= 0 \end{array}\right. Cost(hθ(x),y)={log(hθ(x))log(1hθ(x))ify=1ify=0

    Cost函数的紧凑版本结合逻辑回归的代价函数如下(下式由统计学中的极大似然估计得来的):
    J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = \frac {1}{m} \sum_{ i = 1 }^mCost(h_\theta(x^{(i)}),y^{(i)})\\ = -\frac {1}{m}[\sum_{i=1}^m y^{(i)}\log h_\theta(x^{(i)}) + (1- y^{(i)})\log(1-h_\theta(x^{(i)})) ] J(θ)=m1i=1mCost(hθ(x(i)),y(i))=m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]
    To fit parameters θ \theta θ:

    • 需要找出让J( θ \theta θ)取得最小值的参数 θ \theta θ
    • 如果给我们一个新的样本,具有某些特征 x x x,我们可以用拟合训练样本的参数 θ \theta θ来输出这样的预测 h θ ( x ) h_\theta(x) hθ(x)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值