机器学习
1.1 什么是机器学习
- Field of study that gives computers the ability to learn without being explicitly programmed. (Arthur Samuel)
- A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E. (Tom Mitchell)
1.2 监督学习
监督学习(Supervised Learning):给学习算法一个有标签的数据集,数据集中每条数据都给出了正确的答案。
-
回归问题(Regression Problem):y是连续的
-
分类问题(Classification Problem):y是离散的
1.3 无监督学习
无监督学习(Unsupervised Learning):给学习算法一个无标签、或有相同标签的数据集,让算法自己寻找有价值的结构。
聚类算法(Clustering Algorithm):将无标签的数据集分为不同的簇,是一种无监督学习。
2.1 模型描述
变量名 | 含义 |
---|---|
m | 训练样本的数量 |
n | 特征数量 |
x | 输入变量/特征 |
y | 输出变量/目标变量 |
(x, y) | 一个训练样本 |
(x(i), y(i)) | 第i个训练样本 |
xj(i) | 第j个特征的第i个训练样本的值 |
监督学习:给出训练集,经过监督学习算法,获得一个假设函数 h h h,函数 h h h 会输出x对于的预测值 y y y
2.2 线性回归 与 代价函数
-
单变量线性回归(Linear Regression with One Variable)
假设函数(Hypothesis Function):
h θ ( x ) = θ 0 + θ 1 x h_\theta(x) = \theta_0 + \theta_1x hθ(x)=θ0+θ1x
代价函数(Cost Function):平法误差代价函数(Square Error 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
优化目标:
min ( θ 0 , θ 1 ) J ( θ 0 , θ 1 ) \min_{(\theta_0,\theta_1)} \space J(\theta_0,\theta_1) (θ0,θ1)min J(θ0,θ1) -
多元线性回归( Multivariate Linear Regression)
假设函数:
Θ = [ θ 0 , θ 1 , θ 2 , . . . , θ n ] T , X = [ x 0 , x 1 , x 2 , . . . , x n ] T h θ ( x ) = Θ T X = ∑ j = 0 n θ j x j , 其 中 x 0 = 1 \Theta = [\theta_0,\theta_1,\theta_2,...,\theta_n]^T,\space\space X=[x_0,x_1,x_2,...,x_n]^T \\h_\theta(x) = \Theta^T X = \sum ^n _{j=0} \theta_j x_j \space,\space\space\space\space其中x_0=1 Θ=[θ0,θ1,θ2,...,θn]T, X=[x0,x1,x2,...,xn]Thθ(x)=ΘTX=j=0∑nθjxj , 其中x0=1
代价函数:
J ( Θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\Theta) = \frac{1}{2m} \sum _{i=1} ^{m} (h _\theta (x^{(i)}) - y ^{(i)}) ^2 J(Θ)=2m1i=1∑m(hθ(x(i))−y(i))2
优化目标:
min Θ J ( Θ ) \min_{\Theta} \space J(\Theta) Θmin J(Θ)
2.3 线性回归中的优化算法
优化算法:达到优化目标的算法
计算代价函数最小值的方法有 梯度下降法(Gradient Descent) 和 正规方程组法(Normal Equations )
2.3.1 梯度下降
2.3.1.1 算法过程
梯度下降(Gradient Descent):是一种用于最小化任意函数的算法
repeat until convergence{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
Θ
)
\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\Theta)
θj:=θj−α∂θj∂J(Θ) ( simultaneously update for
j
j
j = 0,
j
j
j = 1,
j
j
j = 2, …,
j
j
j = n) //这里
θ
0
\theta_0
θ0 与
θ
1
\theta_1
θ1 要同步更新
}
α
\alpha
α: 学习率(Learning Rate)
∂
∂
θ
j
J
(
Θ
)
\frac{\partial}{\partial \theta_j}J(\Theta)
∂θj∂J(Θ): 斜率
求出偏导之后
repeat until convergence{
θ
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^{(i)}_{j}}
θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i) ( simultaneously update for
j
j
j = 0,
j
j
j = 1,
j
j
j = 2, …,
j
j
j = n)
}
2.3.1.2 特征缩放
对每个特征
x
i
x_i
xi,做以下处理,
x
i
=
x
i
−
μ
i
s
i
其
中
μ
i
为
特
征
x
的
平
均
值
,
s
i
为
范
围
,
即
s
i
=
(
最
大
值
−
最
小
值
)
x_i = \frac{x_i-\mu_i}{s_i} \\ 其中 \mu_i为特征x的平均值,s_i为范围,即s_i = (最大值-最小值)
xi=sixi−μi其中μi为特征x的平均值,si为范围,即si=(最大值−最小值)
目的是将各个特征值转化到相近似的范围内,以保证梯度下降时可以快速找到代价函数的最低点。特征缩放不必太精确
2.3.1.3 学习率
过大的学习率会导致每次迭代之后选择的
θ
\theta
θ,其对应的代价函数的值会逐渐变大,而过小的学习率会到时迭代多次。为了选择合适的学习率依次尝试 0.001 0.003 0.01 0.03 0.1 0.3 1 ...
2.3.2 正规方程
直接让
θ
\theta
θ 等于该解即可:
θ
=
(
X
T
X
)
−
1
X
T
y
其
中
X
为
m
×
(
n
+
1
)
维
矩
阵
,
y
为
m
维
的
列
向
量
\theta=(X^TX)^{-1}X^Ty \\ 其中X为m\times(n+1)维矩阵,y为m维的列向量
θ=(XTX)−1XTy其中X为m×(n+1)维矩阵,y为m维的列向量
若
X
T
X
X^TX
XTX 不可逆,需要做以下处理和检查:
① 若某两个特征变量具有线性关系,则删除一个
② 若有过多的特征变量(比如
m
≤
n
m \le n
m≤n ),则需要删除一些特征变量,或对其进行正规化处理。
2.3.3 比较
梯度下降法需要学习率 α \alpha α,需要计算机不断迭代。通常适合特征变量的数目较多的数据集,即 n > 1 0 6 n>10^6 n>106 或者
正规方程法不需要学习率,不需要迭代,数据集的特征变量的数目较少时适用,即 n < 1 0 4 n<10^4 n<104。
3.1 分类问题 与 代价函数
-
逻辑回归(Logistic Regression)模型:二分类
引入sigmoid函数
假设函数:
h θ ( x ) = g ( Θ T X ) 其 中 g ( z ) = 1 1 + e − z , h θ ( x ) 表 示 给 定 θ 和 x 后 得 到 y = 1 的 概 率 h_\theta(x)=g(\Theta^TX) \\ 其中\space g(z)=\frac{1}{1+e^{-z}},h_\theta(x)表示给定\theta和x后得到y=1的概率 hθ(x)=g(ΘTX)其中 g(z)=1+e−z1,hθ(x)表示给定θ和x后得到y=1的概率决策边界(Decision Boundary):是假设函数的属性,而非数据集的属性
Θ T X = 0 当 Θ T X ≥ 0 时 , h θ ( x ) ≥ 0.5 , 预 测 结 果 为 y = 1 当 Θ T X < 0 时 , h θ ( x ) < 0.5 , 预 测 结 果 为 y = 0 \Theta^TX=0 \\当\Theta^TX \ge 0时,h_\theta(x) \ge 0.5,预测结果为y=1 \\当\Theta^TX \lt 0时,h_\theta(x) \lt 0.5,预测结果为y=0 ΘTX=0当ΘTX≥0时,hθ(x)≥0.5,预测结果为y=1当ΘTX<0时,hθ(x)<0.5,预测结果为y=0
代价函数:
J ( Θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) 其 中 C o s t ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) i f y = 1 − log ( 1 − h θ ( x ) ) i f y = 0 合 并 起 来 即 C o s t ( 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} Cost(h_\theta(x^{(i)}),y^{(i)}) \\其中Cost(h_\theta(x),y)= \begin{cases} -\log(h_\theta(x)) & if \space y=1\\ -\log(1-h_\theta(x)) & if \space y = 0 \end{cases} \\合并起来即Cost(h_\theta(x),y)=-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x)) \\\space\\ 化简之后得到:\\ J(\Theta)=-\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))其中Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0合并起来即Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x)) 化简之后得到:J(Θ)=−m1i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
优化目标:
min Θ J ( Θ ) \min_{\Theta} \space J(\Theta) Θmin J(Θ) -
多元分类问题:一对多法
假设分k类,则创建 k k k 个分类器,每个分类器做 属于 i i i 类 和 不属于 i i i 类 的二分类工作。构建模型
当有新的 x x x 输入后,将新x同时输入到这 k k k 个分类器中,选择假设值 h ( x ) h(x) h(x) 最高的结果,则预测 x x x 属于该类
3.2 逻辑回归中的优化算法
3.2.1 梯度下降
梯度下降方法:
repeat until convergence{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
Θ
)
\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\Theta)
θj:=θj−α∂θj∂J(Θ) ( simultaneously update for
j
j
j = 0,
j
j
j = 1,
j
j
j = 2, …,
j
j
j = n) //这里
θ
0
\theta_0
θ0 与
θ
1
\theta_1
θ1 要同步更新
}
求出偏导之后,意外的发现跟线性回归问题的偏导结果一样,但要注意
h
θ
(
x
)
h_\theta(x)
hθ(x) 不同
repeat until convergence{
θ
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^{(i)}_{j}}
θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i) ( simultaneously update for
j
j
j = 0,
j
j
j = 1,
j
j
j = 2, …,
j
j
j = n)
}
3.2.2 高级优化算法
优点:①不需要手动选择
α
\alpha
α ②通常收敛的比梯度下降快
缺点:较复杂
- 共轭梯度( Conjugate Gradient)
- BFGS
- L-BFGS
3.3 过拟合问题
3.3.1 过拟合
过拟合:有太多特征变量,而训练数据相对较少,导致训练集几乎被完美的拟合( J ( θ ) ≈ 0 J(\theta)\approx0 J(θ)≈0),但却无法很好的泛化到新的数据
解决过拟合的方法:
- 减少特征变量的个数
- 正则化(Regularization)
3.3.2 正则化的代价函数
-
线性回归的代价函数的正则化
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] 其 中 λ 为 正 则 化 参 数 j 取 1 , 2 , . . . , n 或 者 0 , 1 , 2 , . . . , n 都 可 , 约 定 俗 成 的 取 1 , 2 , . . . , n J(\theta)=\frac{1}{2m}[\sum _{i=1} ^{m} (h_\theta(x^{(i)})-y^{(i)})^2 + \lambda \sum _{j=1} ^{n} \theta_j^2] \\其中\lambda为正则化参数 \\j取1,2,...,n或者0,1,2,...,n都可,约定俗成的取1,2,...,n J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]其中λ为正则化参数j取1,2,...,n或者0,1,2,...,n都可,约定俗成的取1,2,...,n -
逻辑回归的代价函数的正则化
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 其 中 λ 为 正 则 化 参 数 j 取 1 , 2 , . . . , n 或 者 0 , 1 , 2 , . . . , n 都 可 , 约 定 俗 成 的 取 1 , 2 , . . . , n J(\theta)=-\frac{1}{m}\sum _{i=1} ^{m} [y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))] + \frac{\lambda}{2m}\sum_{j=1} ^{n}\theta_j^2 \\其中\lambda为正则化参数 \\j取1,2,...,n或者0,1,2,...,n都可,约定俗成的取1,2,...,n J(θ)=−m1i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2其中λ为正则化参数j取1,2,...,n或者0,1,2,...,n都可,约定俗成的取1,2,...,n
3.3.3 线性回归的正则化
-
梯度下降的正则化
添加正则化的项之后,算法流程如下:
repeat until convergence{
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{0}} θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))x0(i) // j j j = 0 被单独分开写
θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] \theta_j := \theta_j - \alpha [\frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{j}} +\frac{\lambda}{m}\theta_j] θj:=θj−α[m1∑i=1m(hθ(x(i))−y(i))xj(i)+mλθj]
// ( simultaneously update forj j j = 0,j j j = 1, j j j = 2, …, j j j = n)
}整理一下后得:
repeat until convergence{
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{0}} θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))x0(i) // j j j = 0 被单独分开写
θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j(1-\alpha \frac{\lambda}{m}) - \alpha \frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{j}} θj:=θj(1−αmλ)−αm1∑i=1m(hθ(x(i))−y(i))xj(i)
// ( simultaneously update forj j j = 0,j j j = 1, j j j = 2, …, j j j = n)
}相当于每次迭代时,将 θ j \theta_j θj 乘上一个比1略小一点的数( 1 − α λ m 1-\alpha \frac{\lambda}{m} 1−αmλ)后,再按照原步骤梯度下降。
-
正规方程的正则化
直接让 θ \theta θ等于该解即可:
θ = ( X T X + λ [ 0 1 ⋱ 1 ] ) − 1 X T y 其 中 X 为 m × ( n + 1 ) 维 矩 阵 , y 为 m 维 的 列 向 量 与 λ 相 乘 的 矩 阵 为 ( n + 1 ) × ( n + 1 ) 维 矩 阵 \theta=(X^TX+\lambda\left[ \begin{matrix} 0 & & & \\ & 1 & & \\ & & \ddots & \\ & & & 1 \\ \end{matrix} \right])^{-1}X^Ty \\ 其中X为m\times(n+1)维矩阵,y为m维的列向量 \\与\lambda相乘的矩阵为(n+1)\times(n+1)维矩阵 θ=(XTX+λ⎣⎢⎢⎡01⋱1⎦⎥⎥⎤)−1XTy其中X为m×(n+1)维矩阵,y为m维的列向量与λ相乘的矩阵为(n+1)×(n+1)维矩阵
3.3.4 逻辑回归的正则化
-
梯度下降的正则化:
算法表面看上去与线性回归一样,但假设函数 h θ ( x ) h_\theta(x) hθ(x) 完全不一样
添加正则化的项之后,算法流程如下:
repeat until convergence{
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{0}} θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))x0(i) // j j j = 0 被单独分开写
θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] \theta_j := \theta_j - \alpha [\frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{j}} +\frac{\lambda}{m}\theta_j] θj:=θj−α[m1∑i=1m(hθ(x(i))−y(i))xj(i)+mλθj]
// ( simultaneously update forj j j = 0,j j j = 1, j j j = 2, …, j j j = n)
}整理一下后得:
repeat until convergence{
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{0}} θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))x0(i) // j j j = 0 被单独分开写
θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j(1-\alpha \frac{\lambda}{m}) - \alpha \frac{1}{m} \sum _{i=1} ^m {(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{j}} θj:=θj(1−αmλ)−αm1∑i=1m(hθ(x(i))−y(i))xj(i)
// ( simultaneously update forj j j = 0,j j j = 1, j j j = 2, …, j j j = n)
} -
高级优化算法的正则化:
4.1 神经网络
4.1.1 概念
a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 ) a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ 22 ( 1 ) x 2 + Θ 23 ( 1 ) x 3 ) a 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) h Θ ( x ) = a 1 ( 3 ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 13 ( 2 ) a 3 ( 2 ) ) a_1^{(2)}=g(\Theta_{10}^{(1)}x_0+\Theta_{11}^{(1)}x_1+\Theta_{12}^{(1)}x_2+\Theta_{13}^{(1)}x_3)\\ a_2^{(2)}=g(\Theta_{20}^{(1)}x_0+\Theta_{21}^{(1)}x_1+\Theta_{22}^{(1)}x_2+\Theta_{23}^{(1)}x_3)\\ a_3^{(2)}=g(\Theta_{30}^{(1)}x_0+\Theta_{31}^{(1)}x_1+\Theta_{32}^{(1)}x_2+\Theta_{33}^{(1)}x_3)\\ h_{\Theta}(x)=a_1^{(3)}= g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{(2)} + \Theta_{12}^{(2)}a_2^{(2)} + \Theta_{13}^{(2)}a_3^{(2)}) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)hΘ(x)=a1(3)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
变量名 | 含义 |
---|---|
a i ( j ) a_i^{(j)} ai(j) | 第 j j j 层的第 i i i 个神经元的激活项 |
Θ ( j ) \Theta^{(j)} Θ(j) | 控制函数从第
j
j
j 层映射到第
j
+
1
j+1
j+1 层的权重矩阵 若第 j j j 层有 s j s_j sj 个单元,第 j + 1 j+1 j+1 层有 s j + 1 s_{j+1} sj+1 个单元,则矩阵 Θ ( j ) \Theta^{(j)} Θ(j) 维度是 s j + 1 × ( s j + 1 ) s_{j+1}\times(s_j+1) sj+1×(sj+1) |
Layer1 | 输入层 |
Layer2 | 隐藏层,非输入层或输出层的都为隐藏层 |
Layer3 | 输出层 |
向量化表示:前向传播(Forward Propagation)
x
=
[
x
0
x
1
x
2
x
3
]
z
(
2
)
=
[
z
1
(
2
)
z
2
(
2
)
z
3
(
2
)
]
z
(
2
)
=
Θ
(
1
)
x
a
(
2
)
=
g
(
z
(
2
)
)
,
A
d
d
a
0
(
2
)
=
1
z
(
3
)
=
Θ
(
2
)
a
(
2
)
h
Θ
(
x
)
=
a
(
3
)
=
g
(
z
(
3
)
)
x=\left[\begin{matrix}x_0\\x_1\\x_2\\x_3\end{matrix}\right] \space \space \space \space \space \space \space \space \space \space \space \space \space \space z^{(2)}=\left[\begin{matrix}z_1^{(2)}\\z_2^{(2)}\\z_3^{(2)} \end{matrix}\right] \\z^{(2)}=\Theta^{(1)}x \\a^{(2)}=g(z^{(2)}),\space Add\space a_0^{(2)}=1 \\z^{(3)}=\Theta^{(2)}a^{(2)} \\h_\Theta(x)=a^{(3)}=g(z^{(3)})
x=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤ z(2)=⎣⎢⎡z1(2)z2(2)z3(2)⎦⎥⎤z(2)=Θ(1)xa(2)=g(z(2)), Add a0(2)=1z(3)=Θ(2)a(2)hΘ(x)=a(3)=g(z(3))
4.1.2 多元分类
二分类时,输出层只有1个单元
多元分类,例如 k k k 类,且 k ≥ 3 k\ge3 k≥3 时,输出层有 k k k 个单元,y可能取值均为 k k k 维的列向量
4.2 神经网络代价函数
代价函数:
h
Θ
(
x
)
∈
R
K
(
h
Θ
(
x
)
)
i
=
i
t
h
o
u
t
p
u
t
J
(
Θ
)
=
−
1
m
[
∑
i
=
1
m
∑
k
=
1
K
y
k
(
i
)
log
(
h
Θ
(
x
(
i
)
)
)
k
+
(
1
−
y
k
(
i
)
)
log
(
1
−
(
h
Θ
(
x
(
i
)
)
)
k
)
]
+
λ
2
m
∑
l
=
1
L
−
1
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
Θ
j
i
(
l
)
)
2
h_\Theta(x)\in \R^K \space \space \space \space \space \space \space \space (h_\Theta(x))_i = i^{th} \space output \\J(\Theta)= - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{k=1}^{K} y_k^{(i)} \log(h_\Theta(x^{(i)}))_k +(1-y_k^{(i)}) \log(1-(h_\Theta(x^{(i)}))_k) \right] + \frac{\lambda}{2m} \sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}}(\Theta_{ji}^{(l)})^2
hΘ(x)∈RK (hΘ(x))i=ith outputJ(Θ)=−m1[i=1∑mk=1∑Kyk(i)log(hΘ(x(i)))k+(1−yk(i))log(1−(hΘ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(Θji(l))2
4.3 反向传播算法
反向传播算法用于计算代价函数的偏导。
-
前向传播(Forward Propagation)
a ( 1 ) = x a d d ( a 0 ( 1 ) = x 0 = 1 ) z ( 2 ) = Θ ( 1 ) a ( 1 ) a ( 2 ) = g ( z ( 2 ) ) a d d ( a 0 ( 2 ) = 1 ) z ( 3 ) = Θ ( 2 ) a ( 2 ) a ( 3 ) = g ( z ( 3 ) ) a d d ( a 0 ( 3 ) = 1 ) z ( 4 ) = Θ ( 3 ) a ( 3 ) h θ ( x ) = a ( 4 ) = g ( z ( 4 ) ) \begin{aligned} & a^{(1)}=x \space \space \space \space add(a_0^{(1)}=x_0=1)\\ & z^{(2)}=\Theta^{(1)}a^{(1)}\\ & a^{(2)}=g(z^{(2)}) \space \space \space \space add(a_0^{(2)}=1)\\ & z^{(3)}=\Theta^{(2)}a^{(2)}\\ & a^{(3)}=g(z^{(3)}) \space \space \space \space add(a_0^{(3)}=1)\\ & z^{(4)}=\Theta^{(3)}a^{(3)}\\ & h_\theta(x)=a^{(4)}=g(z^{(4)}) \end{aligned} a(1)=x add(a0(1)=x0=1)z(2)=Θ(1)a(1)a(2)=g(z(2)) add(a0(2)=1)z(3)=Θ(2)a(2)a(3)=g(z(3)) add(a0(3)=1)z(4)=Θ(3)a(3)hθ(x)=a(4)=g(z(4)) -
反向传播算法(Back Propagation)
δ j ( 4 ) = a j ( 4 ) − y j δ j ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) . ∗ g ′ ( z ( 3 ) ) 其 中 g ′ ( z ( 3 ) ) = a ( 3 ) . ∗ ( 1 − a ( 3 ) ) δ j ( 2 ) = ( Θ ( 2 ) ) T δ ( 3 ) . ∗ g ′ ( z ( 2 ) ) 其 中 g ′ ( z ( 2 ) ) = a ( 2 ) . ∗ ( 1 − a ( 2 ) ) 则 偏 导 ∂ ∂ Θ i j ( l ) J ( Θ ) = a j ( l ) ⋅ δ i ( l + 1 ) \begin{aligned} & \delta_j^{(4)}=a_j^{(4)}-y_j\\ & \delta_j^{(3)}=(\Theta^{(3)})^T\delta^{(4)}.*g'(z^{(3)}) \space \space \space \space 其中g'(z^{(3)})=a^{(3)}.*(1-a^{(3)}) \\ & \delta_j^{(2)}=(\Theta^{(2)})^T\delta^{(3)}.*g'(z^{(2)}) \space \space \space \space 其中g'(z^{(2)})=a^{(2)}.*(1-a^{(2)}) \\ & \\ & 则偏导\boxed{\frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta)=a_j^{(l)}·\delta_i^{(l+1)}} \end{aligned} δj(4)=aj(4)−yjδj(3)=(Θ(3))Tδ(4).∗g′(z(3)) 其中g′(z(3))=a(3).∗(1−a(3))δj(2)=(Θ(2))Tδ(3).∗g′(z(2)) 其中g′(z(2))=a(2).∗(1−a(2))则偏导∂Θij(l)∂J(Θ)=aj(l)⋅δi(l+1)
算法步骤:训练集: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } \{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\} {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
Set Δ i j ( l ) = 0 \Delta_{ij}^{(l)}=0 Δij(l)=0 (for all l , i , j l, i, j l,i,j).
For i = 1 i=1 i=1 to m m m:
Set a ( 1 ) = x ( i ) a^{(1)}=x^{(i)} a(1)=x(i)
执行forward propagation来计算: a ( l ) a^{(l)} a(l) for l = 2 , 3 , . . . , L l=2,3,...,L l=2,3,...,L
用 y ( i ) y^{(i)} y(i)来计算: δ ( L ) = a ( L ) − y ( i ) \delta^{(L)}=a^{(L)}-y^{(i)} δ(L)=a(L)−y(i)
计算: δ ( L − 1 ) , δ ( L − 1 ) , . . . , δ ( 2 ) \delta^{(L-1)},\delta^{(L-1)},...,\delta^{(2)} δ(L−1),δ(L−1),...,δ(2)
执行一遍: Δ ( l ) = Δ ( l ) + δ ( l + 1 ) ( a ( l ) ) T \Delta^{(l)}=\Delta^{(l)}+\delta^{(l+1)}(a^{(l)})^T Δ(l)=Δ(l)+δ(l+1)(a(l))T
End.
循环结束后再执行:
D i j ( l ) : = 1 m Δ i j ( l ) + λ Θ i j ( l ) D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)} + \lambda \Theta_{ij}^{(l)} Dij(l):=m1Δij(l)+λΘij(l) if j ≠ 0 j \ne 0 j=0
D i j ( l ) : = 1 m Δ i j ( l ) D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)} Dij(l):=m1Δij(l) if j = 0 j = 0 j=0最后得到的 D i j ( l ) D_{ij}^{(l)} Dij(l) 便有: ∂ ∂ Θ i j ( l ) J ( Θ ) = D i j ( l ) \boxed{\frac{\partial}{\partial \Theta_{ij}^{(l)}} J(\Theta) =D_{ij}^{(l)}} ∂Θij(l)∂J(Θ)=Dij(l)
4.4 梯度检测
梯度检测(Gradient Checking):用于验证反向传播实现的正确性。
θ
∈
R
n
θ
=
[
θ
1
,
θ
2
,
.
.
.
,
θ
n
]
∂
∂
θ
1
J
(
θ
)
≈
J
(
θ
1
+
ϵ
,
θ
2
,
.
.
,
θ
n
)
−
J
(
θ
1
−
ϵ
,
θ
2
,
.
.
,
θ
n
)
2
ϵ
∂
∂
θ
2
J
(
θ
)
≈
J
(
θ
1
,
θ
2
+
ϵ
,
.
.
,
θ
n
)
−
J
(
θ
1
,
θ
2
−
ϵ
,
.
.
,
θ
n
)
2
ϵ
∂
∂
θ
n
J
(
θ
)
≈
J
(
θ
1
,
θ
2
,
.
.
,
θ
n
+
ϵ
)
−
J
(
θ
1
,
θ
2
,
.
.
,
θ
n
−
ϵ
)
2
ϵ
\begin{aligned} & \theta \in \R^n \\ & \theta=[\theta_1,\theta_2,...,\theta_n]\\ & \frac{\partial}{\partial \theta_1}J(\theta) \approx \frac{J(\theta_1 +\epsilon ,\theta_2,..,\theta_n)-J(\theta_1 - \epsilon ,\theta_2,..,\theta_n)}{2 \epsilon}\\ & \frac{\partial}{\partial \theta_2}J(\theta) \approx \frac{J(\theta_1,\theta_2 +\epsilon ,..,\theta_n)-J(\theta_1 ,\theta_2 - \epsilon,..,\theta_n)}{2 \epsilon}\\ & \frac{\partial}{\partial \theta_n}J(\theta) \approx \frac{J(\theta_1,\theta_2 ,..,\theta_n+\epsilon )-J(\theta_1 ,\theta_2,..,\theta_n - \epsilon)}{2 \epsilon}\\ \end{aligned}
θ∈Rnθ=[θ1,θ2,...,θn]∂θ1∂J(θ)≈2ϵJ(θ1+ϵ,θ2,..,θn)−J(θ1−ϵ,θ2,..,θn)∂θ2∂J(θ)≈2ϵJ(θ1,θ2+ϵ,..,θn)−J(θ1,θ2−ϵ,..,θn)∂θn∂J(θ)≈2ϵJ(θ1,θ2,..,θn+ϵ)−J(θ1,θ2,..,θn−ϵ)
代码实现:
for i = 1:n,
thetaPlus = theta;
thetaPlus(i) = thetaPlus(i) + EPSILON;
thetaMinus = theta;
thetaMinus(i) = thetaMinus(i) - EPSILON;
gradApprox(i) = (J(thetaPlus) - J(thetaMinus)) / (2 * EPSILON);
end;
c h e c k : g r a d A p p r o x ≈ D V e c D V e c 由 反 向 传 播 算 法 得 出 。 check:\boxed{gradApprox \approx DVec}\\ DVec由反向传播算法得出。 check:gradApprox≈DVecDVec由反向传播算法得出。
确保二者结果近似。结束后要关闭 梯度检测,使用反向传播算法来进行机器学习,因为反向传播算法效率更高。
4.5 随机初始化参数(权重)
不能初始化为0,否则会导致最后的结果都一致。
应将 Θ i j ( l ) \Theta_{ij}^{(l)} Θij(l) 初始化为: − ϵ ≤ Θ i j ( l ) ≤ ϵ -\epsilon \le \Theta_{ij}^{(l)} \le \epsilon −ϵ≤Θij(l)≤ϵ
代码实现:(假如只有一个隐藏层)
Theta1 = rand(10, 11) * (2 * INIT_EPSILON) - INIT_EPSILON;
Theta2 = rand( 1, 11) * (2 * INIT_EPSILON) - INIT_EPSILON;
4.6 神经网络总结
步骤:
-
选择合适的神经网络结构
① 确定输入单元个数
② 输出单元格数
③ 通常使用单个隐藏层;若有多个隐藏层,通常各隐藏层的单元数一致。通常情况下,隐藏单元越多越好,虽然越多计算量越大。 -
随机初始化权重
-
实现前向传播,得到训练集中每个 x ( i ) x^{(i)} x(i) 的 h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))
-
实现代码,计算代价函数 J ( Θ ) J(\Theta) J(Θ)
-
实现反向传播算法,来计算偏导 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial \Theta_{ij}^{(l)}} J(\Theta) ∂Θij(l)∂J(Θ)
-
用梯度检测来去比 较近似的偏导 与 反向传播得到的偏导是否相似。检测完毕后关掉梯度检测
-
用梯度下降或更高级的优化算法来优化代价函数,从而得到参数 Θ \Theta Θ
步骤 2、3、4、5 通常在一个大循环中从 1 到 m 遍历所有训练样本,对每个训练样本依次执行步骤 2、3、4、5。(算法步骤见4.3节)
5.1 评估假设
将数据集随机取70%作为训练集(Training Set),剩下30%作为测试集(Test Set)
从训练集中学习得到参数 θ \theta θ,然后用得到的假设函数在测试集中计算假设函数的Test Error平均误差 J t e s t ( θ ) J_{test}(\theta) Jtest(θ)。
-
在线性回归问题中,计算方法:
J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta)=\frac{1}{2m_{test}} \sum _{i=1} ^{m_{test}} (h_{\theta}(x_{test}^{(i)})-y_{test}^{(i)})^2 Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2 -
在逻辑回归问题中,计算方法:
J t e s t ( θ ) = − 1 m t e s t ∑ i = 1 m t e s t y t e s t ( i ) log h θ ( x t e s t ( i ) ) + ( 1 − y t e s t ( i ) ) log ( 1 − h θ ( x t e s t ( i ) ) ) J_{test}(\theta)=- \frac{1}{m_{test}} \sum _{i=1} ^{m_{test}} y_{test}^{(i)} \log h_{\theta}(x_{test}^{(i)}) + (1 - y_{test}^{(i)}) \log(1 - h_{\theta}(x_{test}^{(i)})) Jtest(θ)=−mtest1i=1∑mtestytest(i)loghθ(xtest(i))+(1−ytest(i))log(1−hθ(xtest(i)))
或者使用错误分类误差(Misclassification Error)法:
e r r ( h θ ( x ) , y ) = { 1 h θ ( x ) ≥ 0.5 , y = 0 ∣ ∣ h θ ( x ) < 0.5 , y = 1 0 o t h e r w i s e T e s t E r r o r = 1 m t e s t ∑ i = 1 m t e s t e r r ( h θ ( x t e s t ( i ) ) , y t e s t ( i ) ) err(h_\theta(x),y)= \begin{cases} 1 & h_\theta(x) \ge 0.5, y = 0 \space || \space h_\theta(x) < 0.5, y = 1\\ 0 & otherwise \end{cases}\\ Test \space Error=\frac{1}{m_{test}} \sum_{i=1}^{m_{test}}err(h_\theta(x_{test}^{(i)}),y_{test}^{(i)}) err(hθ(x),y)={10hθ(x)≥0.5,y=0 ∣∣ hθ(x)<0.5,y=1otherwiseTest Error=mtest1i=1∑mtesterr(hθ(xtest(i)),ytest(i))
5.2 模型选择
当要进行模型选择时,将数据集随机取60%作为训练集,再随机取20%作为交叉验证集(Cross Validation Set),剩下20%作为测试集
无论模型是否进行正则化处理,以上三种误差均如下定义:
-
训练集误差(Training Error):
J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{train}(\theta)=\frac{1}{2m} \sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2 -
交叉验证集误差(Cross Validation Error):
J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{cv}(\theta)=\frac{1}{2m_{cv}} \sum_{i=1}^{m_{cv}}(h_\theta(x_{cv}^{(i)})-y_{cv}^{(i)})^2 Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2 -
测试集误差(Test Error)
J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta)=\frac{1}{2m_{test}} \sum_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y_{test}^{(i)})^2 Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
模型选择的步骤:
① 用训练集来最小化各个模型的代价函数,得到对应的参数
Θ
\Theta
Θ;
② 用交叉验证集来计算各个模型的误差
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ),选择交叉验证集误差最小的模型(该步骤相当于得到了模型的多项式的次数
d
d
d);
③ 用测试集来评估所选模型的泛化误差
5.3 偏差与方差
偏差(bias):图像左端(
d
d
d过小时),出现高偏差问题,欠拟合。特点:
J
t
r
a
i
n
(
θ
)
很
大
,
且
J
c
v
(
θ
)
≈
J
t
r
a
i
n
(
θ
)
J_{train}(\theta) 很大,且J_{cv}(\theta) \approx J_{train}(\theta)
Jtrain(θ)很大,且Jcv(θ)≈Jtrain(θ)
方差(variance):图像右端(
d
d
d过大时),出现高方差问题,过拟合,没有很好的泛化能力。特点:
J
t
r
a
i
n
(
θ
)
很
小
,
且
J
c
v
(
θ
)
≫
J
t
r
a
i
n
(
θ
)
J_{train}(\theta) 很小,且J_{cv}(\theta) \gg J_{train}(\theta)
Jtrain(θ)很小,且Jcv(θ)≫Jtrain(θ)
5.4 正则化的参数 λ \lambda λ 选择和偏差、方差
对某个模型进行正则化处理,需要选择合适的正则化参数
λ
\lambda
λ:
① 尝试不同级别的参数
λ
\lambda
λ。通常尝试 0, 0.01, 0.02, 0.04, 0.08, 0.16, ..., ...10.24
;
② 用训练集最小化各个参数
λ
\lambda
λ对于的模型的代价函数,得到对应的参数
Θ
\Theta
Θ;
③ 用交叉验证集来计算各个模型的误差
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ),选择交叉验证集误差最小的模型(该步骤相当于得到了模型的多项式的次数
d
d
d);
④ 用测试集来评估所选模型的泛化误差
有正则化参数 λ \lambda λ 的偏差和方差情况:
5.5 学习曲线
学习曲线(Learning Curves):用于检查学习算法的运行是否一切正常;或希望改进算法的表现。
J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{train}(\theta)=\frac{1}{2m} \sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2\\ J_{cv}(\theta)=\frac{1}{2m_{cv}} \sum_{i=1}^{m_{cv}}(h_\theta(x_{cv}^{(i)})-y_{cv}^{(i)})^2 Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
-
一般的学习曲线的样子:
-
高偏差的学习曲线:两个误差值随着 m m m 的增大会越来越接近,直至稳定在一个较高的误差值上。处于高偏差问题的模型不会通过获取更多的训练数据而被改善
-
高方差的学习曲线:总的来说训练误差较小,训练误差与交换验证误差相差较大,且随着 m m m 的增大,交换验证误差会逐渐降低,二者会相互靠近。处于高方差问题的模型可以考虑通过获取更多的训练数据而得到改善
高方差学习曲线1 高方差学习曲线2
5.6 当假设不理想时
当测试的假设不尽如人意时,未来采取的措施通常如下:
措施 | 解决的问题 |
---|---|
获取更多的训练数据 | 高方程问题 |
缩减特征变量 | 高方程问题 |
使用更多的特征变量 | 高偏差问题 |
增加多项式特征( x 1 2 , x 2 2 , x 1 x 2 , e t c . x_1^2,x_2^2,x_1x_2,etc. x12,x22,x1x2,etc.) | 高偏差问题 |
降低正则化参数 λ \lambda λ | 高偏差问题 |
提高正则化参数 λ \lambda λ | 高方差问题 |
6.1 误差分析
推荐方法:
① 从一个可以快速实现的简单算法开始。实施它并在交叉验证数据上对其进行测试。
② 绘制学习曲线以确定是高方差问题还是高偏差问题
③ 误差分析:手动检查算法出错的示例(在交叉验证集中)。看看是否发现了错误类型的示例的任何系统趋势。
6.2 偏斜类的误差评估
偏斜类(Skewed Class):一种分类的数据量远远大于另外一种分类
偏斜类问题的误差评估:
准确率P(Precision):
P
r
e
c
i
s
i
o
n
=
T
r
u
e
P
o
s
i
t
i
v
e
#
P
r
e
d
i
t
c
e
d
P
o
s
i
t
i
v
e
=
T
r
u
e
P
o
s
i
t
i
v
e
T
r
u
e
P
o
s
i
t
i
v
e
+
F
a
l
s
e
P
o
s
i
t
i
v
e
Precision = \frac{True \space Positive}{\#Preditced \space Positive}=\frac{True \space Positive}{True \space Positive + False \space Positive}
Precision=#Preditced PositiveTrue Positive=True Positive+False PositiveTrue Positive
召回率R(Recall):
R
e
c
a
l
l
=
T
r
u
e
P
o
s
i
t
i
v
e
#
A
c
t
u
a
l
P
o
s
i
t
i
v
e
=
T
r
u
e
P
o
s
i
t
i
v
e
T
r
u
e
P
o
s
i
t
i
v
e
+
F
a
l
s
e
N
e
g
a
t
i
v
e
Recall = \frac{True \space Positive}{\#Actual \space Positive}=\frac{True \space Positive}{True \space Positive + False \space Negative}
Recall=#Actual PositiveTrue Positive=True Positive+False NegativeTrue Positive
权衡:取调和平均数
F
1
=
2
1
P
+
1
R
=
2
P
R
P
+
R
F_1=\frac{2}{\frac{1}{P} + \frac{1}{R}} = \frac{2PR}{P + R}
F1=P1+R12=P+R2PR
7.1 支持向量机 与 代价函数
支持向量机(Support Vector Machine, SVM):是一类按监督学习方式对数据进行二元分类的广义线性分类器(generalized linear classifier)。又称大间分类器(Large Margin Classifier)
c o s t 1 ( z ) cost_1(z) cost1(z) | c o s t 0 ( z ) cost_0(z) cost0(z) |
---|---|
优化目标:
min
θ
C
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
1
2
∑
j
=
1
n
θ
j
2
\min_{\theta}C \sum_{i=1}^{m}\left[ y^{(i)} cost_1(\theta^Tx^{(i)}) + (1-y^{(i)})cost_0(\theta^Tx^{(i)}) \right]+\frac{1}{2} \sum_{j=1}^{n}\theta_j^2
θminCi=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21j=1∑nθj2
假设函数:与逻辑回归不同的是,SVM 的假设函数并不会输出概率,而是根据优化目标的到的参数
θ
\theta
θ 直接给出
1
1
1 或
0
0
0 的判断
h
θ
(
x
)
=
{
1
i
f
θ
T
x
≥
0
0
o
t
h
e
r
w
i
s
e
h_\theta(x)= \begin{cases} 1 & if \space \theta^Tx \ge 0\\ 0 & otherwise \end{cases}
hθ(x)={10if θTx≥0otherwise
总结如下:
i
f
y
=
1
:
{
h
θ
(
x
)
=
1
,
c
o
s
t
1
(
θ
T
x
)
=
0
当
θ
T
x
≥
1
h
θ
(
x
)
=
1
,
c
o
s
t
1
(
θ
T
x
)
>
0
当
0
≤
θ
T
x
<
1
h
θ
(
x
)
=
0
,
c
o
s
t
1
(
θ
T
x
)
≫
0
当
−
1
<
θ
T
x
<
0
h
θ
(
x
)
=
0
,
c
o
s
t
1
(
θ
T
x
)
≫
0
当
θ
T
x
≤
−
1
i
f
y
=
0
:
{
h
θ
(
x
)
=
0
,
c
o
s
t
1
(
θ
T
x
)
=
0
当
θ
T
x
≤
−
1
h
θ
(
x
)
=
0
,
c
o
s
t
1
(
θ
T
x
)
>
0
当
−
1
<
θ
T
x
<
0
h
θ
(
x
)
=
1
,
c
o
s
t
1
(
θ
T
x
)
≫
0
当
0
≤
θ
T
x
<
1
h
θ
(
x
)
=
1
,
c
o
s
t
1
(
θ
T
x
)
≫
0
当
θ
T
x
≥
1
if \space y = 1:\begin{cases} h_\theta(x) = 1, cost_1(\theta^Tx) = 0 & 当\theta^Tx \ge 1\\ h_\theta(x) = 1, cost_1(\theta^Tx) > 0 & 当0 \le \theta^Tx < 1\\ h_\theta(x) = 0, cost_1(\theta^Tx) \gg 0 & 当-1 < \theta^Tx < 0\\ h_\theta(x) = 0, cost_1(\theta^Tx) \gg 0 & 当\theta^Tx \le -1\\ \end{cases}\\ \space \\ if \space y = 0: \begin{cases} h_\theta(x) = 0, cost_1(\theta^Tx) = 0 & 当\theta^Tx \le -1\\ h_\theta(x) = 0, cost_1(\theta^Tx) > 0 & 当-1 < \theta^Tx < 0\\ h_\theta(x) = 1, cost_1(\theta^Tx) \gg 0 & 当0 \le \theta^Tx < 1\\ h_\theta(x) = 1, cost_1(\theta^Tx) \gg 0 & 当\theta^Tx \ge 1\\ \end{cases}
if y=1:⎩⎪⎪⎪⎨⎪⎪⎪⎧hθ(x)=1,cost1(θTx)=0hθ(x)=1,cost1(θTx)>0hθ(x)=0,cost1(θTx)≫0hθ(x)=0,cost1(θTx)≫0当θTx≥1当0≤θTx<1当−1<θTx<0当θTx≤−1 if y=0:⎩⎪⎪⎪⎨⎪⎪⎪⎧hθ(x)=0,cost1(θTx)=0hθ(x)=0,cost1(θTx)>0hθ(x)=1,cost1(θTx)≫0hθ(x)=1,cost1(θTx)≫0当θTx≤−1当−1<θTx<0当0≤θTx<1当θTx≥1
7.2 大间隔分类器的原理
转换为内积:
min
θ
1
2
∑
j
=
1
n
θ
j
2
=
min
θ
1
2
(
∑
j
=
1
n
θ
j
2
)
2
=
min
θ
1
2
∥
θ
∥
2
\min_{\theta}\frac{1}{2} \sum_{j=1}^{n}\theta_j^2 = \min_{\theta}\frac{1}{2}\Bigg(\sqrt{\sum_{j=1}^{n}\theta_j^2}\Bigg)^2 = \min_{\theta}\frac{1}{2}\lVert \theta \rVert^2
θmin21j=1∑nθj2=θmin21(j=1∑nθj2)2=θmin21∥θ∥2
θ T x ( i ) = P ( i ) ∥ θ ∥ = ∑ j = 1 n θ j x j ( i ) \theta^Tx^{(i)} = P^{(i)} \lVert \theta \rVert = \sum_{j=1}^{n}\theta_jx_j^{(i)} θTx(i)=P(i)∥θ∥=j=1∑nθjxj(i)
在找决策边界时,为了使 ∥ θ ∥ 2 \lVert \theta \rVert^2 ∥θ∥2 尽可能小,算法会去让投影 P ( i ) P^{(i)} P(i) 尽可能大,这样便会找到最大间隔的决策边界。
因此在下面情况中,SVM会选择右图,而非左图。
非SVM的选择 | SVM的选择 |
---|---|
7.3 带核函数的SVM
核函数(Kernel Function)提出的意义:带核函数的SVM可以实现非线性分类器。无核函数的SVM也叫线性核的SVM
① 选取地标(landmark)
l
l
l,通常选择
m
m
m个地标,且 有:
l
(
1
)
=
x
(
i
)
,
l
(
2
)
=
x
(
2
)
,
.
.
.
,
l
(
m
)
=
x
(
m
)
l^{(1)}=x^{(i)},l^{(2)}=x^{(2)},...,l^{(m)}=x^{(m)}
l(1)=x(i),l(2)=x(2),...,l(m)=x(m)
② 假设函数由
θ
T
x
\theta^Tx
θTx 变为
θ
T
f
\theta^Tf
θTf,即
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
.
.
.
+
θ
n
f
n
\theta_0+\theta_1f_1+\theta_2f_2+...+\theta_nf_n
θ0+θ1f1+θ2f2+...+θnfn. 由于地标的选取,使得
n
=
m
n=m
n=m.
对于
f
i
f_i
fi,满足:
f
i
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
i
)
)
=
exp
(
−
∥
x
−
l
(
i
)
∥
2
2
σ
2
)
=
exp
(
−
∑
j
=
1
n
(
x
j
−
l
j
(
i
)
)
2
2
σ
2
)
I
f
x
≈
l
(
i
)
:
f
i
≈
1
I
f
x
i
s
f
a
r
f
r
o
m
l
(
i
)
:
f
i
≈
0
\begin{aligned}f_i & = similarity(x,l^{(i)})\\ & = \exp\Big( -\frac{ \lVert x-l^{(i)} \rVert^2 }{2 \sigma^2} \Big)\\ & = \exp\Big( -\frac{ \sum_{j=1}^n(x_j - l_j^{(i)})^2 }{2 \sigma^2} \Big) \end{aligned}\\ \begin{aligned} If \space x\approx l^{(i)}:f_i \approx 1\\ If \space x \space is \space far \space from \space l^{(i)}:f_i \approx 0 \end{aligned}
fi=similarity(x,l(i))=exp(−2σ2∥x−l(i)∥2)=exp(−2σ2∑j=1n(xj−lj(i))2)If x≈l(i):fi≈1If x is far from l(i):fi≈0
相似度函数称为核函数。这里的核函数使用的是高斯核函数。在使用高斯核函数之前一定要进行特征缩放。高斯核函数特点如下:
假如 l ( i ) l^{(i)} l(i) 选取为 [ 3 5 ] \left[ \begin{matrix} 3\\5 \end{matrix} \right] [35], 则参数 σ 2 \sigma^2 σ2 意义如下: σ 2 \sigma^2 σ2 越小,图像越陡; σ 2 \sigma^2 σ2 越大,图像越缓
σ 2 = 1 \sigma^2=1 σ2=1 | σ 2 = 0.5 \sigma^2=0.5 σ2=0.5 | σ 2 = 3 \sigma^2=3 σ2=3 |
---|---|---|
③ 优化目标:
min
θ
C
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
f
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
f
(
i
)
)
]
+
1
2
∑
j
=
1
n
θ
j
2
=
min
θ
C
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
f
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
f
(
i
)
)
]
+
1
2
∑
j
=
1
m
θ
j
2
\begin{aligned} & \min_{\theta}C \sum_{i=1}^{m}\left[ y^{(i)} cost_1(\theta^Tf^{(i)}) + (1-y^{(i)})cost_0(\theta^Tf^{(i)}) \right]+\frac{1}{2} \sum_{j=1}^{n}\theta_j^2 \\ = &\min_{\theta}C \sum_{i=1}^{m}\left[ y^{(i)} cost_1(\theta^Tf^{(i)}) + (1-y^{(i)})cost_0(\theta^Tf^{(i)}) \right]+\frac{1}{2} \sum_{j=1}^{m}\theta_j^2 \\ \end{aligned}
=θminCi=1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+21j=1∑nθj2θminCi=1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+21j=1∑mθj2
核函数的设计是用于SVM,虽然也可以应用到逻辑回归,但效率差,核函数应用到SVM中效率高。
7.4 SVM中的参数
-
参数 C C C :效果近似 1 λ \frac{1}{\lambda} λ1
当 C C C 很大时,会出现高方差问题;当 C C C 很小时,会出现高偏差问题
-
核函数中的参数 σ 2 \sigma^2 σ2:效果可以与多项式指数 d d d 类比
当 σ 2 \sigma^2 σ2 很大时, f i f_i fi 很平缓(可类比 d = 1 d=1 d=1,图像是直线,最平缓),此时容易出现高偏差问题;
当 σ 2 \sigma^2 σ2 很小时, f i f_i fi 很陡急(可类比 d d d 很大,图像很扭曲,不平缓),此时容易出现高方差问题;
7.5 SVM vs. 逻辑回归
- 当 n n n 很大且 n ≫ m n \gg m n≫m 时( n = 10000 , m = 10...0000 n=10000,m=10...0000 n=10000,m=10...0000 ),使用 逻辑回归 或 线性核的SVM
- 当 n n n 较小, m m m 跟 n n n 差不多时( n = 1...1000 , m = 10...10000 n=1...1000,m=10...10000 n=1...1000,m=10...10000 ),使用 高斯核函数的SVM
- 当 n n n 较小, m m m 较大时( n = 1...1000 , m = 50000 + n=1...1000,m=50000+ n=1...1000,m=50000+ ),使用 逻辑回归 或 线性核的SVM
8.1 K-Means算法
K-Means算法:一种常用的聚类算法(Clustering Algorithm)。亦可实现非分离聚类(Non-separated Clusters)
算法input:
——
K
K
K (簇的个数)
—— Training set
{
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
}
,
x
(
i
)
∈
R
n
\{ x^{(1)},x^{(2)},...,x^{(m)} \},x^{(i)}\in \R^n
{x(1),x(2),...,x(m)},x(i)∈Rn (没有算
x
0
x_0
x0=1 ).
算法过程:
① 随机初始化
K
K
K 个聚类中心(Cluster Centroid)
μ
1
,
μ
2
,
.
.
.
,
μ
K
∈
R
n
\mu_1,\mu_2,...,\mu_K \in \R^n
μ1,μ2,...,μK∈Rn
② 迭代如下步骤{
for
i
i
i = 1 to
m
m
m // 簇分配过程(Cluster assignment step)
c
(
i
)
c^{(i)}
c(i) :=
x
(
i
)
x^{(i)}
x(i) 距离最近的聚类中心对应的值(
c
(
i
)
∈
{
1
,
2
,
.
.
.
,
K
}
c^{(i)}\in\{1,2,...,K\}
c(i)∈{1,2,...,K})
for
k
k
k = 1 to
K
K
K // 移动聚类中心过程(move centroid)
μ
k
\mu_k
μk := 归类为
k
k
k 类的样本点的平均值
}
8.2 K-Means算法的优化目标
代价函数:亦被叫做畸变函数(Distortion Function)
J
(
c
1
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
)
=
1
m
∑
i
=
1
m
∥
x
(
i
)
−
μ
c
(
i
)
∥
2
J(c^{1},...,c^{(m)},\mu_1,...,\mu_K) = \frac{1}{m} \sum_{i=1}^m \lVert x^{(i)}-\mu_{c^{(i)}} \rVert^2
J(c1,...,c(m),μ1,...,μK)=m1i=1∑m∥x(i)−μc(i)∥2
优化目标:
min
c
1
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
J
(
c
1
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
)
\min_{c^{1},...,c^{(m)},\\\mu_1,...,\mu_K}J(c^{1},...,c^{(m)},\mu_1,...,\mu_K)
c1,...,c(m),μ1,...,μKminJ(c1,...,c(m),μ1,...,μK)
8.3 随机初始化聚类中心
随机初始化:随机的从训练集中选择 K K K 个训练样本作为初始的聚类中心。
存在问题:可能会出现局部最优,分的类不理想。
解决办法:若 K ∈ { 2 , 3 , . . . , 10 } K \in \{2,3,...,10\} K∈{2,3,...,10} ,通常将K-Means算法执行100遍,每次随机初始化不同的样本点,在得到的100个算法中选择代价函数值最小的算法。若 K K K 太大,则通过此方法效果不太明显。
8.4 选取聚类数量K
通常是肉眼看能分成几类,但有些不太好判断。
-
肘部法则(Elbow method)
不能指望通过这个方法来解决所有问题
-
通常K-Means算法应用时会有其之后的目的,根据之后目的的需求来判断聚类数量 K K K.
9.1 主成分分析法(PCA)
主成分分析法(Principle Components Analysis,PCA):处理降维问题的常用方法,是一种无监督学习算法。
PCA 不是 线性回归。误差比较如下:
线性回归(Linear Regression) | 主成分分析法(PCA) |
---|---|
误差是竖直方向的蓝色线段。线性回归做的是用所有的特征 x x x 来预测 y y y ,不同的特征变量 x x x 有不同的权重 | 误差是垂直于直线方向的蓝色线段。在PCA中,所有的特征变量 x x x 都是同等对待,目的是找投影距离和最短的直线。 |
使用PCA算法将
n
n
n 维数据降到
k
k
k 维数据的过程:
① 数据预处理:标准化 + 特征缩放
② 计算 协方差矩阵
Σ
\Sigma
Σ(Covariance Matrix):
Σ
=
1
m
∑
i
=
1
m
(
x
(
i
)
)
(
x
(
i
)
)
T
\Sigma = \frac{1}{m}\sum_{i=1}^m(x^{(i)})(x^{(i)})^T
Σ=m1∑i=1m(x(i))(x(i))T, 其中
x
(
i
)
∈
R
n
x^{(i)} \in \R^{n}
x(i)∈Rn
③ 计算 矩阵
Σ
\Sigma
Σ 的特征向量:[U, S, V] = svd(Sigma)
(程序代码)
④ 从上一步骤得到矩阵
U
=
[
∣
∣
∣
u
(
1
)
u
(
2
)
…
u
(
n
)
∣
∣
∣
]
∈
R
n
×
n
U=\left[ \begin{matrix}| & | & & | \\u^{(1)} & u^{(2)} & \dots & u^{(n)}\\| & | & & | \end{matrix} \right] \in \R^{n \times n}
U=⎣⎡∣u(1)∣∣u(2)∣…∣u(n)∣⎦⎤∈Rn×n ,取前k列得矩阵
U
r
e
d
u
c
e
∈
R
n
×
k
U_{reduce} \in \R^{n \times k}
Ureduce∈Rn×k
⑤ 计算降维后的数据变量
z
(
i
)
=
U
r
e
d
u
c
e
T
x
(
i
)
z^{(i)}=U_{reduce}^Tx^{(i)}
z(i)=UreduceTx(i),得到降维后的数据
z
(
i
)
∈
R
k
z^{(i)} \in \R^{k}
z(i)∈Rk
算法代码如下:
Sigma = (1/m) * X' * X;
[U, S, V] = svd(Sigma);
Ureduce = U(:, 1 : k);
Z = Ureduce' * X
9.2 主成分数量 k k k 的选择
理论实现上:选择最小的
k
k
k 使得如下式子成立
1
m
∑
i
=
1
m
∥
x
(
i
)
−
x
a
p
p
r
o
x
(
i
)
∥
2
1
m
∑
i
=
1
m
∥
x
(
i
)
∥
2
≤
0.01
其
中
,
分
子
表
示
投
影
误
差
的
平
方
的
平
均
;
分
母
表
示
数
据
总
变
化
量
\frac{ \frac{1}{m}\sum_{i=1}^m \lVert x^{(i)}-x_{approx}^{(i)} \rVert ^2 }{ \frac{1}{m}\sum_{i=1}^m \lVert x^{(i)} \rVert ^2 } \le 0.01\\ 其中,分子表示投影误差的平方的平均;分母表示数据总变化量
m1∑i=1m∥x(i)∥2m1∑i=1m∥x(i)−xapprox(i)∥2≤0.01其中,分子表示投影误差的平方的平均;分母表示数据总变化量
实际实现比较简单,需要利用PCA算法中第③步得到的矩阵
S
S
S。矩阵
S
S
S 是个
n
×
n
n \times n
n×n 的对角矩阵。实际实现时,
k
k
k 从
1
1
1 至
n
n
n 依次尝试,直至如下式子成立:
∑
i
=
1
k
S
i
i
∑
i
=
1
n
S
i
i
≥
0.99
\frac{ \sum_{i=1}^{k} S_{ii} }{ \sum_{i=1}^{n} S_{ii} } \ge 0.99
∑i=1nSii∑i=1kSii≥0.99
9.3 压缩重现
PCA算法执行后得到一条直线。例如二维数据 x x x 投影到该直线上,压缩为一维数据 k k k :
z
=
U
r
e
d
u
c
e
T
x
z=U_{reduce}^Tx
z=UreduceTx
当要压缩重现时,将一维数据
k
k
k 压缩重现成二维数据,与原数据有误差,但只要PCA算法没问题,基本不影响之后的机器学习。
x
a
p
p
r
o
x
=
U
r
e
d
u
c
e
z
x_{approx}=U_{reduce}z
xapprox=Ureducez
9.4 PCA的应用建议
PCA通常用处两个:
- 数据压缩:① 节省硬盘空间;② 是将来的机器学习算法执行的更快
- 数据可视化:降维到2D或3D可以通过图像将数据展示出来
PCA两种错误应用:
- PCA不可以用来解决过拟合问题,效果会有,但会忽略训练集里数据的标签 y y y,不如正则化方法。
- 不是每个机器学习系统事先都要进行PCA。要先使用原有的训练集的特征变量 x x x 来去进行执行机器学习算法,只有确定了算法执行得很慢以至于无法执行下去,或者数据太大存储不下时,才使用PCA算法来进行数据压缩。
10.1 异常检测
异常检测(Anomaly Detection):对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。
算法过程(利用高斯分布):
① 选择合适的特征变量
x
i
x_i
xi ;
② 拟合参数
μ
1
,
.
.
.
,
μ
n
,
σ
1
2
,
.
.
.
,
σ
n
2
\mu_1,...,\mu_n,\sigma_1^2,...,\sigma_n^2
μ1,...,μn,σ12,...,σn2 (可以使用向量化计算);
μ
j
=
1
m
∑
i
=
1
m
x
j
(
i
)
σ
j
2
=
1
m
∑
i
=
1
m
(
x
j
(
i
)
−
μ
j
)
2
\begin{aligned} & \mu_j=\frac{1}{m}\sum_{i=1}^{m} x_j^{(i)}\\ & \sigma_j^2=\frac{1}{m}\sum_{i=1}^{m} (x_j^{(i)}-\mu_j)^2 \end{aligned}
μj=m1i=1∑mxj(i)σj2=m1i=1∑m(xj(i)−μj)2
③ 建模
p
(
x
)
p(x)
p(x) ,若
p
(
x
)
<
ϵ
p(x)<\epsilon
p(x)<ϵ,则判断异常。
p
(
x
)
=
∏
j
=
1
n
p
(
x
j
,
μ
j
,
σ
j
2
)
=
∏
j
=
1
n
1
2
π
σ
j
exp
(
−
(
x
j
−
μ
j
)
2
2
σ
j
2
)
p(x)=\prod_{j=1}^{n}p(x_j,\mu_j,\sigma_j^2) =\prod_{j=1}^{n} \frac{1}{\sqrt{2\pi}\sigma_j}\exp(-\frac{(x_j-\mu_j)^2}{2\sigma_j^2})
p(x)=j=1∏np(xj,μj,σj2)=j=1∏n2πσj1exp(−2σj2(xj−μj)2)
模型评估通常使用召回率、准确率、 F 1 F_1 F1- score,也可以使用参数 ϵ \epsilon ϵ
10.2 异常检测 vs. 监督学习
对于给定的数据集(有标签,非常多的negative类数据,0 ~50 个positive类数据),将negative类数据的 60% 作为无标签的训练集,用于异常检测模型 p ( x ) p(x) p(x) 的建立;将negative类数据的 20% 和positive类数据的 50% 作为有标签的交叉验证集,再将剩下的negative类数据的 20% 和positive类数据的 50% 作为有标签的测试集,用于评估异常检测的模型。
问题:作为无监督学习的异常检测处理的数据也有标签,为什么不使用逻辑回归算法或者神经网络等监督学习算法来进行分类预测呢?
异常检测 | 监督学习 | |
---|---|---|
适用情况 | 非常少的positive类数据(0 ~ 50个),超级大量的negative类数据 | positive类数据和negative类数据都很多 |
由于positive类数据很少,监督学习算法不能很好地建模;而在异常检测中,positive类数据是用来做模型评估。 | 两类数据都很多,足以监督学习算法去处理 | |
通常,异常情况都是不确定的,是无法预测的,很有可能此时学到的异常特点无法处理之后出现的新的异常 |
10.3 数据处理
有事数据不符合高斯分布,通常做以下处理:
- 取对数: x ← log ( x + c ) x \leftarrow \log(x + c) x←log(x+c)
- 取指数: x ← x 1 k , k = 2 , 3 , . . . x \leftarrow x^{\frac{1}{k}},k=2,3,... x←xk1,k=2,3,...
模型建立完后,在评估模型时发现一个异常数据的 p ( x ) p(x) p(x)很高,此时需要寻找其他特征变量来重新建模,剔除这个异常。
10.4 多变量高斯分布的异常检测
使用多变量高斯分布的异常检测的算法步骤:
① 选择合适的特征变量
x
i
x_i
xi ;
② 拟合参数:
μ
=
1
m
∑
i
=
1
m
x
(
i
)
Σ
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
)
(
x
(
i
)
−
μ
)
T
\begin{aligned} & \mu = \frac{1}{m}\sum_{i=1}^{m} x^{(i)}\\ & \Sigma = \frac{1}{m}\sum_{i=1}^{m}(x^{(i)-\mu})(x^{(i)}-\mu)^T \end{aligned}
μ=m1i=1∑mx(i)Σ=m1i=1∑m(x(i)−μ)(x(i)−μ)T
③ 建模
p
(
x
)
p(x)
p(x) ,若
p
(
x
)
<
ϵ
p(x)<\epsilon
p(x)<ϵ,则判断异常。
p
(
x
)
=
1
(
2
π
)
n
2
∣
Σ
∣
1
2
exp
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
p(x)=\frac{1}{(2\pi)^{\frac{n}{2}} \lvert \Sigma \rvert^{\frac{1}{2}}} \exp(-\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu))
p(x)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
μ = [ 0 0 ] , Σ = [ 1 0 0 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & 0\\ 0& 1 \end{matrix}\right] μ=[00],Σ=[1001] | μ = [ 0 0 ] , Σ = [ 0.6 0 0 0.6 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 0.6 & 0\\ 0 & 0.6 \end{matrix}\right] μ=[00],Σ=[0.6000.6] | μ = [ 0 0 ] , Σ = [ 2 0 0 2 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 2 & 0\\ 0 & 2 \end{matrix}\right] μ=[00],Σ=[2002] |
---|---|---|
μ = [ 0 0 ] , Σ = [ 1 0 0 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & 0\\ 0& 1 \end{matrix}\right] μ=[00],Σ=[1001] | μ = [ 0 0 ] , Σ = [ 0.6 0 0 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 0.6 & 0\\ 0& 1 \end{matrix}\right] μ=[00],Σ=[0.6001] | μ = [ 0 0 ] , Σ = [ 2 0 0 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 2 & 0\\ 0& 1 \end{matrix}\right] μ=[00],Σ=[2001] |
---|---|---|
μ = [ 0 0 ] , Σ = [ 1 0 0 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & 0\\ 0& 1 \end{matrix}\right] μ=[00],Σ=[1001] | μ = [ 0 0 ] , Σ = [ 1 0.5 0.5 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & 0.5\\ 0.5 & 1 \end{matrix}\right] μ=[00],Σ=[10.50.51] | μ = [ 0 0 ] , Σ = [ 1 − 0.8 − 0.8 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & -0.8\\ -0.8 & 1 \end{matrix}\right] μ=[00],Σ=[1−0.8−0.81] |
---|---|---|
μ = [ 0 0 ] , Σ = [ 1 0 0 1 ] \mu=\left[\begin{matrix} 0\\0\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & 0\\ 0& 1 \end{matrix}\right] μ=[00],Σ=[1001] | μ = [ 0 0.5 ] , Σ = [ 1 0 0 1 ] \mu=\left[\begin{matrix} 0\\0.5\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & 0\\ 0& 1 \end{matrix}\right] μ=[00.5],Σ=[1001] | μ = [ 1.5 − 0.5 ] , Σ = [ 1 0 0 1 ] \mu=\left[\begin{matrix} 1.5\\-0.5\end{matrix}\right],\Sigma=\left[\begin{matrix} 1 & 0\\ 0& 1 \end{matrix}\right] μ=[1.5−0.5],Σ=[1001] |
---|---|---|
当 Σ \Sigma Σ 是对角矩阵时,多变量高斯分布与原模型的高斯分布一致,也就是原模型的高斯分布是一种特殊情况的多变量高斯分布
原始模型 | 多变量高斯分布的模型 |
---|---|
p ( x ; μ , σ ) = ∏ j = 1 n p ( x j , μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j exp ( − ( x j − μ j ) 2 2 σ j 2 ) p(x;\mu,\sigma)=\prod_{j=1}^{n}p(x_j,\mu_j,\sigma_j^2)=\prod_{j=1}^{n} \frac{1}{\sqrt{2\pi}\sigma_j}\exp(-\frac{(x_j-\mu_j)^2}{2\sigma_j^2}) p(x;μ,σ)=∏j=1np(xj,μj,σj2)=∏j=1n2πσj1exp(−2σj2(xj−μj)2) | p ( x ; μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}} \lvert \Sigma \rvert^{\frac{1}{2}}} \exp(-\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu)) p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ)) |
需要手动创建一个特征来捕获已有特征出现的异常,例如创建特征 x 3 = x 1 x 2 x_3=\frac{x_1}{x_2} x3=x2x1 | 可以自动捕获 |
计算成本低, n n n 甚至能到达 100,000 | Σ \Sigma Σ 矩阵需要求其逆矩阵,计算成本高 |
即使 m m m 小也可以 | 要求 m ≫ n m\gg n m≫n 最好 m ≥ 10 n m\ge 10n m≥10n ,否则 Σ \Sigma Σ 不可逆 |
11.1 基于内容的推荐系统
变量 | 含义 |
---|---|
n u n_u nu | user 数量 |
n m n_m nm | movie 数量 |
r ( i , j ) = 1 r(i,j)=1 r(i,j)=1 | 如果 user j j j 为 movie i i i 打分了(否则为 0 0 0) |
y ( i , j ) y^{(i,j)} y(i,j) | user j j j 为 movie i i i 打的分数 |
θ ( j ) \theta^{(j)} θ(j) | user j j j 对应的参数向量 |
x ( i ) x^{(i)} x(i) | movie |
( θ ( j ) ) T ( x ( i ) ) (\theta^{(j)})^T(x^{(i)}) (θ(j))T(x(i)) | 为 user j j j 、movie i i i 预测分值 |
m ( j ) m^{(j)} m(j) | user j j j 打分的 movie 数量 |
基于内容的推荐系统(Content-based Recommender Systems)
优化目标:通过给出的
x
(
1
)
,
.
.
.
,
x
(
n
m
)
x^{(1)},...,x^{(n_m)}
x(1),...,x(nm) ,来学习
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
\theta^{(1)},...,\theta^{(n_u)}
θ(1),...,θ(nu)
T
o
L
e
a
r
n
θ
(
j
)
:
min
θ
(
j
)
1
2
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
2
+
λ
2
∑
k
=
1
n
(
θ
k
(
j
)
)
2
T
o
L
e
a
r
n
θ
(
1
)
,
θ
(
2
)
,
.
.
.
,
θ
(
n
u
)
:
min
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
J
(
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
)
=
min
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
1
2
∑
j
=
1
n
u
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
2
+
λ
2
∑
j
=
1
n
u
∑
k
=
1
n
(
θ
k
(
j
)
)
2
\begin{aligned} To \space Learn \space \theta^{(j)}:& \\ & \min_{\theta^{(j)}} \frac{1}{2} \sum_{i:r(i,j)=1}\Big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \Big)^2 + \frac{\lambda}{2}\sum_{k=1}^{n}(\theta_k^{(j)})^2\\ To \space Learn \space \theta^{(1)},\theta^{(2)},...,\theta^{(n_u)} : & \\ & \min_{\theta^{(1)},...,\theta^{(n_u)}}J(\theta^{(1)},...,\theta^{(n_u)}) \\ =& \min_{\theta^{(1)},...,\theta^{(n_u)}}\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}\Big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \Big)^2 + \frac{\lambda}{2}\sum_{j=1}^{n_u} \sum_{k=1}^{n}(\theta_k^{(j)})^2 \\ \end{aligned}
To Learn θ(j):To Learn θ(1),θ(2),...,θ(nu):=θ(j)min21i:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))2+2λk=1∑n(θk(j))2θ(1),...,θ(nu)minJ(θ(1),...,θ(nu))θ(1),...,θ(nu)min21j=1∑nui:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2
优化方法:梯度下降
θ
k
(
j
)
:
=
θ
k
(
j
)
−
α
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
x
k
(
i
)
(
f
o
r
k
=
0
)
θ
k
(
j
)
:
=
θ
k
(
j
)
−
α
(
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
x
k
(
i
)
+
λ
θ
k
(
j
)
)
(
f
o
r
k
≠
0
)
\begin{aligned} & \theta_k^{(j)} := \theta_k^{(j)} - \alpha \sum_{i:r(i,j)=1}\big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \big)x_k^{(i)} \space (for \space k = 0) \\ & \theta_k^{(j)} := \theta_k^{(j)} - \alpha \Big( \sum_{i:r(i,j)=1}\big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \big)x_k^{(i)} + \lambda \theta_k^{(j)} \Big) \space (for \space k \ne 0) \\ \end{aligned}
θk(j):=θk(j)−αi:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))xk(i) (for k=0)θk(j):=θk(j)−α(i:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))xk(i)+λθk(j)) (for k=0)
11.2 协同过滤
通过给出的
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
\theta^{(1)},...,\theta^{(n_u)}
θ(1),...,θ(nu),来学习
x
(
1
)
,
.
.
.
,
x
(
n
m
)
x^{(1)},...,x^{(n_m)}
x(1),...,x(nm) :
T
o
L
e
a
r
n
x
(
i
)
:
min
x
(
i
)
1
2
∑
j
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
2
+
λ
2
∑
k
=
1
n
(
x
k
(
i
)
)
2
T
o
L
e
a
r
n
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
n
m
)
:
min
x
(
1
)
,
.
.
.
,
x
(
n
m
)
J
(
x
(
1
)
,
.
.
.
,
x
(
n
m
)
)
=
min
x
(
1
)
,
.
.
.
,
x
(
n
m
)
1
2
∑
i
=
1
n
m
∑
j
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
2
+
λ
2
∑
i
=
1
n
m
∑
k
=
1
n
(
x
k
(
i
)
)
2
\begin{aligned} To \space Learn \space x^{(i)}:& \\ & \min_{x^{(i)}} \frac{1}{2} \sum_{j:r(i,j)=1}\Big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \Big)^2 + \frac{\lambda}{2}\sum_{k=1}^{n}(x^{(i)}_k)^2\\ To \space Learn \space x^{(1)},x^{(2)},...,x^{(n_m)} : & \\ & \min_{x^{(1)},...,x^{(n_m)}}J(x^{(1)},...,x^{(n_m)}) \\ =& \min_{x^{(1)},...,x^{(n_m)}}\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}\Big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \Big)^2 + \frac{\lambda}{2}\sum_{i=1}^{n_m} \sum_{k=1}^{n}(x_k^{(i)})^2 \\ \end{aligned}
To Learn x(i):To Learn x(1),x(2),...,x(nm):=x(i)min21j:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))2+2λk=1∑n(xk(i))2x(1),...,x(nm)minJ(x(1),...,x(nm))x(1),...,x(nm)min21i=1∑nmj:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2
协同过滤( Collaborative Filtering)的优化目标:
-
给出 x ( 1 ) , . . . , x ( n m ) x^{(1)},...,x^{(n_m)} x(1),...,x(nm) ,估计 θ ( 1 ) , . . . , θ ( n u ) \theta^{(1)},...,\theta^{(n_u)} θ(1),...,θ(nu):(基于内容的推荐系统)
min θ ( 1 ) , . . . , θ ( n u ) 1 2 ∑ j = 1 n u ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T ( x ( i ) ) − y ( i , j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 x ( i ) , θ ( j ) ∈ R n + 1 \min_{\theta^{(1)},...,\theta^{(n_u)}}\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}\Big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \Big)^2 + \frac{\lambda}{2}\sum_{j=1}^{n_u} \sum_{k=1}^{n}(\theta_k^{(j)})^2\\ x^{(i)} ,\theta^{(j)} \in \R^{n+1} θ(1),...,θ(nu)min21j=1∑nui:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2x(i),θ(j)∈Rn+1 -
给出 θ ( 1 ) , . . . , θ ( n u ) \theta^{(1)},...,\theta^{(n_u)} θ(1),...,θ(nu) ,估计 x ( 1 ) , . . . , x ( n m ) x^{(1)},...,x^{(n_m)} x(1),...,x(nm):
min x ( 1 ) , . . . , x ( n m ) 1 2 ∑ i = 1 n m ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T ( x ( i ) ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 x ( i ) , θ ( j ) ∈ R n + 1 \min_{x^{(1)},...,x^{(n_m)}}\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}\Big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \Big)^2 + \frac{\lambda}{2}\sum_{i=1}^{n_m} \sum_{k=1}^{n}(x_k^{(i)})^2\\ x^{(i)} ,\theta^{(j)} \in \R^{n+1} x(1),...,x(nm)min21i=1∑nmj:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2x(i),θ(j)∈Rn+1 -
可以同时最小化 θ ( 1 ) , . . . , θ ( n u ) \theta^{(1)},...,\theta^{(n_u)} θ(1),...,θ(nu) 和 x ( 1 ) , . . . , x ( n m ) x^{(1)},...,x^{(n_m)} x(1),...,x(nm):
J ( x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) ) = 1 2 ∑ ( i , j ) : r ( i , j ) = 1 ( ( θ ( j ) ) T ( x ( i ) ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 min x ( 1 ) , . . . , x ( n m ) θ ( 1 ) , . . . , θ ( n u ) J ( x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) ) x ( i ) , θ ( j ) ∈ R n J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{(i,j):r(i,j)=1}\Big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \Big)^2 + \frac{\lambda}{2}\sum_{i=1}^{n_m} \sum_{k=1}^{n}(x_k^{(i)})^2 + \frac{\lambda}{2}\sum_{j=1}^{n_u} \sum_{k=1}^{n}(\theta_k^{(j)})^2\\ \min_{x^{(1)},...,x^{(n_m)}\\\theta^{(1)},...,\theta^{(n_u)}}J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}) \\ x^{(i)} ,\theta^{(j)} \in \R^{n} J(x(1),...,x(nm),θ(1),...,θ(nu))=21(i,j):r(i,j)=1∑((θ(j))T(x(i))−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2+2λj=1∑nuk=1∑n(θk(j))2x(1),...,x(nm)θ(1),...,θ(nu)minJ(x(1),...,x(nm),θ(1),...,θ(nu))x(i),θ(j)∈Rn
协同过滤算法过程:
① 初始化
x
(
1
)
,
.
.
.
,
x
(
n
m
)
,
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}
x(1),...,x(nm),θ(1),...,θ(nu) 为一个较小的随机值
② 用梯度下降算法(或其他)来最小化
J
(
x
(
1
)
,
.
.
.
,
x
(
n
m
)
,
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
)
J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})
J(x(1),...,x(nm),θ(1),...,θ(nu))
例如对于每一个
j
=
1
,
.
.
.
,
n
u
,
i
=
1
,
.
.
.
,
n
m
j=1,...,n_u,i=1,...,n_m
j=1,...,nu,i=1,...,nm
x
k
(
i
)
:
=
x
k
(
i
)
−
α
(
∑
j
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
θ
k
(
j
)
+
λ
x
k
(
i
)
)
θ
k
(
j
)
:
=
θ
k
(
j
)
−
α
(
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
(
x
(
i
)
)
−
y
(
i
,
j
)
)
x
k
(
i
)
+
λ
θ
k
(
j
)
)
x^{(i)}_k := x^{(i)}_k - \alpha \Big( \sum_{j:r(i,j)=1}\big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \big) \theta^{(j)}_k + \lambda x^{(i)}_k \Big)\\ \theta^{(j)}_k := \theta^{(j)}_k - \alpha \Big( \sum_{i:r(i,j)=1}\big( (\theta^{(j)})^T(x^{(i)}) - y^{(i,j)} \big) x^{(i)}_k + \lambda \theta^{(j)}_k \Big)
xk(i):=xk(i)−α(j:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))θk(j)+λxk(i))θk(j):=θk(j)−α(i:r(i,j)=1∑((θ(j))T(x(i))−y(i,j))xk(i)+λθk(j))
向量化:低秩矩阵分解法
Y
=
[
5
5
0
0
5
?
?
0
⋮
⋮
⋮
⋮
?
4
0
?
]
,
P
r
e
d
i
c
t
e
d
=
[
(
θ
(
1
)
)
T
x
(
1
)
(
θ
(
2
)
)
T
x
(
1
)
…
(
θ
(
n
u
)
)
T
x
(
1
)
(
θ
(
1
)
)
T
x
(
2
)
(
θ
(
2
)
)
T
x
(
2
)
…
0
⋮
⋮
⋮
⋮
(
θ
(
1
)
)
T
x
(
n
m
)
(
θ
(
2
)
)
T
x
(
n
m
)
…
(
θ
(
n
u
)
)
T
x
(
n
m
)
]
则
可
以
向
量
化
X
和
Θ
X
=
[
—
(
x
(
1
)
)
T
—
—
(
x
(
2
)
)
T
—
⋮
—
(
x
(
n
m
)
)
T
—
]
,
Θ
=
[
—
(
θ
(
1
)
)
T
—
—
(
θ
(
2
)
)
T
—
⋮
—
(
θ
(
n
u
)
)
T
—
]
,
其
中
x
(
i
)
,
θ
(
j
)
∈
R
n
那
么
P
r
e
d
i
c
t
=
X
Θ
T
Y =\left[\begin{matrix}5 & 5 & 0 & 0\\ 5 & ? & ? & 0\\ \vdots & \vdots & \vdots & \vdots \\ ? & 4 & 0 & ?\\ \end{matrix}\right], Predicted=\left[\begin{matrix}(\theta^{(1)})^Tx^{(1)} & (\theta^{(2)})^Tx^{(1)} & \dots & (\theta^{(n_u)})^Tx^{(1)}\\ (\theta^{(1)})^Tx^{(2)} & (\theta^{(2)})^Tx^{(2)} & \dots & 0\\ \vdots & \vdots & \vdots & \vdots \\ (\theta^{(1)})^Tx^{(n_m)} & (\theta^{(2)})^Tx^{(n_m)} & \dots & (\theta^{(n_u)})^Tx^{(n_m)} \\ \end{matrix}\right] \\ 则可以向量化X 和 \Theta\\ X = \left[\begin{matrix} —(x^{(1)})^T— \\ —(x^{(2)})^T— \\ \vdots \\ —(x^{(n_m)})^T— \\ \end{matrix}\right], \Theta = \left[\begin{matrix} —(\theta^{(1)})^T— \\ —(\theta^{(2)})^T— \\ \vdots \\ —(\theta^{(n_u)})^T— \\ \end{matrix}\right],其中 \space x^{(i)} ,\theta^{(j)} \in R^{n} \\ 那么 \space Predict = X\Theta^T
Y=⎣⎢⎢⎢⎡55⋮?5?⋮40?⋮000⋮?⎦⎥⎥⎥⎤,Predicted=⎣⎢⎢⎢⎡(θ(1))Tx(1)(θ(1))Tx(2)⋮(θ(1))Tx(nm)(θ(2))Tx(1)(θ(2))Tx(2)⋮(θ(2))Tx(nm)……⋮…(θ(nu))Tx(1)0⋮(θ(nu))Tx(nm)⎦⎥⎥⎥⎤则可以向量化X和ΘX=⎣⎢⎢⎢⎡—(x(1))T——(x(2))T—⋮—(x(nm))T—⎦⎥⎥⎥⎤,Θ=⎣⎢⎢⎢⎡—(θ(1))T——(θ(2))T—⋮—(θ(nu))T—⎦⎥⎥⎥⎤,其中 x(i),θ(j)∈Rn那么 Predict=XΘT
11.3 均值归一化
在使用协同过滤算法之前对数据集进行均值归一化(Mean Normalization)处理: Y ∈ R n m × n u Y \in R^{n_m \times n_u} Y∈Rnm×nu,算出每个电影的平均分值 μ \mu μ,则 μ ∈ R n m \mu \in R^{n_m} μ∈Rnm,之后,将 Y Y Y 中的每一列都减去 μ \mu μ 从而得到均值归一化后的 Y Y Y,然后使用处理后的 Y Y Y 来进行协同过滤算法。
对于从未给任何电影打分的用户,其 θ \theta θ 参数向量里的元素均为 0 0 0,在使用 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i) 预测分值,需要再加上均值 μ i \mu_i μi ,以避免所有电影的分值都一样而无参考价值。
12.1 随机梯度下降
随机梯度下降(Stochastic Gradient Descent):适用于对大数据集(数亿级)的学习,当数据特别大时,随机梯度下降收敛的比批量梯度下降快些。
算法过程:
① 随机打乱训练集
② repeat { //这层循环通常循环1-10次
for
i
:
=
1
,
.
.
.
,
m
i:=1,...,m
i:=1,...,m {
$\theta_j := \theta_j - \alpha (h_\theta(x{(i)})-y{(i)})x^{(i)}_{j} $ ( simultaneously update for
j
j
j = 0,
j
j
j = 1,
j
j
j = 2, …,
j
j
j = n)
}
}
对比参数 | 批量梯度下降(Batch Gradient Descent) | 随机梯度下降(Stochastic Gradient Descent) |
---|---|---|
c o s t cost cost 函数 | c o s t ( θ , ( x ( i ) , y ( i ) ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_{\theta}(x^{(i)})-y^{(i)})^2 cost(θ,(x(i),y(i)))=21(hθ(x(i))−y(i))2 | c o s t ( θ , ( x ( i ) , y ( i ) ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_{\theta}(x^{(i)})-y^{(i)})^2 cost(θ,(x(i),y(i)))=21(hθ(x(i))−y(i))2 |
J t r a i n J_{train} Jtrain 函数 | J t r a i n ( θ ) = 1 m ∑ i = 1 m c o s t ( θ , ( x ( i ) , y ( i ) ) ) J_{train}(\theta)=\frac{1}{m}\sum_{i=1}^mcost(\theta,(x^{(i)},y^{(i)})) Jtrain(θ)=m1∑i=1mcost(θ,(x(i),y(i))) | J t r a i n ( θ ) = 1 m ∑ i = 1 m c o s t ( θ , ( x ( i ) , y ( i ) ) ) J_{train}(\theta)=\frac{1}{m}\sum_{i=1}^mcost(\theta,(x^{(i)},y^{(i)})) Jtrain(θ)=m1∑i=1mcost(θ,(x(i),y(i))) |
算法过程 | θ 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^{(i)}_{j}} θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i) | θ j : = θ j − α ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha (h_\theta(x^{(i)})-y^{(i)})x^{(i)}_{j} θj:=θj−α(hθ(x(i))−y(i))xj(i) |
实质 | θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\theta) θj:=θj−α∂θj∂J(θ) | θ j : = θ j − α ∂ ∂ θ j c o s t ( θ , ( x ( i ) , y ( i ) ) ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}cost(\theta,(x^{(i)},y^{(i)})) θj:=θj−α∂θj∂cost(θ,(x(i),y(i))) |
执行随机梯度下降算法时,检查是否收敛的方法:
每1000次迭代后,对最后1000个样本的cost值求平均并绘制出来,通过观察绘制出来的图像来判断随机梯度下降是否在收敛
12.2 微型批量梯度下降
批量梯度下降:每次迭代都使用了
m
m
m 所有的数据
随机梯度下降:每次迭代只是用了
1
1
1 个数据
微型批量梯度下降(Mini-Bath Gradient Descent):每次迭代使用了
b
b
b 个数据,所有的
m
m
m 个数据被划分为
m
b
\frac{m}{b}
bm 组
算法过程:
① 确定
b
b
b 的值
② repeat {
for
i
:
=
1
,
b
+
1
,
2
b
+
1
,
.
.
.
,
m
−
b
+
1
i:=1,b+1,2b+1,...,m-b+1
i:=1,b+1,2b+1,...,m−b+1 {
θ
j
:
=
θ
j
−
α
1
b
∑
k
=
i
i
+
9
(
h
θ
(
x
(
k
)
)
−
y
(
k
)
)
x
j
(
k
)
\theta_j := \theta_j - \alpha \frac{1}{b} \sum_{k=i}^{i+9} (h_\theta(x^{(k)})-y^{(k)})x^{(k)}_{j}
θj:=θj−αb1∑k=ii+9(hθ(x(k))−y(k))xj(k) ( simultaneously update for
j
j
j = 0,
j
j
j = 1,
j
j
j = 2, …,
j
j
j = n)
}
}
由于每次迭代只需要 b b b 个数据,而不用把所有 m m m 个数据都调到内存,因此微型批量梯度下降比批量梯度下降要快一些。
由于每次迭代 b b b 个数据时,可以很好的进行向量化处理,使用并行计算,因此微型批量梯度下降比随机梯度下降也会快一些。
13.1 Map-Reduce
可以将数据分配到多个计算机(分治)