- 矩阵通常用大写字母来表示,小写字母用来表示原始的数字或标量或向量。 (并非必须这样)
- 不存在逆矩阵的矩阵, 它的专有名词是奇异矩阵,或者叫退化矩阵 。
多元线性回归
以下讨论一种新的线性回归的版本,这种形式适用于多个变量或者多特征量的情况。
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=1∑m(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不可逆,一般有以下两种原因。
- 如果由于某些原因,你的学习问题包含了多余的特征。
- 你在运行的学习算法,有很多特征,具体地说,在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=0∑nθ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=1∑m(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=1∑m(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=1∑m(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+e−z1(z∈R)
函数图像如下:
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.5“y=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(1−hθ(x))ify=1ify=0Cost函数的紧凑版本结合逻辑回归的代价函数如下(下式由统计学中的极大似然估计得来的):
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=1∑mCost(hθ(x(i)),y(i))=−m1[i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
To fit parameters θ \theta θ:- 需要找出让J( θ \theta θ)取得最小值的参数 θ \theta θ
- 如果给我们一个新的样本,具有某些特征 x x x,我们可以用拟合训练样本的参数 θ \theta θ来输出这样的预测 h θ ( x ) h_\theta(x) hθ(x)