第十一章
11.1 确定执行的优先级
垃圾邮件分类器算法: 为了解决这样一个问题,我们首先要做的决定是如何选择并表达特征向量 x x x 。我们可以选择一个由 100 100 100 个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为 1 1 1,不出现为 0 0 0),尺寸为 100 × 1 100×1 100×1 。
为了构建这个分类器算法,我们可以做很多事,例如:
- 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本
- 基于邮件的路由信息开发一系列复杂的特征
- 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理
- 为探测刻意的拼写错误(把watch写成w4tch)开发复杂的算法
在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择,比随着感觉走要更好。
11.2 误差分析
帮助解决在各种提升性能的方法中进行选择。
- 推荐方法
- 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
- 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
- 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势
- 用一个数字去直观的体现算法性能是重要的
- 误差分析应该在验证集上进行
11.3 不对称性分类的误差评估
不对称性分类: 数据集中一种类别的数量比另一种多得多,如:癌症影像识别。
如果有一个偏斜类分类任务(癌症诊断),用分类精确度并不能很好地衡量算法性能,如癌症诊断任务中可能现有数据集中仅有 5 % 5\% 5% 的样本为阳性样本,因此即使我们用一个只会输出负类的分类器,也可以获得 95 % 95\% 95% 的准确率,但显然这是没有意义的。为解决上述问题,引入下述评价指标。
我们将算法预测的结果分为四种情况:
- 正确肯定(True Positive,TP): 预测为真,实际为真
- 正确否定(True Negative,TN): 预测为假,实际为假
- 错误肯定(False Positive,FP): 预测为真,实际为假
- 错误否定(False Negative,FN): 预测为假,实际为真
查准率: Precision = TP / (TP + FP)
例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
查全率: Recall = TP / (TP + FN)
例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
11.4 查准率和查全率的权衡
如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比0.5更大的阀值,如0.7,0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。
如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比0.5更小的阀值,如0.3。
我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同:
我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算F1值(F1 Score),其计算公式为:
F
1
S
c
o
r
e
=
2
P
R
P
+
R
F1\ Score=\frac{2PR}{P+R}
F1 Score=P+R2PR
我们选择使得F1值最高的阀值。
11.5 机器学习数据
“不是谁有最好的算法就能获胜。而是谁拥有最多的数据”。
海量数据是合理的。
- 假设特征 x ∈ R n + 1 x\in R^{n+1} x∈Rn+1 已经提供了足够的信息,可以去准确的预测出标签 y y y。判断这一点:给出这样的特征输入 x x x,人类专家是否可以给出正确的输出。
- 学习算法可以使用更多的参数
- 使用更多的训练数据,不易过拟合。
第十二章
12.1 优化目标
逻辑回归:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
y
log
h
θ
(
x
)
−
(
1
−
y
)
log
(
1
−
h
θ
(
x
)
)
Cost(h_\theta(x),y)=-y\log h_\theta(x)-(1-y)\log(1-h_\theta(x))
Cost(hθ(x),y)=−yloghθ(x)−(1−y)log(1−hθ(x))
令 c o s t 1 ( θ T x ) = − log h θ ( x ) cost_1(\theta^T x)=-\log h_\theta(x) cost1(θTx)=−loghθ(x), c o s t 0 ( θ T x ) = − log ( 1 − h θ ( x ) ) cost_0(\theta^T x)=-\log(1-h_\theta(x)) cost0(θTx)=−log(1−hθ(x))
SVM hypothesis:
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 ∑ i = 1 n θ j 2 \mathop{\min}\limits_{\theta}C\sum\limits_{i=1}^{m}[y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)})cost_0(\theta^Tx^{(i)})]+\frac{1}{2}\sum\limits_{i=1}^n\theta_j^2 θminCi=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21i=1∑nθj2
Hypothesis:
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\ \theta^Tx\ge0\\0&otherwise\end{cases} hθ(x)={10if θTx≥0otherwise
12.2 直观上对大间隔的理解
SVM:
决策边界:
如果你将C设置的不要太大,则你最终会得到这条黑线;当不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策边界。
- C C C 较大时,相当于 λ \lambda λ 较小,可能会导致过拟合,高方差
- C C C 较小时,相当于 λ \lambda λ 较大,可能会导致欠拟合,高偏差
12.3 核函数1
使用高级数的多项式模型来解决无法用直线进行分隔的分类问题:
为了获得上图所示的判定边界,我们的模型可能是
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
1
x
2
+
θ
4
x
1
2
+
θ
5
x
2
2
+
.
.
.
\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1x_2+\theta_4x_1^2+\theta_5x_2^2+...
θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22+... 的形式。
我们可以用一系列的新的特征 f f f 来替换模型中的每一项: f 1 = x 1 , f 2 = x 2 , f 3 = x 1 x 2 , f 4 = x 1 2 , f 5 = x 2 2 f_1=x_1,f_2=x_2,f_3=x_1x_2,f_4=x_1^2,f_5=x_2^2 f1=x1,f2=x2,f3=x1x2,f4=x12,f5=x22
得到: h θ ( x ) = θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 + θ 4 f 4 + θ 5 f 5 h_\theta(x)=\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3+\theta_4f_4+\theta_5f_5 hθ(x)=θ0+θ1f1+θ2f2+θ3f3+θ4f4+θ5f5
利用核函数来计算出新的特征: 给定一个训练样本 x x x,我们利用 x x x 的各个特征与我们预先选定的地标 l ( 1 ) , l ( 2 ) , l ( 3 ) l^{(1)},l^{(2)},l^{(3)} l(1),l(2),l(3) 的近似程度来选取新的特征 f 1 , f 2 , f 3 f_1,f_2,f_3 f1,f2,f3
例如:
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
e
(
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
)
f_1=similarity(x,l^{(1)})=e(-\frac{\lVert x-l^{(1)}\rVert^2}{2\sigma^2})
f1=similarity(x,l(1))=e(−2σ2∥x−l(1)∥2),其中
∥
x
−
l
(
1
)
∥
2
=
∑
j
=
1
n
(
x
j
−
l
j
(
1
)
)
2
\lVert x-l^{(1)}\rVert^2=\sum\limits_{j=1}^n(x_j-l_j^{(1)})^2
∥x−l(1)∥2=j=1∑n(xj−lj(1))2
地标的作用: 如果一个训练样本 x x x 与地标 l l l 之间的距离近似于0,则新特征 f f f 近似于 e 0 = 1 e^0=1 e0=1,如果训练样本 x x x 与地标 l l l 之间距离较远,则 f f f 近似于 e − ( 一个较大的数 ) = 0 e^{-(一个较大的数)}=0 e−(一个较大的数)=0
在下图中,当样本处于洋红色的点位置处,因为其离 l ( 1 ) l^{(1)} l(1) 更近,但是离 l ( 2 ) l^{(2)} l(2) 和 l ( 3 ) l^{(3)} l(3) 较远,因此 f 1 f_1 f1 接近 1 1 1,而 f 2 , f 3 f_2,f_3 f2,f3 接近 0 0 0。因此 h θ ( x ) = θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 > 0 h_\theta(x)=\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3>0 hθ(x)=θ0+θ1f1+θ2f2+θ3f3>0,因此预测 y = 1 y=1 y=1。同理可以求出,对于离 l ( 2 ) l^{(2)} l(2) 较近的绿色点,也预测 y = 1 y=1 y=1,但是对于蓝绿色的点,因为其离三个地标都较远,故预测 y = 0 y=0 y=0。
这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练样本和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练样本本身的特征,而是通过核函数计算出的新特征
f
1
,
f
2
,
f
3
f_1,f_2,f_3
f1,f2,f3 。
12.4 核函数2
对于带有核函数的SVM该如何选择地标:
- 训练集: { ( 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))}
- 选择 l ( 1 ) = x ( 1 ) , l ( 2 ) = x ( 2 ) , . . . , l ( m ) = x ( m ) l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},...,l^{(m)}=x^{(m)} l(1)=x(1),l(2)=x(2),...,l(m)=x(m)
- 计算 f f f: f 1 = s i m i l a r i t y ( x , l ( 1 ) ) , f 2 = s i m i l a r i t y ( x , l ( 2 ) ) , . . . , f m = s i m i l a r i t y ( x , l ( m ) ) f_1=similarity(x,l^{(1)}),f_2=similarity(x,l^{(2)}),...,f_m=similarity(x,l^{(m)}) f1=similarity(x,l(1)),f2=similarity(x,l(2)),...,fm=similarity(x,l(m))
- 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 ∑ i = 1 n θ j 2 \mathop{\min}\limits_{\theta}C\sum\limits_{i=1}^{m}[y^{(i)}cost_1(\theta^Tf^{(i)})+(1-y^{(i)})cost_0(\theta^Tf^{(i)})]+\frac{1}{2}\sum\limits_{i=1}^n\theta_j^2 θminCi=1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+21i=1∑nθj2
给定 x x x,计算新特征 f f f,当 θ T f ≥ 0 \theta^Tf\ge0 θTf≥0 时,预测 y = 1 y=1 y=1,否则反之。
下面是支持向量机的两个参数 C = 1 λ C=\frac{1}{\lambda} C=λ1 和 σ \sigma σ 的影响:
- C C C 较大时,相当于 λ \lambda λ 较小,可能会导致过拟合,高方差
- C C C 较小时,相当于 λ \lambda λ 较大,可能会导致欠拟合,高偏差
- σ \sigma σ 较大时,可能会导致低方差,高偏差
- σ \sigma σ 较小时,可能会导致低偏差,高方差
12.5 使用SVM
在高斯核函数之外我们还有其他一些选择,如:
- 多项式核函数(Polynomial Kernel)
- 字符串核函数(String kernel)
- 卡方核函数( chi-square kernel)
- 直方图交集核函数(histogram intersection kernel)
- 等等…
这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足Mercer’s定理,才能被支持向量机的优化软件正确处理。
多类分类问题: 假设我们利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有 k k k 个类,则我们需要 k k k 个模型,以及 k k k 个参数向量 θ \theta θ 。我们同样也可以训练 k k k 个支持向量机来解决多类分类问题。但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。
尽管你不去写你自己的SVM的优化软件,但是你也需要做几件事:
- 参数 C C C 的选择
- 核函数的选择
逻辑回归 VS SVM:
n n n 表示特征数量, m m m 表示训练样本数量
- 如果 n n n 相对 m m m 很大(如: n = 10000 , m = 10 ~ 1000 n=10000,m=10~1000 n=10000,m=10~1000),使用逻辑回归或者线性核函数的SVM
- 如果 n n n 较小 m m m 中等(如: 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
值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。
第十三章
13.1 无监督学习
训练集: { x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( m ) } \{x^{(1)},x^{(2)},x^{(3)},...,x^{(m)}\} {x(1),x(2),x(3),...,x(m)}
聚类算法应用: 市场分割;社交网络分析;服务器组织;天文数据分析
13.2 K-Means算法
定义: K-均值算法是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
K均值算法:
- 输入聚类数量 K K K
- 随机初始化 K K K 个聚类中心 μ 1 , μ 2 , . . . , μ K \mu_1,\mu_2,...,\mu_K μ1,μ2,...,μK
- 簇分配:将每个点赋予离其最近的聚类中心点
- 更新簇中心:计算每类数据点的均值作为新的聚类中心
- 重复上述步骤直到收敛,即聚类结果不变
K-均值算法也可以很便利地用于将数据分为许多不同组,即使在没有非常明显区分的组群的情况下也可以。下图所示的数据集包含身高和体重两项特征构成的,利用K-均值算法将数据分为三类,用于帮助确定将要生产的T-恤衫的三种尺寸。
13.3 优化目标
K-均值的代价函数(畸变函数): 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\limits_{i=1}^m\lVert X^{(i)}-\mu_{c^{(i)}}\rVert^2 J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∥X(i)−μc(i)∥2
- μ 1 , μ 2 , . . . , μ K \mu_1,\mu_2,...,\mu_K μ1,μ2,...,μK 表示聚类中心
- c ( i ) c^{(i)} c(i) 表示当前 x ( i ) x^{(i)} x(i) 分配给哪个类别
- μ c ( i ) \mu_{c^{(i)}} μc(i) 表示当前 x ( i ) x^{(i)} x(i) 分配给哪个聚类中心
优化目标: min c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) \mathop{\min}\limits_{c^{(1)},...,c^{(m)},\mu_1,...,\mu_K}J(c^{(1)},...,c^{(m)},\mu_1,...,\mu_K) c(1),...,c(m),μ1,...,μKminJ(c(1),...,c(m),μ1,...,μK)
步骤:
- 簇分配是在优化 c ( 1 ) , . . . , c ( m ) c^{(1)},...,c^{(m)} c(1),...,c(m),而保持 μ 1 , . . . , μ K \mu_1,...,\mu_K μ1,...,μK 不变
- 更新簇中心是在优化 μ 1 , . . . , μ K \mu_1,...,\mu_K μ1,...,μK,而保持 c ( 1 ) , . . . , c ( m ) c^{(1)},...,c^{(m)} c(1),...,c(m) 不变
- K-Means算法其实就是分两步 min c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) = 1 m ∑ i = 1 m ∥ X ( i ) − μ c ( i ) ∥ 2 \mathop{\min}\limits_{c^{(1)},...,c^{(m)},\mu_1,...,\mu_K}J(c^{(1)},...,c^{(m)},\mu_1,...,\mu_K)=\frac{1}{m}\sum\limits_{i=1}^m\lVert X^{(i)}-\mu_{c^{(i)}}\rVert^2 c(1),...,c(m),μ1,...,μKminJ(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∥X(i)−μc(i)∥2
13.4 随机初始化
随机初始化所有的聚类中心点:
- 我们应该选择 K < m K<m K<m,即聚类中心点的个数要小于所有训练集实例的数量
- 随机选择 K K K 个训练实例,然后令 K K K 个聚类中心分别与这 K K K 个训练实例相等
为了解决这个问题,我们通常需要多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。这种方法在 K K K较小的时候( 2 − 10 2-10 2−10)还是可行的,但是如果 K K K较大,这么做也可能不会有明显地改善。
13.5 选取聚类数量
“肘部法则”:
你会发现这种模式,它的畸变值会迅速下降,从1到2,从2到3之后,你会在3的时候达到一个肘点。在此之后,畸变值就下降的非常慢,看起来就像使用3个聚类来进行聚类是正确的,这是因为那个点是曲线的肘点,畸变值下降得很快,
K
=
3
K=3
K=3 之后就下降得很慢,那么我们就选
K
=
3
K=3
K=3。当你应用“肘部法则”的时候,如果你得到了一个像上面这样的图,那么这将是一种用来选择聚类个数的合理方法。
例如,我们的 T-恤制造例子中,我们要将用户按照身材聚类,我们可以分成3个尺寸: S , M , L S,M,L S,M,L,也可以分成5个尺寸: X S , S , M , L , X L XS,S,M,L,XL XS,S,M,L,XL,这样的选择是建立在回答“聚类后我们制造的T-恤是否能较好地适合我们的客户”这个问题的基础上作出的。
第十四章
14.1 目标1:数据压缩
目的: 减少空间、算法加速
减少数据量: 如:二维到一维,三维到二维
14.2 目标2:可视化
在许多及其学习问题中,如果我们能将数据可视化,我们便能寻找到一个更好的解决方案,降维可以帮助我们。
假使我们有有关于许多不同国家的数据,每一个特征向量都有50个特征(如GDP,人均GDP,平均寿命等)。如果要将这个50维的数据可视化是不可能的。使用降维的方法将其降至2维,我们便可以将其可视化了。
这样做的问题在于,降维的算法只负责减少维数,新产生的特征的意义就必须由我们自己去发现了。
14.3 主成分分析问题规划1
主成分分析(PCA) 是最常见的降维算法。
在PCA中,我们要做的是找到一个方向向量(Vector direction),当我们把所有的数据都投射到该向量上时,我们希望投射平均均方误差能尽可能地小。方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。
问题: 将
n
n
n 维数据降至
k
k
k 维
目标: 找到向量 u ( 1 ) , u ( 2 ) , . . . , u ( k ) u^{(1)},u^{(2)},...,u^{(k)} u(1),u(2),...,u(k) 使得总的投射误差最小
主成分分析与线性回归的比较:
- 主成分分析最小化的是投射误差(Projected Error),而线性回归尝试的是最小化预测误差
- 主成分分析不作任何预测,而线性回归的目的是预测结果
上图中,左边的是线性回归的误差(垂直于横轴投影),右边则是主要成分分析的误差(垂直于红线投影)。
14.4 主成分分析问题规划2
训练集: { x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( m ) } \{x^{(1)},x^{(2)},x^{(3)},...,x^{(m)}\} {x(1),x(2),x(3),...,x(m)}
- 均值归一化: 计算 μ j = 1 m ∑ i = 1 m x j ( i ) \mu_j=\frac{1}{m}\sum\limits_{i=1}^mx_j^{(i)} μj=m1i=1∑mxj(i),然后用 x j ( i ) − μ j s j \frac{x_j^{(i)}-\mu_j}{s_j} sjxj(i)−μj 代替 x j ( i ) x_j^{(i)} xj(i),如果特征是在不同的数量级上,我们还需要将其除以标准差 σ 2 \sigma^2 σ2 。
- 计算协方差矩阵(Covariance Matrix): ∑ = 1 m ∑ i = 1 m ( x ( i ) ) ( x ( i ) ) T \sum=\frac{1}{m}\sum\limits_{i=1}^m(x^{(i)})(x^{(i)})^T ∑=m1i=1∑m(x(i))(x(i))T
- 计算协方差矩阵的特征向量(Eigenvectors):
[U, S, V] = svd(Sigma)
,若将数据从 n n n 维降至 k k k 维,我们只需要从 U U U 中选取前 k k k 个向量,获得一个 n × k n\times k n×k 维度的矩阵,我们用 U r e d u c e U_{reduce} Ureduce 表示,然后通过如下计算获得要求的新特征向量 z ( i ) z^{(i)} z(i): z ( i ) = U r e d u c e T ⋅ x ( i ) z^{(i)}=U_{reduce}^T\cdot x^{(i)} z(i)=UreduceT⋅x(i)
14.5 主成分数量选择
投射的平均均方误差: 1 m ∑ i = 1 m ∣ ∣ x ( i ) − x a p p r o x ( i ) ∣ ∣ 2 \frac{1}{m}\sum\limits_{i=1}^m||x^{(i)}-x_{approx}^{(i)}||^2 m1i=1∑m∣∣x(i)−xapprox(i)∣∣2
训练集的方差: 1 m ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ 2 \frac{1}{m}\sum\limits_{i=1}^m||x^{(i)}||^2 m1i=1∑m∣∣x(i)∣∣2
我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的 k k k 值。
我们可以先令 k = 1 k=1 k=1,然后进行主要成分分析,获得 U r e d u c e U_{reduce} Ureduce 和 z z z,然后计算比例是否小于 1 % 1\% 1%。如果不是的话再令 k = 2 k=2 k=2,如此类推,直到找到可以使得比例小于 1 % 1\% 1% 的最小 k k k 值(原因是各个特征之间通常情况存在某种相关性)。
更好的方式来选择
k
k
k: [U, S, V] = svd(Sigma)
其中的
S
S
S 是一个
n
×
n
n\times n
n×n 的矩阵,只有对角线上有值,而其它单元都是
0
0
0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例:
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
−
x
a
p
p
r
o
x
(
i
)
∣
∣
2
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
∣
∣
2
=
1
−
∑
i
=
1
k
S
i
i
∑
i
=
1
m
S
i
i
≤
1
%
\frac{\frac{1}{m}\sum\limits_{i=1}^m||x^{(i)}-x_{approx}^{(i)}||^2}{\frac{1}{m}\sum\limits_{i=1}^m||x^{(i)}||^2}=1-\frac{\sum\limits_{i=1}^kS_{ii}}{\sum\limits_{i=1}^mS_{ii}}\le1\%
m1i=1∑m∣∣x(i)∣∣2m1i=1∑m∣∣x(i)−xapprox(i)∣∣2=1−i=1∑mSiii=1∑kSii≤1%,即:
∑
i
=
1
k
S
i
i
∑
i
=
1
m
S
i
i
≥
0.99
\frac{\sum\limits_{i=1}^kS_{ii}}{\sum\limits_{i=1}^mS_{ii}}\ge0.99
i=1∑mSiii=1∑kSii≥0.99
在压缩过数据后,我们可以采用如下方法来近似地获得原有的特征: x a p p r o x ( i ) = U r e d u c e z ( i ) x_{approx}^{(i)}=U_{reduce}z^{(i)} xapprox(i)=Ureducez(i)
14.6 压缩重现
z z z 为 1 1 1 维, x x x 为 2 2 2 维
z = U r e d u c e T x , x a p p r o x = U r e d u c e ⋅ z , x a p p r o x ≈ x z=U_{reduce}^Tx,x_{approx}=U_{reduce}\cdot z,x_{approx}\approx x z=UreduceTx,xapprox=Ureduce⋅z,xapprox≈x
14.7 应用PCA的建议
训练集: { ( 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))}
对输入进行PCA: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } ⇒ { ( z ( 1 ) , y ( 1 ) ) , ( z ( 2 ) , y ( 2 ) ) , . . . , ( z ( m ) , y ( m ) ) } \{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\}\Rightarrow \{(z^{(1)},y^{(1)}),(z^{(2)},y^{(2)}),...,(z^{(m)},y^{(m)})\} {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}⇒{(z(1),y(1)),(z(2),y(2)),...,(z(m),y(m))}
注意: 在训练集上进行PCA映射计算,但是该映射可以应用到验证集和测试集上。
应用PCA:
- 压缩:
- 减少占用内存
- 学习算法加速
- 可视化
- 不要用PCA去解决过拟合问题。
- 什么时候不适合使用PCA?首先使用原始的输入进行实验,如果没有得到预期效果,再考虑采用PCA。PCA毕竟是降维,还是会有信息损失!而且增加了额外的工作量。
第十五章
15.1 问题动机
问题描述: 假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行QA(质量控制测试)
数据集: { x ( 1 ) , x ( 2 ) , . . . , x ( m ) } \{x^{(1)},x^{(2)},...,x^{(m)}\} {x(1),x(2),...,x(m)}
特征变量: 引擎运转时产生的热量,或者引擎的振动等等
绘制图表:
给定数据集
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
x^{(1)},x^{(2)},...,x^{(m)}
x(1),x(2),...,x(m),我们假使数据集是正常的,我们希望知道新的数据
x
t
e
s
t
x_{test}
xtest 是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性
p
(
x
)
p(x)
p(x) 。
上图中,在蓝色圈内的数据属于该组数据的可能性较高,而越是偏远的数据,其属于该组数据的可能性就越低。
这种方法称为密度估计,表达如下: p ( x ) = { a n o r m a l i f p ( x ) < ε n o r m a l i f p ( x ) ≥ ε p(x)=\begin{cases}anormal&if\ p(x)<\varepsilon\\normal&if\ p(x)\ge\varepsilon\end{cases} p(x)={anormalnormalif p(x)<εif p(x)≥ε
异常检测样例: 欺诈检测、工业制造、监控数据中心计算机
15.2 高斯分布
高斯分布别名: 正态分布
若变量 x x x 服从高斯分布,则记作 x ∼ N ( μ , σ 2 ) x\sim N(\mu,\sigma^2) x∼N(μ,σ2),概率密度函数: p ( x ; μ , σ 2 ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 p(x;\mu,\sigma^2)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} p(x;μ,σ2)=2πσ1e−2σ2(x−μ)2
参数计算: μ = 1 m ∑ i = 1 m x ( i ) , σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \mu=\frac{1}{m}\sum\limits_{i=1}^mx^{(i)},\sigma^2=\frac{1}{m}\sum\limits_{i=1}^m(x^{(i)}-\mu)^2 μ=m1i=1∑mx(i),σ2=m1i=1∑m(x(i)−μ)2
高斯分布样例:
15.3 算法
对于给定的数据集 x ( 1 ) , x ( 2 ) , . . . , x ( m ) x^{(1)},x^{(2)},...,x^{(m)} x(1),x(2),...,x(m),我们要针对每一个特征计算 μ \mu μ 和 σ 2 \sigma^2 σ2 的估计值。
μ j = 1 m ∑ i = 1 m x j ( i ) , σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2 \mu_j=\frac{1}{m}\sum\limits_{i=1}^mx_j^{(i)},\sigma_j^2=\frac{1}{m}\sum\limits_{i=1}^m(x_j^{(i)}-\mu_j)^2 μj=m1i=1∑mxj(i),σj2=m1i=1∑m(xj(i)−μj)2
获得 μ j \mu_j μj 和 σ 2 \sigma^2 σ2 的估计值,给定新的一个训练实例,根据模型计算 p ( x ) p(x) p(x):
p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e − ( x j − μ j ) 2 2 σ j 2 p(x)=\prod\limits_{j=1}^np(x_j;\mu_j,\sigma_j^2)=\prod\limits_{j=1}^n\frac{1}{\sqrt{2\pi}\sigma_j}e^{-\frac{(x_j-\mu_j)^2}{2\sigma_j^2}} p(x)=j=1∏np(xj;μj,σj2)=j=1∏n2πσj1e−2σj2(xj−μj)2
若 p ( x ) < ε p(x)<\varepsilon p(x)<ε,则异常。
15.4 开发和评估异常检测系统
当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成验证集和测试集。
例如: 我们有 10000 10000 10000 台正常引擎的数据,有 20 20 20 台异常引擎的数据。
我们这样分配数据:
-
6000 6000 6000 台正常引擎的数据作为训练集
-
2000 2000 2000 台正常引擎和 10 10 10 台异常引擎的数据作为验证集
-
2000 2000 2000 台正常引擎和 10 10 10 台异常引擎的数据作为测试集
具体的评价方法如下:
- 根据训练集数据,我们估计特征的平均值和方差并构建函数 p ( x ) p(x) p(x)
- 对验证集,我们尝试使用不同的 ε \varepsilon ε 值作为阀值,并预测数据是否异常,根据 F 1 F1 F1 值或者查准率与查全率的比例来选择 ε \varepsilon ε
- 选出 ε \varepsilon ε 后,针对测试集进行预测,计算异常检验系统的 F 1 F1 F1 值,或者查准率与查全率之比
15.5 异常检测 VS 监督学习
之前我们构建的异常检测系统也使用了带标记的数据,与监督学习有些相似,下面的对比有助于选择采用监督学习还是异常检测:
异常检测 | 监督学习 |
---|---|
非常少量的正向类(异常数据 y = 1 y=1 y=1),大量的负向类( y = 0 y=0 y=0) | 同时有大量的正向类和负向类 |
许多不同种类的异常,非常难。根据非常少量的正向类数据来训练算法 | 有足够多的正向类实例,足够用于训练 算法,未来遇到的正向类实例可能与训练集中的非常近似 |
未来遇到的异常可能与已掌握的异常、非常的不同 | |
例如: 欺诈行为检测、飞机引擎的生产、检测数据中心的计算机运行状况 | 例如:邮件过滤器、天气预报、肿瘤分类 |
15.6 选择要使用的功能
非高斯分布的数据: 使用对数、指数等操作将数据转换成高斯分布
异常检测的误差分析:
- 如果正常样本希望 p ( x ) p(x) p(x) 较大;如果异常样本希望 p ( x ) p(x) p(x) 较小
- 经常遇到的问题是无论正常样本还是异常样本 p ( x ) p(x) p(x) 都较大,这样可以通过在训练集上找到这个样本,看是否能通过添加新特征将两类样本区分开来
监测数据中心的计算机: 选择那些在异常情况下可能会出现异常大或异常小的特征。
15.7 多变量高斯分布
下图中是两个相关特征,洋红色的线(根据 ε \varepsilon ε 的不同其范围可大可小)是一般的高斯分布模型获得的判定边界,很明显绿色的 X X X 所代表的数据点很可能是异常值,但是其 p ( x ) p(x) p(x) 值却仍然在正常范围内。多元高斯分布将创建像图中蓝色曲线所示的判定边界。
在一般的高斯分布模型中,我们计算
p
(
x
)
p(x)
p(x) 的方法是: 通过分别计算每个特征对应的几率然后将其累乘起来,在多元高斯分布模型中,我们将构建特征的协方差矩阵,用所有的特征一起来计算
p
(
x
)
p(x)
p(x) 。
p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e − ( x j − μ j ) 2 2 σ j 2 p(x)=\prod\limits_{j=1}^np(x_j;\mu_j,\sigma_j^2)=\prod\limits_{j=1}^n\frac{1}{\sqrt{2\pi}\sigma_j}e^{-\frac{(x_j-\mu_j)^2}{2\sigma_j^2}} p(x)=j=1∏np(xj;μj,σj2)=j=1∏n2πσj1e−2σj2(xj−μj)2
计算所有特征的平均值: μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum\limits_{i=1}^mx^{(i)} μ=m1i=1∑mx(i)
计算协方差矩阵: ∑ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T = 1 m ( X − μ ) T ( X − μ ) \sum=\frac{1}{m}\sum\limits_{i=1}^m(x^{(i)}-\mu)(x^{(i)}-\mu)^T=\frac{1}{m}(X-\mu)^T(X-\mu) ∑=m1i=1∑m(x(i)−μ)(x(i)−μ)T=m1(X−μ)T(X−μ)
计算多元高斯分布的 p ( x ) p(x) 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}}|\sum|^{\frac{1}{2}}}\exp(-\frac{1}{2}(x-\mu)^T\sum^{-1}(x-\mu)) p(x)=(2π)2n∣∑∣211exp(−21(x−μ)T∑−1(x−μ))
上图是5个不同的模型,从左往右依次分析:
- 是一个一般的高斯分布模型
- 通过协方差矩阵,令特征1拥有较小的偏差,同时保持特征2的偏差
- 通过协方差矩阵,令特征2拥有较大的偏差,同时保持特征1的偏差
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性
原高斯分布模型和多元高斯分布模型的比较:
原高斯分布模型 | 多元高斯分布模型 |
---|---|
不能捕捉特征之间的相关性 但可以通过将特征进行组合的方法来解决 | 自动捕捉特征之间的相关性 |
计算代价低,能适应大规模的特征 | 计算代价较高 训练集较小时也同样适用 |
必须要有 m > n m>n m>n,不然的话协方差矩阵 不可逆的,通常需要 m > 10 n m>10n m>10n ,另外特征冗余也会导致协方差矩阵不可逆 |
如果训练集不是太大,并且没有太多的特征,我们可以使用多元高斯分布模型。
15.8 使用多变量高斯分布的异常检测
-
多元高斯分布
参数 u ∈ R n , ∑ ∈ R n × n u\in R^n,\sum\in R^{n\times n} u∈Rn,∑∈Rn×n
x ∼ N ( μ , σ 2 ) x\sim N(\mu,\sigma^2) x∼N(μ,σ2)
p ( x ; u , ∑ ) = 1 ( 2 π ) n 2 ∣ ∑ ∣ 1 2 exp ( − 1 2 ( x − μ ) T ∑ − 1 ( x − μ ) ) p(x;u,\sum)=\frac{1}{(2\pi)^{\frac{n}{2}}|\sum|^{\frac{1}{2}}}\exp(-\frac{1}{2}(x-\mu)^T\sum^{-1}(x-\mu)) p(x;u,∑)=(2π)2n∣∑∣211exp(−21(x−μ)T∑−1(x−μ))
参数计算: μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum\limits_{i=1}^mx^{(i)} μ=m1i=1∑mx(i), ∑ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T \sum=\frac{1}{m}\sum\limits_{i=1}^m(x^{(i)}-\mu)(x^{(i)}-\mu)^T ∑=m1i=1∑m(x(i)−μ)(x(i)−μ)T
-
多元高斯分布的异常检测
计算: μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum\limits_{i=1}^mx^{(i)} μ=m1i=1∑mx(i), ∑ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T \sum=\frac{1}{m}\sum\limits_{i=1}^m(x^{(i)}-\mu)(x^{(i)}-\mu)^T ∑=m1i=1∑m(x(i)−μ)(x(i)−μ)T
计算新样本: p ( x ; u , ∑ ) = 1 ( 2 π ) n 2 ∣ ∑ ∣ 1 2 exp ( − 1 2 ( x − μ ) T ∑ − 1 ( x − μ ) ) p(x;u,\sum)=\frac{1}{(2\pi)^{\frac{n}{2}}|\sum|^{\frac{1}{2}}}\exp(-\frac{1}{2}(x-\mu)^T\sum^{-1}(x-\mu)) p(x;u,∑)=(2π)2n∣∑∣211exp(−21(x−μ)T∑−1(x−μ))
若 p ( x ) < ε p(x)<\varepsilon p(x)<ε,则异常
-
原模型与多元对比
原模型 p ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) × p ( x 2 ; μ 2 , σ 2 2 ) × . . . × p ( x n ; μ n , σ n 2 ) p(x)=p(x_1;\mu_1,\sigma_1^2)\times p(x_2;\mu_2,\sigma_2^2)\times...\times p(x_n;\mu_n,\sigma_n^2) p(x)=p(x1;μ1,σ12)×p(x2;μ2,σ22)×...×p(xn;μn,σn2)
原高斯分布模型 | 多元高斯分布模型 |
---|---|
不能捕捉特征之间的相关性 但可以通过将特征进行组合的方法来解决 | 自动捕捉特征之间的相关性 |
计算代价低,能适应大规模的特征 | 计算代价较高 训练集较小时也同样适用 |
必须要有 m > n m>n m>n,不然的话协方差矩阵 不可逆的,通常需要 m > 10 n m>10n m>10n ,另外特征冗余也会导致协方差矩阵不可逆 |
第十六章
16.1 问题规划
假使我们是一个电影供应商,我们有 5 5 5 部电影和 4 4 4 个用户,我们要求用户为电影打分。
前三部电影是爱情片,后两部则是动作片,我们可以看出 Alice 和 Bob 似乎更倾向与爱情片, 而 Carol 和 Dave 似乎更倾向与动作片。并且没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。
下面引入一些标记:
- n u n_u nu 代表用户的数量
- n m n_m nm 代表电影的数量
- 若用户 j j j 给电影 i i i 评过分,则 r ( i , j ) = 1 r(i,j)=1 r(i,j)=1
- y ( i , j ) y^{(i,j)} y(i,j) 代表用户 j j j 给电影 i i i 的评分
- m j m_j mj 代表用户 j j j 评过分的电影的总数
16.2 基于内容的推荐算法
在我们的例子中,我们可以假设每部电影都有两个特征,如 x 1 x_1 x1 代表电影的浪漫程度, x 2 x_2 x2 代表电影的动作程度。
θ
(
j
)
\theta^{(j)}
θ(j) 表示用户
j
j
j 的参数向量
x ( i ) x^{(i)} x(i) 表示电影 i i i 的特征向量
对于用户 j j j 和电影 i i i,我们预测评分为: ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)
-
学习 θ ( j ) \theta^{(j)} θ(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 \mathop{\min}\limits_{\theta^{(j)}}\frac{1}{2}\sum\limits_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum\limits_{k=1}^n(\theta_k^{(j)})^2 θ(j)min21i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(θk(j))2
-
学习 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) \theta^{(1)},\theta^{(2)},...,\theta^{(n_u)} θ(1),θ(2),...,θ(nu): min θ ( 1 ) , θ ( 2 ) , . . . , θ ( 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 \mathop{\min}\limits_{\theta^{(1)},\theta^{(2)},...,\theta^{(n_u)}}\frac{1}{2}\sum\limits_{j=1}^{n_u}\sum\limits_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum\limits_{j=1}^{n_u}\sum\limits_{k=1}^n(\theta_k^{(j)})^2 θ(1),θ(2),...,θ(nu)min21j=1∑nui:r(i,j)=1∑((θ(j))Tx(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 ) \theta_k^{(j)}:=\theta_k^{(j)}-\alpha\sum\limits_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})\cdot x_k^{(i)} θk(j):=θk(j)−αi:r(i,j)=1∑((θ(j))Tx(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 ) ) ⋅ x k ( i ) + λ θ k ( j ) ) \theta_k^{(j)}:=\theta_k^{(j)}-\alpha(\sum\limits_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})\cdot x_k^{(i)}+\lambda\theta_k^{(j)}) θk(j):=θk(j)−α(i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))⋅xk(i)+λθk(j)) (for k ≠ \ne = 0)
16.3 协同过滤
拥有用户参数,学习电影特征: min x ( 1 ) , x ( 2 ) , . . . , 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 \mathop{\min}\limits_{x^{(1)},x^{(2)},...,x^{(n_m)}}\frac{1}{2}\sum\limits_{i=1}^{n_m}\sum\limits_{j:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum\limits_{i=1}^{n_m}\sum\limits_{k=1}^n(x_k^{(i)})^2 x(1),x(2),...,x(nm)min21i=1∑nmj:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2
既没有用户参数,也没有电影特征,优化目标: 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 ( j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum\limits_{(i:j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum\limits_{i=1}^{n_m}\sum\limits_{k=1}^n(x_k^{(j)})^2+\frac{\lambda}{2}\sum\limits_{j=1}^{n_u}\sum\limits_{k=1}^n(\theta_k^{(j)})^2 J(x(1),...,x(nm),θ(1),...,θ(nu))=21(i:j):r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(j))2+2λj=1∑nuk=1∑n(θk(j))2
求偏导:
- x k ( i ) : = x k ( i ) − α ( ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) ⋅ θ k ( j ) + λ x k ( i ) ) x_k^{(i)}:=x_k^{(i)}-\alpha(\sum\limits_{j:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})\cdot \theta_k^{(j)}+\lambda x_k^{(i)}) xk(i):=xk(i)−α(j:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))⋅θk(j)+λxk(i))
- θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) ⋅ x k ( i ) + λ θ k ( j ) ) \theta_k^{(j)}:=\theta_k^{(j)}-\alpha(\sum\limits_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})\cdot x_k^{(i)}+\lambda\theta_k^{(j)}) θk(j):=θk(j)−α(i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))⋅xk(i)+λθk(j))
16.4 协同过滤算法
代价函数: 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 ( j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum\limits_{(i:j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum\limits_{i=1}^{n_m}\sum\limits_{k=1}^n(x_k^{(j)})^2+\frac{\lambda}{2}\sum\limits_{j=1}^{n_u}\sum\limits_{k=1}^n(\theta_k^{(j)})^2 J(x(1),...,x(nm),θ(1),...,θ(nu))=21(i:j):r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(j))2+2λj=1∑nuk=1∑n(θk(j))2
使用步骤:
- 初始化 x ( 1 ) , x ( 2 ) , . . . , x ( n m ) , θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) x^{(1)},x^{(2)},...,x^{(n_m)},\theta^{(1)},\theta^{(2)},...,\theta^{(n_u)} x(1),x(2),...,x(nm),θ(1),θ(2),...,θ(nu) 为随机小值
- 使用梯度下降算法 min x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) J ( x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) ) \mathop{\min}\limits_{x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}}J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}) x(1),...,x(nm),θ(1),...,θ(nu)minJ(x(1),...,x(nm),θ(1),...,θ(nu))
- 在训练完算法后,我们预测 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i) 为用户 j j j 给电影 i i i 的评分
例如: 如果一位用户正在观看电影 x ( i ) x^{(i)} x(i),我们可以寻找另一部电影 x ( j ) x^{(j)} x(j),依据两部电影的特征向量之间的距离 ∣ ∣ x ( i ) − x ( j ) ∣ ∣ ||x^{(i)}-x^{(j)}|| ∣∣x(i)−x(j)∣∣ 的大小。
16.5 矢量化:低秩矩阵分解
我们有五部电影,以及四位用户,那么这个矩阵 Y Y Y 就是一个 5 5 5 行 4 4 4 列的矩阵,它将这些电影的用户评分数据都存在矩阵里:
Movie | Alice (1) | Bob (2) | Carol (3) | Dave (4) |
---|---|---|---|---|
Love at last | 5 | 5 | 0 | 0 |
Romance forever | 5 | ? | ? | 0 |
Cute puppies of love | ? | 4 | 0 | ? |
Nonstop car chases | 0 | 0 | 5 | 4 |
Swords vs. karate | 0 | 0 | 5 | ? |
推出评分:
找到相关影片:
例如: 电影
i
i
i 有一个特征向量
x
(
i
)
x^{(i)}
x(i),你是否能找到一部不同的电影
j
j
j,保证两部电影的特征向量之间的距离
x
(
i
)
x^{(i)}
x(i) 和
x
(
j
)
x^{(j)}
x(j) 很小,那就能很有力地表明电影
i
i
i 和电影
j
j
j 在某种程度上有相似,至少在某种意义上,某些人喜欢电影
i
i
i ,或许更有可能也对电影
j
j
j 感兴趣。
16.6 实施细节:均值规范化
用户评分数据:
如果我们新增一个用户 Eve,并且 Eve 没有为任何电影评分,那么我们以什么为依据为 Eve 推荐电影呢?
我们首先需要对结果 Y Y Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:
然后我们利用这个新的
Y
Y
Y 矩阵来训练算法。 如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测
(
θ
(
j
)
)
T
x
(
i
)
+
μ
i
(\theta^{(j)})^Tx^{(i)}+\mu_i
(θ(j))Tx(i)+μi ,对于 Eve,我们的新模型会认为她给每部电影的评分都是该电影的平均分。
第十七章
17.1 学习大数据集
如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应该怎样应对一个有 100 100 100 万条记录的训练集?
以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和,如果我们的学习算法需要有 20 20 20 次迭代,这便已经是非常大的计算代价。
首先应该做的事是去检查一个这么大规模的训练集是否真的必要,也许我们只用 1000 1000 1000 个训练集也能获得较好的效果,我们可以绘制学习曲线来帮助判断。
17.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
随机梯度下降算法在每一次计算之后便更新参数 θ \theta θ ,而不需要首先将所有的训练集求和,在梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远。但是这样的算法存在的问题是,不是每一步都是朝着”正确”的方向迈出的。因此算法虽然会逐渐走向全局最小值的位置,但是可能无法站到那个最小值的那一点,而是在最小值点附近徘徊。
17.3 Mini-Batch梯度下降
小批量梯度下降: 介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数次训练实例,便更新一次参数 θ \theta θ 。
通常我们会令 b b b 在 2 ∼ 100 2\sim100 2∼100 之间。这样做的好处在于,我们可以用向量化的方式来循环 b b b 个训练实例,如果我们用的线性代数函数库比较好,能够支持平行处理,那么算法的总体表现将不受影响(与随机梯度下降相同)。
17.4 随机梯度下降收敛
批量梯度下降法:
- 绘制 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) 关于迭代次数的函数图像
- J t r a i n ( θ ) = 1 2 m t r a i n ∑ i = 1 m t r a i n ( h θ ( x t r a i n ( i ) ) − y t r a i n ( i ) ) 2 J_{train}(\theta)=\frac{1}{2m_{train}}\sum\limits_{i=1}^{m_{train}}(h_\theta(x_{train}^{(i)})-y_{train}^{(i)})^2 Jtrain(θ)=2mtrain1i=1∑mtrain(hθ(xtrain(i))−ytrain(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
- 学习期间,每次更新 θ \theta θ 之前使用 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) 计算 c o s t ( θ , ( x ( i ) , y ( i ) ) ) cost(\theta,(x^{(i)},y^{(i)})) cost(θ,(x(i),y(i)))
- 每 1000 1000 1000 次迭代绘制过去 1000 1000 1000 次 c o s t ( θ , ( x ( i ) , y ( i ) ) ) cost(\theta,(x^{(i)},y^{(i)})) cost(θ,(x(i),y(i))) 平均值的图像
- 如果图像波动过大,可增大迭代次数取平均;如果上升趋势,调小学习率;如果下降,良好;如果平直,出错。
17.5 在线学习
适合大量数据流下,每次使用一个数据,用过即弃。
能够实时跟随用户偏好,例如CTR学习。
不使用固定数据集,而是连续的数据集。
17.6 减少映射与数据并行
映射化简和数据并行对于大规模机器学习问题而言是非常重要的概念。之前提到,如果我们用批量梯度下降算法来求解大规模数据集的最优解,我们需要对整个训练集进行循环,计算偏导数和代价,再求和,计算代价非常大。如果我们能够将我们的数据集分配给不多台计算机,让每一台计算机处理数据集的一个子集,然后我们将计所的结果汇总在求和。这样的方法叫做映射简化。
具体而言,如果任何学习算法能够表达为,对训练集的函数的求和,那么便能将这个任务分配给多台计算机(或者同一台计算机的不同 CPU 核心),以达到加速处理的目的。
例如: 我们有 400 400 400 个训练实例,我们可以将批量梯度下降的求和任务分配给 4 4 4 台计算机进行处理:
很多高级的线性代数函数库已经能够利用多核 CPU 的多个核心来并行地处理矩阵运算,这也是算法的向量化实现如此重要的缘故(比调用循环快)。
第十八章
18.1 问题描述与OCR流水线
图像文字识别应用所作的事是,从一张给定的图片中识别文字。这比从一份扫描文档中识别文字要复杂的多。
为了完成这样的工作,需要采取如下步骤:
- 文字侦测(Text Detection):将图片上的文字与其他环境对象分离开来
- 字符切分(Character Segmentation):将文字分割成一个个单一的字符
- 字符分类(Character Classification):确定每一个字符是什么
流程图:
18.2 滑动窗口
定义: 滑动窗口是一项用来从图像中抽取对象的技术。
- 人物识别
- 文字侦测
- 字符切分
- 字符分类
18.3 获取大量数据和人工数据
-
从零开始自行生成
对于OCR任务,可以获取不同的字库,将字体放到不同的背景上,然后用模糊算子或者仿射变换得到数据集。
-
通过引入失真来合成数据
例如:拉伸压缩变换
引入的失真应该代表测试集中的噪声/失真类型。
通常情况下,向你的数据添加纯粹的随机/无意义的噪音是没有帮助的。 -
讨论得到更多数据
- 人工合成数据
- 手动收集、标记数据
- 众包(亚马逊众包平台)
18.4 天花板分析:下一步工作的pipeline
流程图中每一部分的输出都是下一部分的输入,上限分析中,我们选取一部分,手工提供 100 % 100\% 100% 正确的输出结果,然后看应用的整体效果提升了多少。假使我们的例子中总体效果为 72 % 72\% 72% 的正确率。
如果我们令文字侦测部分输出的结果 100 % 100\% 100% 正确,发现系统的总体效果从 72 % 72\% 72% 提高到了 89 % 89\% 89% 。这意味着我们很可能会希望投入时间精力来提高我们的文字侦测部分。
接着我们手动选择数据,让字符切分输出的结果 100 % 100\% 100% 正确,发现系统的总体效果只提升了 1 % 1\% 1% ,这意味着,我们的字符切分部分可能已经足够好了。
最后我们手工选择数据,让字符分类输出的结果 100 % 100\% 100% 正确,系统的总体效果又提升了 10 % 10\% 10% ,这意味着我们可能也会应该投入更多的时间和精力来提高应用的总体表现。
第十九章
19.1 总结与感谢
总结主要章节:
- 监督学习
- 线性回归
- 逻辑回归
- 神经网络
- SVM
- 无监督学习
- K-Means
- PCA
- 异常检测
- 具体应用
- 推荐系统
- 大规模机器学习
- 构建机器学习系统的利器
- 偏差方差分析
- 正则化
- 决定下一步做什么
- 评估学习算法
- 学习曲线
- 误差分析
- 上限分析
最后,在结束之前,我还想再多说一点:那就是,也许不久以前我也是一个学生,即使是现在,我也尽可能挤出时间听一些课,学一些新的东西。所以,我深知要坚持学完这门课是很需要花一些时间的,我知道,也许你是一个很忙的人,生活中有很多很多事情要处理。正因如此,你依然挤出时间来观看这些课程视频。我知道,很多视频的时间都长达数小时,你依然花了好多时间来做这些复习题。你们中好多人,还愿意花时间来研究那些编程练习,那些又长又复杂的编程练习。我对你们表示衷心的感谢!我知道你们很多人在这门课中都非常努力,很多人都在这门课上花了很多时间,很多人都为这门课贡献了自己的很多精力。所以,我衷心地希望你们能从这门课中有所收获!
最后我想说!再次感谢你们选修这门课程!
Andew Ng