一、常见的两种学习算法
-
监督学习(Supervised Learning)
(1)定义:给学习算法一个数据集,这个数据集由样本和相应的“正确答案”(即标签)组成,然后运用学习算法,预测算出更多正确答案。
(2)典例:支持向量机 -
无监督学习(Unsupervised Learning)
(1)定义:无监督学习中数据集没有任何标签,只有给定的一个数据集,找出数据中的结构模式。
(2)典例:聚类算法 -
举例:
垃圾邮件问题——监督学习
新闻事件分类——无监督学习
细分市场——无监督学习
糖尿病——监督学习 -
其他学习方法:如强化学习、推荐系统。
二、线性回归
2.1 单变量线性回归
1、模型描述
-
标记:
m m m —— 代表训练集中实例的数量
x x x —— 代表特征 / 输入变量
y y y —— 代表目标变量 / 输出变量
( x , y ) (x,y) (x,y) —— 代表训练集中的实例
( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) —— 代表第 i i i 个观察实例 / 训练样本
h h h——代表学习算法的解决方案或函数,也称为假设(hypothesis) -
监督学习算法的工作方式:
因为只含有一个特征/输入量
x
x
x ,因此,这样的问题称为单变量线性回归问题
2、代价函数
1.假设函数:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x)=\theta_{0}+\theta_{1}x
hθ(x)=θ0+θ1x
参数:
θ
0
,
θ
1
\theta_{0},\theta_{1}
θ0,θ1
如何选择参数
θ
0
,
θ
1
\theta_{0},\theta_{1}
θ0,θ1 ?
代价函数(cost function):
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2
J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
其中,
h
θ
(
x
(
i
)
)
=
θ
0
+
θ
1
x
(
i
)
h_{\theta}(x^{(i)})=\theta_{0}+\theta_{1}x^{(i)}
hθ(x(i))=θ0+θ1x(i)
目标:
min
θ
0
,
θ
1
J
(
θ
0
,
θ
1
)
\min_{\theta_{0},\theta_{1}}J(\theta_{0},\theta_{1})
minθ0,θ1J(θ0,θ1)
代价函数也被称作:平方误差函数、平方误差代价函数。
2.比较假设函数和代价函数的联系
先简化一下,令
θ
0
=
0
\theta_{0}=0
θ0=0 ,使得两者都只有
θ
1
\theta_{1}
θ1 一个参数:
假设函数:
h
θ
(
x
)
=
θ
0
+
θ
1
→
s
i
m
p
l
i
f
i
e
d
h
θ
(
x
)
=
θ
1
h_{\theta}(x)=\theta_{0}+\theta_{1}\overset{simplified}{\rightarrow}h_{\theta}(x)=\theta_{1}
hθ(x)=θ0+θ1→simplifiedhθ(x)=θ1
参数:
θ
0
,
θ
1
→
s
i
m
p
l
i
f
i
e
d
θ
1
\theta_{0},\theta_{1}\overset{simplified}{\rightarrow}\theta_{1}
θ0,θ1→simplifiedθ1
代价函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
→
s
i
m
p
l
i
f
i
e
d
J
(
θ
1
)
J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2\overset{simplified}{\rightarrow}J(\theta_{1})
J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2→simplifiedJ(θ1)
目标:
min
θ
0
,
θ
1
J
(
θ
0
,
θ
1
)
→
s
i
m
p
l
i
f
i
e
d
min
θ
1
J
(
θ
1
)
\min_{\theta_{0},\theta_{1}}J(\theta_{0},\theta_{1})\overset{simplified}{\rightarrow}\min_{\theta_{1}}J(\theta_{1})
minθ0,θ1J(θ0,θ1)→simplifiedminθ1J(θ1)
h θ ( x ) h_{\theta}(x) hθ(x) | J ( θ 1 ) J(\theta_{1}) J(θ1) |
---|---|
固定 θ 1 \theta_{1} θ1 ,关于 x x x 的一个函数 | 关于参数 θ 1 \theta_{1} θ1 的一个函数 |
![]() | ![]() |
3.等高线图
对于多个参数和代价函数之间的关系,等高线图更加直观。
等高线图中的每一个点都对应着每一个不同的假设函数:
图一:
θ
0
=
800
,
θ
1
=
−
0.15
,
h
θ
(
x
)
=
800
−
0.15
x
\theta_{0}=800,\theta_{1}=-0.15,h_{\theta}(x)=800-0.15x
θ0=800,θ1=−0.15,hθ(x)=800−0.15x
图二:
θ
0
=
450
,
θ
1
=
−
0.05
,
h
θ
(
x
)
=
450
−
0.05
x
\theta_{0}=450,\theta_{1}=-0.05,h_{\theta}(x)=450-0.05x
θ0=450,θ1=−0.05,hθ(x)=450−0.05x
图三:
θ
0
=
240
,
θ
1
=
0.15
,
h
θ
(
x
)
=
240
+
0.15
x
\theta_{0}=240,\theta_{1}=0.15,h_{\theta}(x)=240+0.15x
θ0=240,θ1=0.15,hθ(x)=240+0.15x
3、梯度下降
-
梯度下降是一个用来求函数最小值的算法,将使用梯度下降算法来求出代价函数 J ( θ 0 , θ 1 ) J(\theta_{0},\theta_{1}) J(θ0,θ1) 的最小值。
算法思想:
1)开始时随机选择一个参数的组合 ( θ 0 , θ 1 , . . . , θ n ) (\theta_{0},\theta_{1},...,\theta_{n}) (θ0,θ1,...,θn) ,一般设初始值为 0;
2)持续更新参数的值,使得代价函数减小,直到到达一个局部最小值(local minimum)。 -
批量梯度下降(batch gradient descent)算法的公式为:
repeat until convergence{
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( f o r j = 0 a n d j = 1 ) \theta_{j}:=\theta_{j}-\alpha\frac{\partial }{\partial \theta_{j}}J(\theta_{0},\theta_{1}) (for j=0 and j=1) θj:=θj−α∂θj∂J(θ0,θ1)(forj=0andj=1)
}
其中, α \alpha α 为学习率(learning rate),用来控制梯度下降时,沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。 -
易错点
-
正确更新过程:同步更新 θ 0 , θ 1 \theta_{0},\theta_{1} θ0,θ1
t e m p 0 = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp0=\theta_{0}-\alpha\frac{\partial }{\partial \theta_{0}}J(\theta_{0},\theta_{1}) temp0=θ0−α∂θ0∂J(θ0,θ1)
t e m p 1 = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) temp1=\theta_{1}-\alpha\frac{\partial }{\partial \theta_{1}}J(\theta_{0},\theta_{1}) temp1=θ1−α∂θ1∂J(θ0,θ1)
θ 0 : = t e m p 0 \theta_{0}:=temp0 θ0:=temp0
θ 1 : = t e m p 1 \theta_{1}:=temp1 θ1:=temp1 -
错误更新过程:
t e m p 0 = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp0=\theta_{0}-\alpha\frac{\partial }{\partial \theta_{0}}J(\theta_{0},\theta_{1}) temp0=θ0−α∂θ0∂J(θ0,θ1)
θ 0 : = t e m p 0 \theta_{0}:=temp0 θ0:=temp0
t e m p 1 = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) temp1=\theta_{1}-\alpha\frac{\partial }{\partial \theta_{1}}J(\theta_{0},\theta_{1}) temp1=θ1−α∂θ1∂J(θ0,θ1)
θ 1 : = t e m p 1 \theta_{1}:=temp1 θ1:=temp1
- 梯度下降知识点总结
(1)对于偏导数的理解:
对于代价函数
J
(
θ
1
)
(
θ
1
∈
R
)
J(\theta_{1})(\theta_{1} \in \mathbb{R})
J(θ1)(θ1∈R) ,
θ
1
:
=
θ
1
−
α
d
d
θ
1
J
(
θ
1
)
\theta_{1}:=\theta_{1}-\alpha\frac{d}{d\theta_{1}}J(\theta_{1})
θ1:=θ1−αdθ1dJ(θ1)
- 若 d d θ 1 J ( θ 1 ) ≥ 0 \frac{d}{d\theta_{1}}J(\theta_{1})\geq0 dθ1dJ(θ1)≥0,则 θ 1 : = θ 1 − α ⋅ ( R + ) \theta_{1}:=\theta_{1}-\alpha\cdot(\mathbb{R}^{+}) θ1:=θ1−α⋅(R+) , θ \theta θ 越来越小
- 若 d d θ 1 J ( θ 1 ) ≤ 0 \frac{d}{d\theta_{1}}J(\theta_{1})\leq0 dθ1dJ(θ1)≤0,则 θ 1 : = θ 1 − α ⋅ ( R − ) \theta_{1}:=\theta_{1}-\alpha\cdot(\mathbb{R}^{-}) θ1:=θ1−α⋅(R−) , θ \theta θ 越来越大
(2)对于学习率的理解:
- 若 α \alpha α 太小:梯度下降会很慢
- 若 α \alpha α 太大:导致无法收敛,甚至发散
(3)线性回归的梯度下降
- 线性回归模型: h θ ( x ) = θ 0 + θ 1 x J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 h_{\theta}(x)=\theta_{0}+\theta_{1}x\\J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 hθ(x)=θ0+θ1xJ(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
- 梯度下降算法:
重
复
,
直
到
收
敛
:
{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
(
f
o
r
j
=
1
a
n
d
j
=
0
)
}
重复,直到收敛:\left\{\\\theta_{j}:=\theta_{j}-\alpha\frac{\partial}{\partial\theta_{j}}J(\theta_{0},\theta_{1})\\(for j=1 and j=0) \\\right\}
重复,直到收敛:{θj:=θj−α∂θj∂J(θ0,θ1)(forj=1andj=0)}
得到: ∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 \frac{\partial}{\partial\theta_{j}}J(\theta_{0},\theta_{1})=\frac{\partial}{\partial\theta_{j}}\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2\\=\frac{\partial}{\partial\theta_{j}}\frac{1}{2m}\sum_{i=1}^{m}(\theta_{0}+\theta_{1}x^{(i)}-y^{(i)})^2 ∂θj∂J(θ0,θ1)=∂θj∂2m1i=1∑m(hθ(x(i))−y(i))2=∂θj∂2m1i=1∑m(θ0+θ1x(i)−y(i))2
θ 0 : j = 0 → ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta_{0}:j=0\rightarrow \frac{\partial}{\partial\theta_{0}}J(\theta_{0},\theta_{1})=\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)}) θ0:j=0→∂θ0∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i))
θ 1 : j = 1 → ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \theta_{1}:j=1\rightarrow \frac{\partial}{\partial\theta_{1}}J(\theta_{0},\theta_{1})=\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)} θ1:j=1→∂θ1∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i))x(i)
代入梯度下降算法:
重 复 , 直 到 收 敛 : θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) ( 两 者 同 步 更 新 ) 重复,直到收敛:\\\theta_{0}:=\theta_{0}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})\\\theta_{1}:=\theta_{1}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)}\\(两者同步更新) 重复,直到收敛:θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))x(i)(两者同步更新)
该算法有时也被称作批量梯度下降:这意味着每一步梯度下降,都遍历了整个训练集的样本。
2.2 多变量线性回归
-
多维特征
x j ( i ) x_{j}^{(i)} xj(i)——代表矩阵中第 i i i行的第 j j j个特征,也就是第 i i i个训练实例的第 j j j个特征
(1) 假设函数: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+...+\theta_{n}x_{n} hθ(x)=θ0+θ1x1+θ2x2+...+θnxn
该公式中 n + 1 n+1 n+1 个参数和 n n n 个变量,为了使公式能够简化一些,引入 x 0 = 1 x_{0}=1 x0=1 ,则公式转化为:
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}(x)=\theta_{0}x_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+...+\theta_{n}x_{n} hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn
化为向量形式为:
h θ ( x ) = θ T X h_{\theta}(x)=\theta^{T}X hθ(x)=θTX
其中,特征矩阵 $X $的维度是 m ∗ ( n + 1 ) m*(n+1) m∗(n+1)
(2) 参数: θ 0 , . . . , θ n → θ \theta_{0},...,\theta_{n}\rightarrow\theta θ0,...,θn→θ
(3) 代价函数: J ( θ 0 , . . . , θ n ) = J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_{0},...,\theta_{n})=J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ0,...,θn)=J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
(4) 梯度下降算法(多变量线性回归):
R e p e a t { θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , . . . , θ n ) } Repeat\left\{\theta_{j}:=\theta_{j}-\alpha\frac{\partial}{\partial\theta_{j}}J(\theta_{0},...,\theta_{n})\right\} Repeat{θj:=θj−α∂θj∂J(θ0,...,θn)}
即:
R e p e a t { θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) } ( 同 时 更 新 θ j f o r j = 0 , . . . , n ) Repeat\left\{\theta_{j}:=\theta_{j}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})\cdot x_{j}^{(i)}\right\}\\(同时更新\theta_{j} for j=0,...,n) Repeat{θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))⋅xj(i)}(同时更新θjforj=0,...,n) -
梯度下降实践
(1)特征缩放:
在多维特征的时候,要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
1)将特征值都除以最大值, x n = x n max x_{n}=\frac{x_{n}}{\max} xn=maxxn;
2)均值归一化,即: x n = x n − μ n s n x_{n}=\frac{x_{n}-\mu_{n}}{s_{n}} xn=snxn−μn,其中, μ n \mu_{n} μn 为平均值,训练集中特征的平均值; s n s_{n} sn 为标准差或该特征值的取值范围 max − min \max-\min max−min
(2)学习率:
梯度下降算法的每次迭代受到学习率的影响,如果学习率 α \alpha α 过小,则达到收敛所需的迭代次数会非常高;如果学习率 α \alpha α 过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试这些学习率: α = 0.01 , 0.03 , 0.1 , 0.3 , 1 , 3 , 10 \alpha=0.01,0.03,0.1,0.3,1,3,10 α=0.01,0.03,0.1,0.3,1,3,10 -
特征和多项式回归
线性回归并不适用于所有的数据,有时我们需要用曲线来拟合数据集,比如一个二次方模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^2 hθ(x)=θ0+θ1x1+θ2x22 或者三次方模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^2+\theta_{3}x_{3}^3 hθ(x)=θ0+θ1x1+θ2x22+θ3x33 。通常我们需要先观察数据然后再决定尝试采用什么样的模型。那么当采用多项式回归模型时,在运行梯度下降算法前,特征缩放非常有必要。
2.3 正规方程
-
目前为止,一直都在使用梯度下降算法,但对于某些线性回归问题,正规方程方法是更好的解决方案。如: J ( θ ) = a θ 2 + b θ + c J(\theta)=a\theta^2+b\theta+c J(θ)=aθ2+bθ+c。
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的: ∂ ∂ θ j J ( θ j ) = 0 \frac{\partial}{\partial\theta_{j}}J(\theta_{j})=0 ∂θj∂J(θj)=0。假设训练集特征矩阵为 X X X (包含了 x 0 = 1 x_{0}=1 x0=1 ),训练集结果为向量 y y y ,则利用正规方程解出向量: θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy
【注意】:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和以米为单位的尺寸两个特征,也可能是特征数量大于训练集的数量),正规方程方法是不能用的。 -
梯度下降与正规方程的比较:
梯度下降 | 正规方程 |
---|---|
(1)需要选择学习率 α \alpha α | (1)不需要 |
(2)需要多次迭代 | (2)一次运算得出 |
(3)当特征数量 n n n 大时,也能较好使用 | (3)需要计算 ( X T X ) − 1 (X^TX)^{-1} (XTX)−1 ,如果特征数量 n n n 较大时则运算代价大,因为矩阵逆运算时间复杂度为 O ( n 3 ) O(n^3) O(n3) ,通常来说当 n n n 小于 10000 时还是可以接受的 |
(4)适用于各种类型的模型 | (4)只适用于线性模型,不适合逻辑回归模型等其他模型 |
三、逻辑回归
3.1 分类问题
在分类问题中,要预测的变量 y y y 是离散的值,预测结果是否属于某一个类。逻辑回归算法是目前最流行使用最广泛的一种分类学习方法,该算法是性质是:它的输出值永远在 0 到 1 之间。(这里说明一下,为什么不能用线性回归算法来解决分类问题:因为对于分类, y y y 取值为 0 或 1 ,但如果使用的是线性回归,则假设函数的输出值可能远大于 1 或远小于 0 ,即使所有的训练样本的标签 y y y 都等于 0 或 1 )
3.2 假设函数
逻辑回归模型:
假设函数:
h
θ
(
x
)
=
g
(
θ
T
X
)
h_{\theta}(x)=g(\theta^TX)
hθ(x)=g(θTX)
其中,
X
X
X 代表特征向量,
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1 ,
g
g
g 代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(Sigmoid function)
得到:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
X
h_{\theta}(x)=\frac{1}{1+e^{-\theta^TX}}
hθ(x)=1+e−θTX1
h θ ( x ) h_{\theta}(x) hθ(x) 的作用:对于给定的输入变量,根据选择的参数计算输出变量 = 1 =1 =1 的可能性,即 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_{\theta}(x)=P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ)
3.3 决策边界
在逻辑回归中,我们预测:
当
h
θ
(
x
)
≥
0.5
h_{\theta}(x) \geq0.5
hθ(x)≥0.5 时,预测
y
=
1
y=1
y=1
当
h
θ
(
x
)
<
0.5
h_{\theta}(x) <0.5
hθ(x)<0.5 时,预测
y
=
0
y=0
y=0
即:
θ
T
X
≥
0
\theta^TX \geq0
θTX≥0 时,预测
y
=
1
y=1
y=1
θ
T
X
<
0
\theta^TX <0
θTX<0 时,预测
y
=
0
y=0
y=0
例如:假设有一个模型: h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 ) h_{\theta}(x)=g(\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}) hθ(x)=g(θ0+θ1x1+θ2x2),参数 θ \theta θ 是向量[-3 1 1],则当 − 3 + x 1 + x 2 ≥ 0 -3+x_{1}+x_{2}\geq0 −3+x1+x2≥0 ,即 x 1 + x 2 ≥ 3 x_{1}+x_{2}\geq3 x1+x2≥3 时,模型将预测 y = 1 y=1 y=1 。其中绘制的直线 x 1 + x 2 = 3 x_{1}+x_{2}=3 x1+x2=3 ,便是模型的分界线,也就是决策边界。
对于高阶多项式特征,可得到更复杂的决策边界,如: h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 1 2 x 2 + θ 5 x 1 2 x 2 2 + θ 6 x 1 3 x 2 + . . . ) h_{\theta}(x)=g(\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\theta_{3}x_{1}^2+\theta_{4}x_{1}^2x_{2}+\theta_{5}x_{1}^2x_{2}^2+\theta_{6}x_{1}^3x_{2}+...) hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x12x2+θ5x12x22+θ6x13x2+...)
3.4 代价函数
对于线性回归,所定义的代价函数是所有模型误差的平方和,理论上,对于逻辑回归模型也可以采用这个定义,但问题在于,当将逻辑回归的假设函数 h θ ( x ) = 1 1 + e − θ T X h_{\theta}(x)=\frac{1}{1+e^{-\theta^TX}} hθ(x)=1+e−θTX1 带入到定义的代价函数中时,得到的代价函数将是一个非凸函数,这意味着代价函数存在很多个局部最小值,这将会影响梯度下降算法寻找全局最小值。
线性回归的代价函数为: J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ)=m1∑i=1m21(hθ(x(i))−y(i))2
重新定义逻辑回归的代价函数为: J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) 其 中 , C o s t ( h θ ( x ( i ) ) , y ( i ) ) = { − log ( h θ ( x ) ) if y = 1 − log ( 1 − h θ ( x ) ) if y = 0 J(\theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_{\theta}(x^{(i)}),y^{(i)})\\ 其中,Cost(h_{\theta}(x^{(i)}),y^{(i)})=\begin{cases} -\log(h_{\theta}(x)) & \text{ if } y=1 \\ -\log(1-h_{\theta}(x)) & \text{ if } y=0 \end{cases} J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))其中,Cost(hθ(x(i)),y(i))={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 与
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_{\theta}(x),y)
Cost(hθ(x),y) 之间的关系如下图:
这样构建
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_{\theta}(x),y)
Cost(hθ(x),y) 函数的特点是:
当实际的
y
=
1
y=1
y=1 ,且
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 也为 1 时,误差为 0 ;
y
=
1
y=1
y=1 ,但
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 不为 1 时,误差随
h
θ
(
x
)
h_{\theta}(x)
hθ(x)变小而变大;
当实际的
y
=
0
y=0
y=0 ,且
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 也为 0 时,误差为 0 ;
y
=
0
y=0
y=0 ,但
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 不为 0 时,误差随
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 变大而变大。
简化如下:
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
=
{
−
log
(
h
θ
(
x
)
)
if
y
=
1
−
log
(
1
−
h
θ
(
x
)
)
if
y
=
0
⇒
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
y
⋅
log
(
h
θ
(
x
)
)
−
(
1
−
y
)
⋅
log
(
1
−
h
θ
(
x
)
)
Cost(h_{\theta}(x^{(i)}),y^{(i)})=\begin{cases} -\log(h_{\theta}(x)) & \text{ if } y=1 \\ -\log(1-h_{\theta}(x)) & \text{ if } y=0 \end{cases}\\ \Rightarrow Cost(h_{\theta}(x),y)=-y\cdot\log(h_{\theta}(x))-(1-y)\cdot\log(1-h_{\theta}(x))
Cost(hθ(x(i)),y(i))={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0⇒Cost(hθ(x),y)=−y⋅log(hθ(x))−(1−y)⋅log(1−hθ(x))
代入到代价函数中得:
J
(
θ
)
=
−
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}^{m}\left(y^{(i)}\cdot\log(h_{\theta}(x^{(i)}))+(1-y^{(i)})\cdot\log(1-h_{\theta}(x^{(i)})) \right)
J(θ)=−m1i=1∑m(y(i)⋅log(hθ(x(i)))+(1−y(i))⋅log(1−hθ(x(i))))
3.5 梯度下降算法
在得到这样一个代价函数之后,便可用梯度下降算法来获得能使代价函数最小得参数了。算法为:
R
e
p
e
a
t
:
{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
(
同
时
更
新
所
有
的
θ
j
)
}
Repeat:\left \{ \theta_{j}:=\theta_{j}-\alpha\frac{\partial}{\partial\theta_{j}}J(\theta)(同时更新所有的\theta_{j})\right \}
Repeat:{θj:=θj−α∂θj∂J(θ)(同时更新所有的θj)}
求导后得:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
,
j
=
0
,
.
.
.
n
\theta_{j}:=\theta_{j}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)},j=0,...n
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i),j=0,...n
注意,上述得到的梯度下降算法虽然表面上与线性回归的梯度下降算法一样,但是这里的 h θ ( x ) h_{\theta}(x) hθ(x) 与线性回归中不同(两者的假设函数不同,线性回归中: h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + . . . + θ n x n h_{\theta}(x)=\theta^TX=\theta_{0}x_{0}+\theta_{1}x_{1}+...+\theta_{n}x_{n} hθ(x)=θTX=θ0x0+θ1x1+...+θnxn ,逻辑回归中: h θ ( x ) = g ( θ T X ) = 1 1 + e − θ T X h_{\theta}(x)=g(\theta^TX)=\frac{1}{1+e^{-\theta^TX}} hθ(x)=g(θTX)=1+e−θTX1 ),所以,实际上是不一样的。另外,在运行梯度下降算法之前,进行特征缩放依然是非常要必要的。
3.6 多分类问题:一对多
h
θ
(
i
)
(
x
)
=
P
(
y
=
i
∣
x
;
θ
)
,
i
=
1
,
2
,
3
h_{\theta}^{(i)}(x)=P(y=i|x;\theta),i=1,2,3
hθ(i)(x)=P(y=i∣x;θ),i=1,2,3
最后,为了做出预测,在三个分类器里面输入一个新的 x x x 值,然后选择一个让 h θ ( i ) ( x ) h_{\theta}^{(i)}(x) hθ(i)(x) 最大的 i i i ,即: max i h θ ( i ) ( x ) \max_{i}h_{\theta}^{(i)}(x) maxihθ(i)(x) 。其中, i i i 对应每一个可能的 y = i y=i y=i。