900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 吴恩达---机器学习笔记

吴恩达---机器学习笔记

时间:2024-02-12 22:22:02

相关推荐

吴恩达---机器学习笔记

这是一个督促自己学习的笔记

文章目录

这是一个督促自己学习的笔记第一节1.1监督学习1.2 无监督学习第二节2.1模型描述2.2 代价函数2.5 梯度下降2.6 梯度下降知识点总结2.7 线性回归的梯度下降第四节4.1 Multiple feature4.2 多元梯度下降法4.3 特征缩放4.4 学习率4.5 特征与多项式回归4.6 正规方程组算法(Normal equations algorithm )4.7 正规方程组在矩阵不可逆时的解决方法第六节6.1 分类6.2 假设陈述6.3 决策界限6.4 代价函数6.5 简化代价函数与梯度下降6.6 高级优化6.7 多元分类 一对多第七节7.1 过拟合问题7.2 代价函数7.3 线性回归的正则化7.4 logistic回归的正则化第八节8.1 非线性假设8.2 神经元与大脑8.3 模型展示 (1)8.4 模型展示(2)例子与直觉理解(一)8.6 例子与直觉理解(二)8.7 多元分类期中小结代价函数未正则化正则化第九节9.1 代价函数9.2 反向传播算法9.3 理解反向传播9.4 使用注意:展开参数9.5 梯度检测9.6 随机初始化9.7 组合在一起第十节10.1 决定下一步做什么10.2 评估假设10.3 模型选择和训练,验证,测试集10.4 诊断偏差与方差10.5 正则化和偏差,方差10.6 学习曲线10.7 第十节总结第十一节 机器学习系统设计11.1 确定执行的优先级11.2 误差分析11.3 不对称性分类的误差评估11.4 Precision和Recall的权衡11.5 机器学习数据第十二节 Support Vector Machines12.1 优化目标12.2 直观上对大间隔的理解12.3 大间隔分类器的数学原理12.4 核函数112.5 核函数212.6 使用SVM第十三节 非监督学习聚类算法13.2 K-Means 算法13.3 优化目标13.4 随机初始化13.5 选取聚类数量第十四节 Dimensionality Reduction(降维)14.1 目标一:数据压缩14.2 目标二:可视化14.3 主成分分析问题规划1(PCA)14.4 主成分分析问题规划2(PCA)14.5 主成分数量选择14.6 压缩重现应用PCA的建议第十五节 异常检测(anomaly detection)15.1 问题动机15.3 算法15.4 开发和评估异常检测系统15.5 异常检测 vs 监督学习15.6 选择要使用的功能15.7 多变量高斯分布15.8 使用多变量高斯分布的异常检测第十六节 推荐系统(Recommender Systems)16.1 问题规划16.2 基于内容的推荐算法16.3 协同过滤16.4 协同过滤算法16.5 矢量化:低秩矩阵分解16.6 实施细节:均值规范化(类似于正态分布的标准化第十七节 大数据集学习(Large Scale Machine Learning)17.1 学习大数据集17.2 随机梯度下降17.3 Mini-Batch梯度下降17.4 随机梯度下降收敛17.5 在线学习17.6 减少映射和数据并行

第一节

1.1监督学习

监督学习主要分为两类,回归问题分类问题

回归问题,就是让模型预测一个连续的值

分类问题,是给模型一些特征,根据这些特征对新的元素进行分类,与回归问题要预测连续的值不同,分类问题预测离散的值

1.2 无监督学习

无监督学习,就是给算法大量的数据,然后算法找出这些数据的结构,无监督学习主要应用于聚类问题

聚类算法可以将无标签的数据分为一个个cluster

例如,聚类算法将不同的dna片段分为一个个cluster

再比如著名的鸡尾酒派对问题,两个话筒记录不同强度的混合交谈声,通过调用聚类算法可以将这两个人的声音分离

第二节

2.1模型描述

下图是一个一元线性回归模型,机器学习模型就是输入一系列训练集,经过机器学习算法得到的假设函数(hypothesis),通过这个函数,我们输入x,就可以得到y

2.2 代价函数

平方误差代价函数

我们先将这个代价函数简化为过原点的直线

如下图所示,通过选择不同的参数θ1,我们得到了J(θ1)函数的图像,该函数的最小值点对应的线性回归模型拟合的最好

好的,现在回到未简化的线性回归模型,这种模型对应的代价函数是二元函数,如下图所示

将这个二元函数画为等高线图

可以看见,当参数点位于等高线的最中间时,代价函数最小,模型拟合的最好

2.5 梯度下降

梯度下降算法就是通过不断地改变θ0和θ1,最终得到代价函数的最小值

梯度下降算法有个特点,就是初始下降位置不同,其最终得到的局部最小值不同,如下图所示

下图为梯度下降算法的数学公式,记住参数θ0和θ1需要同时改变

2.6 梯度下降知识点总结

梯度下降的学习率α不应过大或过小

过小的话,梯度下降的速度会很慢

过大的话,步子迈的太大,可能永远也无法到达局部最小值

选择合适的学习率之后,梯度下降算法会根据该点导数自动调整步伐,所以我们不需要修改α

2.7 线性回归的梯度下降

机器学习中的有些代价函数是非凸函数,有多个局部最小值,这样我们很难去使用梯度下降的方法来求得代价函数的全局最小值,可能得用到退火算法之类的高级最优化方法,但是很幸运的是,线性回归模型是可凸优化函数,没有局部最优解,只有全局最优解,故可以使用梯度下降法求全局最优解

如下图所示

以上的梯度下降法叫做Batch梯度下降,这种梯度下降算法每进行一次梯度下降,都得用到全部训练集

好了,到此为止我们学习完了第一种机器学习算法—梯度下降法,除了它以外,我们还有另一种求解最小值的算法,叫做正规方程组算法(normal equations algorithm),与之相比,梯度下降法更适用于大规模数据集

第四节

4.1 Multiple feature

多元线性回归模型,就是有多个特征的线性模型

其方程为

hθ(x)=θ0+θ1x1+θ2x2+⋯+θnxnh_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\cdots+\theta_{n}x_{n}hθ​(x)=θ0​+θ1​x1​+θ2​x2​+⋯+θn​xn​

方程有另一种简便写法

hθ(x)=θTxh_{\theta}(x)=\theta^{T}xhθ​(x)=θTx

x=[x0x1⋮xn],θ=[θ0θ1⋮θn]x=\begin{bmatrix} x_{0}\\ x_{1}\\ \vdots\\ x_{n} \end{bmatrix},\theta=\begin{bmatrix} \theta_{0}\\ \theta_{1}\\ \vdots\\ \theta_{n} \end{bmatrix}x=⎣⎢⎢⎢⎡​x0​x1​⋮xn​​⎦⎥⎥⎥⎤​,θ=⎣⎢⎢⎢⎡​θ0​θ1​⋮θn​​⎦⎥⎥⎥⎤​

4.2 多元梯度下降法

多元梯度下降法和一元梯度下降法框架相同,只是多元梯度下降法每一次梯度下降,都需要对每个元素进行修改

θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_{j}:=\theta_{j}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}θj​:=θj​−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

4.3 特征缩放

对于多元梯度下降,我们需要对每个元素进行标准化,即让每个元素的范围在0~1之间

如下图所示,如果两个元素之间的规模相差过大,梯度下降的路径可能会来回振荡,导致速度减慢

缩放的方法

类似于正态分布的标准化

x=x−μrange或者标准差x=\frac{x-\mu}{range或者标准差}x=range或者标准差x−μ​

4.4 学习率

一般来说,损失值与梯度下降次数的关系图应如下图所示,总体递减,最后收敛(converge)

但如果你的学习率α过大,梯度下降的步子迈的太开,损失函数J(θ)的图像可能会如下图左上角所示,逐渐增加,也有可能会像下图左下角那样,不断振荡

减小学习率α可以解决上述问题

4.5 特征与多项式回归

有时候,可以自己根据已有的特征创建新的特征,模型可能会拟合的更好

例如下图的房屋价格预测

如下图的散点图所示,通过观察我们知道单纯的线性函数是无法很好的拟合这些数据的,于是我们采用多项式回归的方式来拟合这些数据,由于二次多项式在递增过后可能会递减,不符合房屋价格的趋势,故最终我们打算采用三次多项式模型

那么如何将三次多项式套入线性回归模型呢?

采用多元线性回归模型,将特征一一对应,如下图所示

但是采用这种方法的话我们得考虑特征的规模

考虑特征的规模效应,有时候采用第二个模型拟合性会更好

4.6 正规方程组算法(Normal equations algorithm )

正规方程组算法是区别于迭代方法的直接解法

其实对于一些代价函数,我们并不需要使用梯度下降法去逐步接近最小值点,我们可以直接通过求导的方法得到θ,如下图所示

如下图所示的房价预测问题中,有n个特征,m=4个样本,我们可以构造两个矩阵X(m x (n+1))和y(m x 1)

极小值点θ可以如下公式求得

θ=(XTX)−1XTy\theta=(X^{T}X)^{-1}X^{T}yθ=(XTX)−1XTy

下面是梯度下降与normal equation算法的优缺点对比

当样本集n在10000以内的时候,倾向于采用normal equation算法

正规方程组算法一般不适用或者不能用于较为复杂的算法,例如后面要讲到的分类算法(logistic回归算法),但是在线性回归模型中,normal equation算法依旧是梯度下降法的不错替代算法

4.7 正规方程组在矩阵不可逆时的解决方法

因为

θ=(XTX)−1XTy\theta=(X^{T}X)^{-1}X^{T}yθ=(XTX)−1XTy

所以当矩阵XTXX^{T}XXTX不可逆时,该怎么办呢?

1.如果有冗余特征(redundant features),即特征值线性相关(例如 x1 = 常数 * x2),那么就删去冗余的特征

2.如果特征数量太多,就删去一些特征,或者采用正则化方法

第六节

6.1 分类

对于分类问题,我们一般使用logistic regression算法,而线性回归算法表现得很差

6.2 假设陈述

logistic regression算法的hypothesis函数为

hθ(x)=g(θTx),g(x)=11+e−zh_{\theta}(x)=g(\theta^{T}x),g(x)=\frac{1}{1+e^{-z}}hθ​(x)=g(θTx),g(x)=1+e−z1​

hθ(x)=P(y=1∣x;θ)h_{\theta}(x)=P(y=1|x;\theta)hθ​(x)=P(y=1∣x;θ)

本质上logistic回归算法输出的是概率

6.3 决策界限

决策界限是一个分界线,也是一个函数

如果数据点在决策界限之外,那么hypothesis函数的值就<0.5,y的预测值为0

如果数据点在决策界限之内,那么hypothesis函数的值就>=0.5,y的预测值为1

下图中将x1_x2平面划分为两块的直线就是决策界限

下图为非线性决策界限,采用多项式的方法来进行决策

决策边界是由θ来决定的,而我们使用训练集来对θ进行拟合

当然,通过多项式拟合曲线,我们还可以得到更复杂的决策边界

6.4 代价函数

对于linear regression,其代价函数为

J(θ)=1m∑i=1m12(hθ(xi)−y(i))2J(\theta)=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_{\theta}(x^{i})-y^{(i)})^{2}J(θ)=m1​i=1∑m​21​(hθ​(xi)−y(i))2

=12m∑i=1m(hθ(xi)−y(i))2=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{(i)})^{2}=2m1​i=1∑m​(hθ​(xi)−y(i))2

单个样本logistic regression的代价函数为

Cost(hθ(x)−y)=12(hθ(x)−y)2Cost(h_{\theta}(x)-y)=\frac{1}{2}(h_{\theta}(x)-y)^{2}Cost(hθ​(x)−y)=21​(hθ​(x)−y)2

其中

hθ(x)=11+e−θTxh_{\theta}(x)=\frac{1}{1+e^{-\theta^{T}x}}hθ​(x)=1+e−θTx1​

显然hypothesis函数是一个非线性的复杂函数,因此

logistic regression的代价函数是非凸函数,有多个局部最小值,无法使用梯度下降法求最优解

因此,我们必须寻找另一个代价函数

Cost(hθ(x),y)={−log(hθ(x))ify=1−log(1−hθ(x))ify=0Cost(h_{\theta}(x),y)=\begin{cases} -log(h_{\theta(x)}) \ \ \ \ \ if\ y=1\\ -log(1-h_{\theta(x)}) \ \ \ \ \ if\ y=0 \end{cases}Cost(hθ​(x),y)={−log(hθ(x)​)ify=1−log(1−hθ(x)​)ify=0​

当y=1时,如果预测值h(x)很接近1,那么cost值就会很小

但预测值很接近0时,cost就会很大

当y=0时,如果预测值h(x)很接近1,那么cost值就会很大

但预测值很接近0时,cost就会很小

这就是一种惩罚机制,当我们预测的值与实际值越接近,cost值就越小

6.5 简化代价函数与梯度下降

所以logistic regression的代价函数为

J(θ)=1m∑i=1mCost(hθ(x(i)),y(i))J(\theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_{\theta}(x^{(i)}),y^{(i)})J(θ)=m1​i=1∑m​Cost(hθ​(x(i)),y(i))

=−1m[∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]=−m1​[i=1∑m​y(i)loghθ​(x(i))+(1−y(i))log(1−hθ​(x(i)))]

6.6 高级优化

给出参数θ,如果我们的优化只需计算

J(θ),∂∂θjJ(θ)J(\theta),\frac{\partial}{\partial\theta_{j}}J(\theta)J(θ),∂θj​∂​J(θ)

那么我们不仅可以使用梯度下降算法,还可以使用很多高级算法

共轭梯度下降算法(Conjugate gradient)BFGSL-BFGS

这些算法都比较复杂,但是好处就是不用自己去选择学习率α,并且优化的速度也比梯度下降算法快

6.7 多元分类 一对多

对于一些分类问题,只有两种情况:是/否

但是更多的分类问题,是要求分出多个类别的,如下图所示

于是,如何通过logistic regression算法来进行多元分类呢?

如下图所示,我们的数据集总共有三种类别,于是我们进行三次分类

每一次分类都将其余的数据设为同一种类型,这样就相当于进行二元分类了

于是我们就得到了多元分类的hypothesis函数

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)

得到多元分类的hypothesis函数后,对于每个新输入的数据x,通过计算

max(hθ(i))(x)max(h_{\theta}^{(i)})(x)max(hθ(i)​)(x)

从而得出x的类别

第七节

7.1 过拟合问题

在回归问题中,我们经常会遇到一个问题:

当我们的模型的特征太少时,可能与实际数据拟合的不好,导致高偏差(high bias),即称为欠拟合

当我们的模型特征太多,数据数量太少,不足以约束特征,导致高方差(high variance),即称为过拟合

过拟合可能会带来的问题是:==这个模型可能在训练集中表现得很好,但是缺乏泛化能力(generalize),在实际测试集上可能表现的会较差

如下图所示,这是一个房价预测的回归问题,当出现过拟合时,拟合曲线十分弯曲,不符合实际的房价情况

下图为logistic regression的过拟合问题

那么如何调整过模型过拟合的问题呢?

减少特征的数量 手动选择去除一些特征模型选择算法 正则化 保留所有参数θ,但是减小量级(magnitude)或者是参数的值

7.2 代价函数

为了实现正则化,我们需要对代价函数进行一些修改

显然,当我们的特征值过多时,拟合出来的曲线是不平滑的,如下图所示,但如果我们在代价函数处加入对高阶参数的惩罚项,那么在进行最优化时,高阶参数的值会被优化的很小,拟合的曲线会更加平滑

如果使参数的值较小,那么我们就能得到一个更简单的假设模型

这里的原因还不太清楚

于是我们将代价函数更改为如下形式

J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}+\lambda\sum_{j=1}^{n}\theta_{j}^{2}]J(θ)=2m1​[i=1∑m​(hθ​(x(i))−y(i))2+λj=1∑n​θj2​]

其中λ称为正则化参数,如果λ过大,如下图所示,那么所有的参数都将被优化为0,拟合的模型就是一条直线,偏差非常高,如下图所示

这只是简单的正则化的介绍,下次将深入认识正则化

7.3 线性回归的正则化

线性回归求最优解有两种方法

梯度下降法正规方程法

先讲梯度下降法

下图为线性回归的正则化代价函数

J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}+\lambda\sum_{j=1}^{n}\theta_{j}^{2}]J(θ)=2m1​[i=1∑m​(hθ​(x(i))−y(i))2+λj=1∑n​θj2​]

对于正则化的代价函数,我们的梯度下降算法也要稍作修改

我们将第0项θ0的更新单独分开,因为惩罚函数不对θ0进行惩罚我们将其余项的梯度下降函数修改为θj:=θj−α[1m∑i=1m(hθ(x(i))−y(i))xj(i)+λmθj]\theta_{j}:=\theta_{j}-\alpha[\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}+\frac{\lambda}{m}\theta_{j}]θj​:=θj​−α[m1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​+mλ​θj​]

即 θj:=θj(1−αλm)−α1m∑i=1m(hθ(x(i))−y(i))xj(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_{j}^{(i)}θj​:=θj​(1−αmλ​)−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

如下图所示,相比较原来的梯度下降函数,新的函数会先将自己乘以一个小于1的常数虽然还不知道有什么意义,这样对每个参数而言惩罚力度都是一致的吧,这样感觉不太行

然后是正规方程法

与普通的正规方程法相比,新的方程加入了一个(n+1)x(n+1)的矩阵

θ=(XTX+λ[011⋱1]⏟(n+1)∗(n+1))−1XTy\theta=(X^{T}X+\lambda \underbrace{\begin{bmatrix} 0\\ \ &1\\ \ &\ &1\\ \ &\ &\ &\ddots\\ \ &\ &\ &\ & 1 \end{bmatrix}}_{(n+1)*(n+1)} )^{-1}X^{T}yθ=(XTX+λ(n+1)∗(n+1)⎣⎢⎢⎢⎢⎡​0​1​1​⋱​1​⎦⎥⎥⎥⎥⎤​​​)−1XTy

并且通过数学证明,新的方程的括号内的矩阵一定可逆

所以,正则化对于正规方程法而言还可以解决一些不可逆的情况

7.4 logistic回归的正则化

logistic回归的正则化和线性回归大致相同

J(θ)=−1m[∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+λ2m∑j=1nθj2J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2}J(θ)=−m1​[i=1∑m​y(i)loghθ​(x(i))+(1−y(i))log(1−hθ​(x(i)))]+2mλ​j=1∑n​θj2​

下面是一些高级优化方法的正则化

这里我们先不深入了解

第八节

8.1 非线性假设

对于非线性分类,我们可以采用多项式logistic regression来进行分类

而所谓多项式拟合其实就是采用泰勒级数的方法来对多元函数进行拟合

当n=2时,二元函数泰勒展开到第二阶就会新增6个特征,这勉强可以接受

但是当n=100时,多元函数展开到第二阶会新增5000个特征,而特征一多又会导致过拟合

也许你会想着减少第二阶的特征数量,比如只用

x12,x22,x32,⋯x_{1}^{2},x_{2}^{2},x_{3}^{2},\cdotsx12​,x22​,x32​,⋯

但是这会导致模型欠拟合

这就是logistic regression在进行多特征进行分类时的局限性

例如,在计算机视觉问题中,对于汽车的分类,如果只取两个像素点,即输入两个特征,那么我们可以用简单的logistic regression来进行分类

可是,一张最简单的汽车图片也有2500个像素,如果是彩色图片(RGB)

那将会有3x2500=7500个像素,即7500个特征,如果采用logistic regression进行多项式分类,那么拟合到第二阶就会产生3百万个新特征,这相当夸张

于是,为了解决多特征分类问题,神经网络模型闪亮登场

8.2 神经元与大脑

这节课吴恩达老师没讲什么干货

8.3 模型展示 (1)

下图为神经网络的一个神经元的构造

它含有三个输入,一个输出,其中神经元执行logistic regression,所以你可以将其理解为三个特征的线性分类决策界限就是三维空间的一个平面

下图就是一个单隐藏层的神经网络了,注意,每一层神经网络都有一个bias unit,其值为1,但是一般不画出

如下图所示,如果你之前学过吴恩达的深度学习,你可以将θ^(j)理解为W[j]

8.4 模型展示(2)

神经网络模型其实就是一个logistic regression模型,但是它含有隐藏层,这可以帮助它进行更复杂的非线性拟合

正向传播

多个隐藏层的神经网络模型展示

例子与直觉理解(一)

采用神经网络模型,我们可以进行复杂的非线性分类

下面是三个简单的线性分类,AND,OR和NOT,采用一个神经元(即logistic回归)就可以进行分类

8.6 例子与直觉理解(二)

那么,我们如何使用神经网络模型来进行复杂分类呢?

下图就是一个复杂分类,对于异或问题,我们不可能用简单的线性模型来进行分类,如下图所示

但是,通过AND,OR,NOT这三个神经元组成的神经网络模型,却可以对异或问题进行分类!

8.7 多元分类

多元分类即输出有多个值,下图即为多元分类的模型,hypothesis函数有四个输出值

我们这里采用四阶列向量来表示y,而不是{1,2,3,4}

期中小结

代价函数
未正则化

线性回归的代价函数

J(θ)=1m∑i=1m12(hθ(xi)−y(i))2J(\theta)=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_{\theta}(x^{i})-y^{(i)})^{2}J(θ)=m1​i=1∑m​21​(hθ​(xi)−y(i))2

=12m∑i=1m(hθ(xi)−y(i))2=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{(i)})^{2}=2m1​i=1∑m​(hθ​(xi)−y(i))2

线性回归的梯度下降

θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_{j}:=\theta_{j}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}θj​:=θj​−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

logistic回归的代价函数

J(θ)=1m∑i=1mCost(hθ(x(i)),y(i))J(\theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_{\theta}(x^{(i)}),y^{(i)})J(θ)=m1​i=1∑m​Cost(hθ​(x(i)),y(i))

=−1m[∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]=−m1​[i=1∑m​y(i)loghθ​(x(i))+(1−y(i))log(1−hθ​(x(i)))]

logistic回归的梯度下降算法也与线性回归一致

θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_{j}:=\theta_{j}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}θj​:=θj​−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

正则化

线性回归的代价函数J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}+\lambda\sum_{j=1}^{n}\theta_{j}^{2}]J(θ)=2m1​[i=1∑m​(hθ​(x(i))−y(i))2+λj=1∑n​θj2​]

线性回归的梯度下降算法

θj:=θj−α[1m∑i=1m(hθ(x(i))−y(i))xj(i)+λmθj]\theta_{j}:=\theta_{j}-\alpha[\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}+\frac{\lambda}{m}\theta_{j}]θj​:=θj​−α[m1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​+mλ​θj​]

即 θj:=θj(1−αλm)−α1m∑i=1m(hθ(x(i))−y(i))xj(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_{j}^{(i)}θj​:=θj​(1−αmλ​)−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

logistic回归的代价函数

J(θ)=−1m[∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+λ2m∑j=1nθj2J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2}J(θ)=−m1​[i=1∑m​y(i)loghθ​(x(i))+(1−y(i))log(1−hθ​(x(i)))]+2mλ​j=1∑n​θj2​

logistic回归的代价函数也与线性回归一致

θj:=θj−α[1m∑i=1m(hθ(x(i))−y(i))xj(i)+λmθj]\theta_{j}:=\theta_{j}-\alpha[\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}+\frac{\lambda}{m}\theta_{j}]θj​:=θj​−α[m1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​+mλ​θj​]

神经网络的代价函数

J(θ)=−1m[∑i=1m∑k=1Kyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i)))k)]+λ2m∑l=1L−1∑i=1sl−1∑j=1sl+1(θji(l))2J(\theta)=-\frac{1}{m}[\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})]+\frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_{l}-1}\sum_{j=1}^{s_{l+1}}(\theta_{ji}^{(l)})^{2}J(θ)=−m1​[i=1∑m​k=1∑K​yk(i)​log(hθ​(x(i)))k​+(1−yk(i)​)log(1−(hθ​(x(i)))k​)]+2mλ​l=1∑L−1​i=1∑sl​−1​j=1∑sl+1​​(θji(l)​)2

第九节

9.1 代价函数

对于多元分类,需要K个输出单元,其中

sL=Ks_{L}=KsL​=K

这是神经网络的代价函数

J(θ)=−1m[∑i=1m∑k=1Kyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i)))k)]+λ2m∑l=1L−1∑i=1sl−1∑j=1sl+1(θji(l))2J(\theta)=-\frac{1}{m}[\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})]+\frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_{l}-1}\sum_{j=1}^{s_{l+1}}(\theta_{ji}^{(l)})^{2}J(θ)=−m1​[i=1∑m​k=1∑K​yk(i)​log(hθ​(x(i)))k​+(1−yk(i)​)log(1−(hθ​(x(i)))k​)]+2mλ​l=1∑L−1​i=1∑sl​−1​j=1∑sl+1​​(θji(l)​)2

由下图可知,相比较logistic回归的代价函数,在主项中,需要对K个输出单元的cost值进行求和,在正则化项中,需要对每一层的每个θ值进行惩罚,除了bias unit的θ

9.2 反向传播算法

9.3 理解反向传播

首先我们回顾正向传播的过程

当我们计算第3层第1个单元的z值时,公式如下

z1(3)=θ10(2)∗1+θ11(2)∗a1(2)+θ12(2)∗a1(2)z_{1}^{(3)}=\theta_{10}^{(2)}*1+\theta_{11}^{(2)}*a_{1}^{(2)}+\theta_{12}^{(2)}*a_{1}^{(2)}z1(3)​=θ10(2)​∗1+θ11(2)​∗a1(2)​+θ12(2)​∗a1(2)​

下图为反向传播的示意图

首先,我们可以将

δjl看作ajl的误差\delta_{j}^{l}\ \ 看作\ \ a_{j}^{l}\ \ 的误差δjl​看作ajl​的误差

即δ1(4)=y(1)−a1(4)\delta_{1}^{(4)}=y^{(1)}-a_{1}^{(4)}δ1(4)​=y(1)−a1(4)​

相当于实际值y减去估计值a

实际上δjl=∂cost(i)∂zj(l)\delta_{j}^{l}=\frac{\partial\ cost(i)}{\partial z_{j}^{(l)}}δjl​=∂zj(l)​∂cost(i)​

cost(i)=y(i)loghθ(x(i))+(1−y(i))loghθ(x(i))cost(i)=y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})logh_{\theta}(x^{(i)})cost(i)=y(i)loghθ​(x(i))+(1−y(i))loghθ​(x(i))

于是,当我们求出每个节点(除了 bias unit和输入节点)的误差值δ后,我们就可以根据这些偏导数进行梯度下降了

δ值可以从后往前依次计算

δ2(2)=θ12(2)δ1(3)+θ22(2)δ2(3)\delta_{2}^{(2)}=\theta_{12}^{(2)}\delta_{1}^{(3)}+\theta_{22}^{(2)}\delta_{2}^{(3)}δ2(2)​=θ12(2)​δ1(3)​+θ22(2)​δ2(3)​

δ2(3)=θ12(3)δ1(4)\delta_{2}^{(3)}=\theta_{12}^{(3)}\delta_{1}^{(4)}δ2(3)​=θ12(3)​δ1(4)​

以上为反向传播算法的直观理解

9.4 使用注意:展开参数

对于L=4的神经网络模型,其参数θ有三个,且都为矩阵

D为梯度返回值

那么我们如何将这些参数矩阵展开为向量呢?

由于都是一些octave的操作,这里跳过

9.5 梯度检测

由于反向传播算法很难debug,又很容易出错,所以我们有一种方法可以对反向传播算法得出的结果进行检测,如下图所示

由于都是一些octave的操作,这里跳过

9.6 随机初始化

对于logistic回归,θ参数可以用0来进行初始化,但是对于神经网络模型而言,用0来进行初始化会导致所有的隐藏层都在进行相同的运算

如下图所示,如果将θ初始化为0,那么在下图中,蓝线,红线,绿线所带的权重相同那么隐藏层的两个单元a1,a2也会相同

不仅如此,后续计算误差值δ时,每个单元的δ值也会相同,这就会导致无论进行多少次梯度下降,每个单元的激发值a1,a2都不会改变

于是,我们将参数随机初始化为[-ε,ε]之间的数,ε很接近0

9.7 组合在一起

如何选择神经网络的结构

对神经网络模型训练的步骤

第十节

10.1 决定下一步做什么

当你的机器学习模型误差很大时,你该怎么办?

添加更多训练集尝试减小特征数量,防止过拟合寻找其他特征添加多项式特征修改学习率λ

或许你想每个方法都试一试,但是每个方法都相当耗时,所以我们需要一种诊断方法来确定我们应该采用哪种方法来修改机器学习模型

10.2 评估假设

首先,我们要评估我们的hypothesis函数拟合情况

当特征很少时,我们可以通过画图来观察,但是当特征数量很多时,这就行不通了

下面是一种评估假设的方法

假设我们有一组数据集,我们随机抽取70%作为训练集,剩下的30%为测试集

(线性回归模型)

然后,利用训练集的数据我们得到了优化后的θ,再利用θ去计算测试集的误差

(LR模型)

与线性回归模型稍有不同,LR模型的误差计算函数为

err(hθ(x),y)={1ifhθ(x)>=0.5,y=0orifhθ(x)<0.5,y=10otherwiseerr(h_{\theta}(x),y)=\begin{cases} 1\ \ \ \ \ if \ \ h_{\theta}(x)>=0.5,\ \ y=0\\ \ \ \ \ \ \ \ or \ \ if \ \ h_{\theta}(x)<0.5,\ \ y=1\\ 0\ \ \ \ \ otherwise \end{cases}err(hθ​(x),y)=⎩⎪⎨⎪⎧​1ifhθ​(x)>=0.5,y=0orifhθ​(x)<0.5,y=10otherwise​

以上

10.3 模型选择和训练,验证,测试集

这一章节没学到什么干货

10.4 诊断偏差与方差

关于诊断机器学习模型,最重要的就是判断该模型是high bias还是high variance,即欠拟合还是过拟合,下面,我们将通过对比Training error和Cross validation error来进行判断

疑问:什么是交叉验证误差?

如下图所示,对于交叉验证误差而言,当多项式的阶数太大或太小时,Jcv都会很高

于是,当Jtrain和Jcv都很高时,应该是属于high bias问题,当Jtrain很低,但Jcv很高时,应该是属于high variance问题

这是Jtrain和Jcv关于多项式阶数的函数图像

10.5 正则化和偏差,方差

下图为bias和variance关于λ的方程

这是Jtrain和Jcv关于λ的图像

10.6 学习曲线

这是Jtrain和Jcv关于数据集数目m的图像

当你的机器模型出现high bias问题时,增加数据集的数目不会有太大帮助

这是Jtrain和Jcv关于数据集数目m的图像

当机器模型出现high variance问题时,由于模型对训练集拟合的很好,所以当数据集的数目增加时,Jtrain仍然很小,当m很小时,由于过拟合,Jcv会比较大,但是当m增加后,由于数据数目较大,过拟合的问题会减轻,所以Jcv会逐渐减小

10.7 第十节总结

当你的机器学习模型误差很大时,你该怎么办?

添加更多训练集for high variance尝试减小特征数量for high variance寻找其他特征for high bias添加多项式特征for high bias减小学习率λfor high bias增大学习率λfor high variance

对于神经网络模型,一般来说,使用大型的神经网络辅以正则化方法会表现得比小型神经网络好,缺点就是计算耗费较大

第十一节 机器学习系统设计

11.1 确定执行的优先级

这一小节没什么干货

11.2 误差分析

当我们要设计一个机器学习系统时,我们应该先尽快写出一个简单的机器学习算法,然后通过分析学习曲线来决定通过增加数据集大小,增加特征数量等方法来改进算法

误差分析:手动检查那些令机器学习算法失效的样本(在交叉验证集中寻找)

11.3 不对称性分类的误差评估

什么是不对称性分类?

即y=0和y=1的数量相差较大

以癌症预测或者分类为例,我们训练了一个逻辑回归模型h_\theta(x). 如果是癌症,y = 1, 其他则 y = 0。

在测试集上发现这个模型的错误率仅为1%(99%都分正确了),貌似是一个非常好的结果?

但事实上,仅有0.5%的病人得了癌症如果我们不用任何学习算法,对于测试集中的所有人都预测y = 0,既没有癌症

那么这个预测方法的错误率仅为0.5%,比我们废好大力气训练的逻辑回归模型的还要好。这就是一个不对称分类的例子,对于这样的例子,仅仅考虑错误率是有风险的。

因此,对于不对称性分类的评估,我们采用两个标准

Precision和RecallPrecision和Recall是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。

一般来说,Precision就是检索出来的条目(比如:文档、网页等)有多少是准确的,Recall就是所有准确的条目有多少被检索出来了

Precision=TruepositiveTruepositive+FalsepositivePrecision=\frac{True\ \ \ positive}{True\ \ \ positive+False\ \ \ positive}Precision=Truepositive+FalsepositiveTruepositive​

Recall=TruepositiveTruepositive+FalsenegtiveRecall=\frac{True\ \ \ positive}{True\ \ \ positive+False\ \ \ negtive}Recall=Truepositive+FalsenegtiveTruepositive​

11.4 Precision和Recall的权衡

有时候high precision和high recall不可兼得,这时候我们就得考虑

你是需要high precision,low recall还是low precision,high recall呢?

例如下图的癌症检测(分类),若只有当h(x)>=0.7时预测为1,那么这个模型属于high precision,low recall,即我们有很大把握时才告诉病人他得癌症了

若当h(x)>=0.3时就预测为1,那么这个模型属于low precision,high recall,即有一点可能性就告诉病人他得癌症了

其权衡曲线图如下图所示,当然曲线的形状由不同的算法决定

那么,通过precision和recall,我们要如何比较不同算法之间的优劣呢?

我们一般采用F1Score来评判算法的优劣

F1Score:2PRP+RF_{1}Score: 2\frac{PR}{P+R}F1​Score:2P+RPR​

11.5 机器学习数据

数据为王

未完待续

第十二节 Support Vector Machines

12.1 优化目标

以下先讨论线性SVM

我们知道logistic regression的cost方程为

cost=−(yloghθ(x)+(1−y)log(1−hθ(x)))cost=-(ylogh_{\theta}(x)+(1-y)log(1-h_{\theta}(x)))cost=−(yloghθ​(x)+(1−y)log(1−hθ​(x)))=−ylog11+e−θTx−(1−y)log(1−11+e−θTx)=-ylog\frac{1}{1+e^{-\theta^{T}x}}-(1-y)log(1-\frac{1}{1+e^{-\theta^{T}x}})=−ylog1+e−θTx1​−(1−y)log(1−1+e−θTx1​)

如下图所示,当y分别为1和0时,cost方程的图像如下图所示

我们将函数图像进行一些修改,变为洋红色的图像,即方程

cost1(z)和cost0(z)cost_{1}(z)和cost_{0}(z)cost1​(z)和cost0​(z)

有了这些定义后,我们就可以开始构建svm了

对于logistic regression,其代价函数为

minθ1m[∑i=1my(i)(−loghθ(x(i)))+(1−y(i))(−log(1−hθ(x(i))))]\mathop{min}\limits_{\theta}\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}(-logh_{\theta}(x^{(i)}))+(1-y^{(i)})(-log(1-h_{\theta}(x^{(i)})))]θmin​m1​[i=1∑m​y(i)(−loghθ​(x(i)))+(1−y(i))(−log(1−hθ​(x(i))))]

而对于SVM,其代价函数为

minθC∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+12∑i=1nθj2\mathop{min}\limits_{\theta}C\sum_{i=1}^{m}[y^{(i)}cost_{1}(\theta^{T}x^{(i)})+(1-y^{(i)})cost_{0}(\theta^{T}x^{(i)})]+\frac{1}{2}\sum_{i=1}^{n}\theta_{j}^{2}θmin​Ci=1∑m​[y(i)cost1​(θTx(i))+(1−y(i))cost0​(θTx(i))]+21​i=1∑n​θj2​

其中的修改就是将分母m去掉,参数λ改为C,原本的曲线函数换为洋红色函数

不同于logistic regression的hypothesis函数输出概率,SVM的hypothesis函数的输出为0或1

hθ(x)={1ifθTx>=00otherwiseh_{\theta}(x)=\begin{cases} 1\ \ \ if\ \ \theta^{T}x>=0\\ 0\ \ \ otherwise \end{cases}hθ​(x)={1ifθTx>=00otherwise​

12.2 直观上对大间隔的理解

我还没有完全理解,以后回来补充

以下为SVM的代价函数

当y=1时,此时的代价函数第一项为cost1(θTx(i))cost_1(\theta^Tx^{(i)})cost1​(θTx(i)),为了使代价函数最小,我们希望使θTx>=1\theta^Tx>=1θTx>=1,即第一项为0

同理,当y=0时,此时的代价函数第一项为cost2(θTx(i))cost_2(\theta^Tx^{(i)})cost2​(θTx(i)),为了使代价函数最小,我们希望使θTx<=−1\theta^Tx<=-1θTx<=−1,即第一项为0

(关于上面大于等于1,小于等于-1解释下,其实大于等于0,小于等于0就能够正确分类了,但是如果设置1,-1这样相当于把间隔又放大了,这样的话相当于对分类更加严格了,效果泛化能力相对较好些)

(以下活动发生在C非常大的情况)

如上图所言,下图所示,当我们为了使代价函数最小时,我们的优化目标就变为了12∑i=1nθj2\frac{1}{2}\sum_{i=1}^{n}\theta_j^221​∑i=1n​θj2​,第一项为0

SVM的约束条件为

{θTx>=1ify(i)=1θTx<=−1ify(i)=0\begin{cases} \theta^{T}x>=1\ \ \ if\ y^{(i)}=1\\ \theta^{T}x<=-1\ \ \ if\ y^{(i)}=0 \end{cases} {θTx>=1ify(i)=1θTx<=−1ify(i)=0​

如下图所示,图片中每根分隔线都满足约束条件

那么,SVM会选择哪一个超平面呢?

SVM会选择具有最大间隔(margin)的超平面,即上图中红色的超平面,因为它和样本之间具有最大的margin,因此意味着这个超平面具有最强的泛化能力(鲁棒性)

所谓支持向量就是距离超平面最近的样本点并且使上式等号成立(在下图中用红色标出)。而两个异类的支持向量到超平面的距离之和即为间隔(margin)

因此,从上图中能够得到间隔(margin)为:

γ=2∣∣θ∣∣\gamma=\frac{2}{||\theta||}γ=∣∣θ∣∣2​

而SVM的任务则是找到间隔最大的超平面,并且要满足y(i)(θTx+b)>=1y^{(i)}(\theta^Tx+b)>=1y(i)(θTx+b)>=1(这个约束条件是从上面的那个大括号那两个约束得来的,只不过把两个合写成了一个)的约束条件,即:

为了计算的方便,可以把上式改写为:

上式即为SVM代价函数的第二项

下面我们来看看C对决策界限的影响

当C非常大时(我们可以将C看作1/λ,即λ非常小时),SVM的决策边界会是洋红色的直线,当C正常时,SVM的决策边界为黑线(有点类似于过拟合)

引用链接

12.3 大间隔分类器的数学原理

为什么SVM是大间隔分类器呢?

对于u,v这两个向量(||u||代表向量u的长度)

uTv=vTu=p∗∣∣u∣∣=u1v1+u2v2u^{T}v=v^{T}u=p*||u||=u_{1}v_{1}+u_{2}v_{2}uTv=vTu=p∗∣∣u∣∣=u1​v1​+u2​v2​

其中p为向量v在向量u上的投影(p可以为负数

好了,有了以上数学基础,我们可以开始理解SVM的优化目标函数了

SVM的代价函数中有一项为

minθ12∑j=1nθj2=12(θ12+θ22)=12(θ12+θ22)2=12∣∣θ∣∣2\mathop{min}\limits_{\theta}\frac{1}{2}\sum_{j=1}^{n}\theta_{j}^{2}=\frac{1}{2}(\theta_{1}^{2}+\theta_{2}^{2})=\frac{1}{2}(\sqrt{\theta_{1}^{2}+\theta_{2}^{2}})^{2}=\frac{1}{2}||\theta||^{2}θmin​21​j=1∑n​θj2​=21​(θ12​+θ22​)=21​(θ12​+θ22​​)2=21​∣∣θ∣∣2

在优化的过程中,此项会使得θ的长度尽量小

SVM的优化目标函数为

{θTx>=1ify(i)=1θTx<=−1ify(i)=0\begin{cases} \theta^{T}x>=1\ \ \ if\ y^{(i)}=1\\ \theta^{T}x<=-1\ \ \ if\ y^{(i)}=0 \end{cases} {θTx>=1ify(i)=1θTx<=−1ify(i)=0​

我们将θ简化为θ_0=0,n=2的向量(θ_0=0代表θ直线过原点

由上一张图片的数学原理

θTx(i)<=>uTv\theta^{T}x^{(i)}<=>u^{T}vθTx(i)<=>uTv

故由下图坐标系图所示

θTx(i)=p(i)∗∣∣θ∣∣=θ1x1(i)+θ2x2(i)\theta^{T}x^{(i)}=p^{(i)}*||\theta||=\theta_{1}x_{1}^{(i)}+\theta_{2}x_{2}^{(i)}θTx(i)=p(i)∗∣∣θ∣∣=θ1​x1(i)​+θ2​x2(i)​

故SVM的优化目标函数可表示为

{p(i)∗∣∣θ∣∣>=1ify(i)=1p(i)∗∣∣θ∣∣<=−1ify(i)=0\begin{cases} p^{(i)}*||\theta||>=1\ \ \ if\ y^{(i)}=1\\ p^{(i)}*||\theta||<=-1\ \ \ if\ y^{(i)}=0 \end{cases} {p(i)∗∣∣θ∣∣>=1ify(i)=1p(i)∗∣∣θ∣∣<=−1ify(i)=0​

那么,为什么SVM是大间隔分类器呢?

SVM的优化目标函数为

{p(i)∗∣∣θ∣∣>=1ify(i)=1p(i)∗∣∣θ∣∣<=−1ify(i)=0\begin{cases} p^{(i)}*||\theta||>=1\ \ \ if\ y^{(i)}=1\\ p^{(i)}*||\theta||<=-1\ \ \ if\ y^{(i)}=0 \end{cases} {p(i)∗∣∣θ∣∣>=1ify(i)=1p(i)∗∣∣θ∣∣<=−1ify(i)=0​

由上述公式,如下图所示,当决策界限为左图所示时,由于θ向量与决策边界垂直,样本点在θ上的投影p较小,为了满足优化目标函数,所以||θ||较大

但是,SVM会尽可能地将||θ||优化到最小,所以SVM不会选择左图的决策界限

对于右图而言,样本点在θ上的投影p较大,为了满足优化目标函数,故|||θ||较小,故SVM会倾向于选择右图的决策界限,故SVM直观表现为大间隔分类器

接下来,我们会讨论如何使用SVM进行复杂的非线性分类

12.4 核函数1

通过核函数,我们可以利用SVM进行复杂的非线性分类

如下图所示,logistic regression可以采用多项式拟合的方法来进行分类

hθ(x)={1ifθ0+θ1x1+⋯>=00otherwiseh_\theta(x)=\begin{cases} 1\ \ \ if\ \theta_0+\theta_1x_1+\cdots >=0\\ 0\ \ \ otherwise \end{cases}hθ​(x)={1ifθ0​+θ1​x1​+⋯>=00otherwise​

多项式可表达为θ0+θ1f1+θ2f2+θ3f3+⋯\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3+\cdotsθ0​+θ1​f1​+θ2​f2​+θ3​f3​+⋯

其中f1=x1,f2=x2,f3=x1x2,⋯f_1=x_1,f_2=x_2,f_3=x_1x_2,\cdotsf1​=x1​,f2​=x2​,f3​=x1​x2​,⋯

除此之外,f函数还有没有更好的选择呢?

这里我们引入高斯核函数,即对于三个标记点,有

f1=similarity(x,l(1))=exp(−∣∣x−l(1)∣∣2σ2)f_1=similarity(x,l^{(1)})=exp(-\frac{||x-l^{(1)}||}{2\sigma^2})f1​=similarity(x,l(1))=exp(−2σ2∣∣x−l(1)∣∣​)

f2=similarity(x,l(2))=exp(−∣∣x−l(2)∣∣2σ2)f_2=similarity(x,l^{(2)})=exp(-\frac{||x-l^{(2)}||}{2\sigma^2})f2​=similarity(x,l(2))=exp(−2σ2∣∣x−l(2)∣∣​)

f3=similarity(x,l(3))=exp(−∣∣x−l(3)∣∣2σ2)f_3=similarity(x,l^{(3)})=exp(-\frac{||x-l^{(3)}||}{2\sigma^2})f3​=similarity(x,l(3))=exp(−2σ2∣∣x−l(3)∣∣​)

高斯核函数:f=k(x,l(i))f=k(x,l^{(i)})f=k(x,l(i))(即正态分布)

高斯核函数的特点就是

x越接近l(i)l^{(i)}l(i),f1f_1f1​越接近1x离l(i)l^{(i)}l(i)越远,f1f_1f1​越接近0

学过概率论与数理统计的都知道,σ2\sigma^2σ2代表标准差,即图像的凹凸程度

如下图所示的两个样本点,洋红色的点通过多项式计算大于0,故分为1类,靛蓝色的点则小于0,故分为0类

12.5 核函数2

我们已经知道如何利用landmark来进行复杂的非线性分类了

那么,我们如何得到这些landmark呢?

我们将训练集中的每个样本点都视为landmark

即对于样本点(x(i),y(i))(x^{(i)},y^{(i)})(x(i),y(i)),有l(i)=x(i)l^{(i)}=x^{(i)}l(i)=x(i),并且对于该样本点,还要将其转化为m行列向量f(i)f^{(i)}f(i)

其中f(i)=[f0(i)f1(i)⋮fm(i)]f^{(i)}= \begin{bmatrix} f_0^{(i)}\\ f_1^{(i)}\\ \vdots\\ f_m^{(i)}\\ \end{bmatrix}f(i)=⎣⎢⎢⎢⎢⎡​f0(i)​f1(i)​⋮fm(i)​​⎦⎥⎥⎥⎥⎤​且

f1(i)=similarity(x(i),l(1))f_1^{(i)}=similarity(x^{(i)},l^{(1)})f1(i)​=similarity(x(i),l(1))f2(i)=similarity(x(i),l(2))f_2^{(i)}=similarity(x^{(i)},l^{(2)})f2(i)​=similarity(x(i),l(2))⋮\vdots⋮fi(i)=similarity(x(i),l(i))=1f_i^{(i)}=similarity(x^{(i)},l^{(i)})=1fi(i)​=similarity(x(i),l(i))=1fm(i)=similarity(x(i),l(m))f_m^{(i)}=similarity(x^{(i)},l^{(m)})fm(i)​=similarity(x(i),l(m))

最后利用f(i)f^{(i)}f(i)对θ进行优化,代价函数为

minθC∑i=1m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+12∑i=1nθj2\mathop{min}\limits_{\theta}C\sum_{i=1}^{m}[y^{(i)}cost_{1}(\theta^{T}f^{(i)})+(1-y^{(i)})cost_{0}(\theta^{T}f^{(i)})]+\frac{1}{2}\sum_{i=1}^{n}\theta_{j}^{2}θmin​Ci=1∑m​[y(i)cost1​(θTf(i))+(1−y(i))cost0​(θTf(i))]+21​i=1∑n​θj2​

12.6 使用SVM

对于训练SVM,我们只需要考虑参数C核函数的选择,之后的优化就交给专业的库和软件包

对于特征数量n较大,数据集m较小的情况,一般使用无核(线性)SVM对于特征数量n较小,数据集m较大的情况,一般使用带有高斯核的SVM(此时需要考虑σ的选择)

注意:使用高斯核函数时要注意特征大小的规模

其他的核函数

对于多分类问题,SVM有很多成熟的库来解决

如果特征数量n相对于数据集数目m较大,一般使用LR模型或者无核SVM如何特征数目较小,数据集数目中等,一般使用带有高斯核的SVM如果特征数目较小,数据集数目较大,可以先加入更多的特征,再使用LR模型或者无核的SVM神经网络模型在以上各种情况的表现都不错,只是训练比较耗时

第十三节 非监督学习

聚类算法

监督学习的训练集是带标签数据

而无监督学习的训练集是不带标签的数据

这是非监督学习的一些应用

13.2 K-Means 算法

下图为K-Means算法的流程

K-means算法不断重复

遍历训练集,为每个点分配最近的cluster遍历每个cluster,将cluster移动到点集的中心

(如果有一个簇没有邻接点,一般会直接删除这个点)

对于那些分离度不是很高的簇,K-means算法也能够将其分为几个簇

13.3 优化目标

c(i)c^{(i)}c(i):样本点x(i)x^{(i)}x(i)所属的cluster的下标

uku_kuk​:第k个cluster

uc(i)u_{c^{(i)}}uc(i)​: 样本点x(i)x^{(i)}x(i)所属的cluster

K-means算法的代价函数,即失真函数(distortion cost fuction)

J(c(i),⋯,c(m),u1,⋯,uK)=1m∑i=1m∣∣x(i)−uc(i)∣∣2J(c^{(i)},\cdots,c^{(m)},u_1,\cdots,u_K)=\frac{1}{m}\sum_{i=1}^{m}||x^{(i)}-u_{c^{(i)}}||^2J(c(i),⋯,c(m),u1​,⋯,uK​)=m1​i=1∑m​∣∣x(i)−uc(i)​∣∣2 minc(i),⋯,c(m),u1,⋯,uKJ(c(i),⋯,c(m),u1,⋯,uK)\mathop{min}\limits_{c^{(i)},\cdots,c^{(m)},u_1,\cdots,u_K}J(c^{(i)},\cdots,c^{(m)},u_1,\cdots,u_K)c(i),⋯,c(m),u1​,⋯,uK​min​J(c(i),⋯,c(m),u1​,⋯,uK​)

我们知道K-means算法分为两步

遍历训练集,为每个点分配最近的cluster遍历每个cluster,将cluster移动到点集的中心

实际上,这两步可认为是

保持u1,⋯,uku_1,\cdots,u_ku1​,⋯,uk​不变,minimizec(1),⋯,c(m)c^{(1)},\cdots,c^{(m)}c(1),⋯,c(m)保持c(1),⋯,c(m)c^{(1)},\cdots,c^{(m)}c(1),⋯,c(m)不变,minimizeu1,⋯,uku_1,\cdots,u_ku1​,⋯,uk​

对应下图

13.4 随机初始化
K应小于训练集数目m随机选择K个样本点将这K个样本点设为cluster

不同的初始化状态会影响聚类的结果(局部最优解)

下图为K-means算法可能得到的几种结果,包括局部最优解的情况

于是,为了解决由于初始状态不同导致不能找到全局最优解的问题,我们会多次运行K-means算法,并将失真值最小的作为最终结果

(注意:当K值很大时,即我们想要找到成百上千个cluster时,往往不需要多次进行K-means算法,可能第一次就能有不错的结果)

13.5 选取聚类数量

所以我们该如何选择K值呢?

一个方法时Elbow method,即画出失真值与K值的关系图像,选择拐点处的K值

当然,该图像也有可能是平滑的,不存在拐点

K值得选择还需要结合实际情况,不同的实际目的对应着不同的K值选择

第十四节 Dimensionality Reduction(降维)

14.1 目标一:数据压缩

如下图所示,所谓降维,就是减少冗余的维数(如果两个特征高度耦合

降维有两个好处

减小内存的消耗加快算法的运行

下图为2维数据降维到1维,引入了一个一维向量 zzz

下图为三维数据降维到二维,引入了两个二维向量z1z_1z1​和z2z_2z2​

14.2 目标二:可视化

降维还有一个用处,就是将将高维空间降到1,2,3维度的空间,以方便人们进行可视化分析

下图为各个国家的特征,足足有50多个特征

我们可以将其降维到2维

这样我们就可以进行可视化分析了

14.3 主成分分析问题规划1(PCA)

PCA(principal components analysis)主成分分析是一种降维算法

PCA算法的原理:如果想要将n维的数据降维到k维,就需要寻找k个向量,这k个向量要满足所有样本点在这k个向量张开的子空间的投影误差和的平方最小,投影误差即样本点到子空间的距离

那么,PCA算法在二维数据投影到一维的情况下与线性回归有什么联系吗?

事实上PCA算法不是线性回归,有以下两个原因

如下图所示,线性回归要使得∑i=1m(hθ(xi)−yi)2\sum_{i=1}^{m}(h_\theta(x_i)-y_i)^2∑i=1m​(hθ​(xi​)−yi​)2最小,在图像上看,所左图所示,蓝线是垂直于x轴的。而对于PCA,如右图所示,蓝线是垂直于红线的(这个条件我没怎么搞懂),对于线性回归,是要用所有x来训练模型以预测y,但是在PCA中,所有特征都是平等的,没有特殊的特征需要预测

14.4 主成分分析问题规划2(PCA)

进行PCA之前,我们需要先对数据进行预处理

特征缩放均值归一化(确保每个特征的均值为0

(类似于正态分布的标准化)

PCA算法的关键就是寻找那k个向量,即下图所示的z1z_1z1​,z=[z1z2]z=\begin{bmatrix}z_1\\z_2\end{bmatrix}z=[z1​z2​​]

为了得到这k个向量,我们需要两个步骤

计算样本集的协方差矩阵,Σ=1m∑i=1n(x(i))(x(i))T\Sigma=\frac{1}{m}\sum_{i=1}^{n}(x^{(i)})(x^{(i)})^TΣ=m1​∑i=1n​(x(i))(x(i))T再对Σ\SigmaΣ进行奇异值分解(singular value decomposition),即[U,S,V]=svd(Σ\SigmaΣ)得到矩阵U=[⋮⋮⋮⋮u(1)u(2)u(3)⋯u(m)⋮⋮⋮⋮]U=\begin{bmatrix} \vdots&\vdots&\vdots&\ &\vdots\\ u^{(1)}&u^{(2)}&u^{(3)}&\cdots&u^{(m)}\\ \vdots&\vdots&\vdots&\ &\vdots\\ \end{bmatrix}U=⎣⎢⎢⎡​⋮u(1)⋮​⋮u(2)⋮​⋮u(3)⋮​⋯​⋮u(m)⋮​⎦⎥⎥⎤​,取前k列得到u(1),⋯,u(k),即Ureduceu^{(1)},\cdots,u^{(k)},即U_{reduce}u(1),⋯,u(k),即Ureduce​

Ureduce=[⋮⋮⋮u(1)u(2)⋯u(k)⋮⋮⋮]U_{reduce}=\begin{bmatrix} \vdots&\vdots&\ &\vdots\\ u^{(1)}&u^{(2)}&\cdots&u^{(k)}\\ \vdots&\vdots&\ &\vdots\\ \end{bmatrix}Ureduce​=⎣⎢⎢⎡​⋮u(1)⋮​⋮u(2)⋮​⋯​⋮u(k)⋮​⎦⎥⎥⎤​

UreduceU_{reduce}Ureduce​即为那k个向量

最后,通过计算Z=UreduceTx(i)Z=U_{reduce}^Tx^{(i)}Z=UreduceT​x(i)

即Z=[⋮⋮⋮u(1)u(2)⋯u(k)⋮⋮⋮]Tx(i)Z=\begin{bmatrix} \vdots&\vdots&\ &\vdots\\ u^{(1)}&u^{(2)}&\cdots&u^{(k)}\\ \vdots&\vdots&\ &\vdots\\ \end{bmatrix}^Tx^{(i)}Z=⎣⎢⎢⎡​⋮u(1)⋮​⋮u(2)⋮​⋯​⋮u(k)⋮​⎦⎥⎥⎤​Tx(i)

得到了Z(k∗1)∈RkZ(k*1)\in R^kZ(k∗1)∈Rk,即为样本点的投影(z(i)z^{(i)}z(i))

这样我们就可以进行降维了

14.5 主成分数量选择

PCA算法可以删除冗余的特征,将数据由高维降到低维,但是,为了保留99%以上的数据方差(降维会损失方差),我们该如何选择合适的k呢?

如下图所示

平均投影误差的平方:1m∑i=1m∣∣x(i)−xapprox(i)∣∣2\frac{1}{m}\sum_{i=1}^{m}||x^{(i)}-x_{approx}^{(i)}||^2m1​∑i=1m​∣∣x(i)−xapprox(i)​∣∣2数据总方差:1m∑i=1m∣∣x(i)∣∣2\frac{1}{m}\sum_{i=1}^{m}||x^{(i)}||^2m1​∑i=1m​∣∣x(i)∣∣2

我们的评估标准为

1m∑i=1m∣∣x(i)−xapprox(i)∣∣21m∑i=1m∣∣x(i)∣∣2≤0.01(1%)\frac{\frac{1}{m}\sum_{i=1}^{m}||x^{(i)}-x_{approx}^{(i)}||^2}{\frac{1}{m}\sum_{i=1}^{m}||x^{(i)}||^2}\le0.01(1\%)m1​∑i=1m​∣∣x(i)∣∣2m1​∑i=1m​∣∣x(i)−xapprox(i)​∣∣2​≤0.01(1%)

此评估标准意味着99%的方差被保留了

那么,如何通过此评估标准得到最合适的k呢?

原始算法

如下图中左图所示,迭代k=1到k=m-1,重复计算z(i)z^{(i)}z(i)和xapprox(i)x_{approx}^{(i)}xapprox(i)​,再确定评估标准是否≤0.01,迭代至满足条件

由于原始算法计算过多,故增加改进算法

改进算法

通过svd函数得到对角矩阵S=[S11S22S33⋱Snn]S=\begin{bmatrix} S_{11}\\ \ &S_{22}\\ \ &\ &S_{33}\\ \ &\ &\ &\ddots\\ \ &\ &\ &\ & S_{nn} \end{bmatrix}S=⎣⎢⎢⎢⎢⎡​S11​​S22​​S33​​⋱​Snn​​⎦⎥⎥⎥⎥⎤​

评估标准为:1−∑i=1kSii∑i=1mSii≤0.011-\frac{\sum_{i=1}^{k}S_{ii}}{\sum_{i=1}^{m}S_{ii}}\le0.011−∑i=1m​Sii​∑i=1k​Sii​​≤0.01

于是改进算法只需要迭代k,并计算评估函数即可

参考链接

14.6 压缩重现

我们可以将高维数据降维到低维,那么我们可以将这些低维数据重新变为高维数据吗?

这就叫原始数据的重构(reconstruction from compressed representation)

通过上几节我们知道,PCA算法的过程为

求 Σ=1m∑i=1n(x(i))(x(i))T\Sigma=\frac{1}{m}\sum_{i=1}^{n}(x^{(i)})(x^{(i)})^TΣ=m1​∑i=1n​(x(i))(x(i))T再对Σ\SigmaΣ进行奇异值分解(singular value decomposition),即[U,S,V]=svd(Σ\SigmaΣ)得到矩阵U=[⋮⋮⋮⋮u(1)u(2)u(3)⋯u(m)⋮⋮⋮⋮]U=\begin{bmatrix} \vdots&\vdots&\vdots&\ &\vdots\\ u^{(1)}&u^{(2)}&u^{(3)}&\cdots&u^{(m)}\\ \vdots&\vdots&\vdots&\ &\vdots\\ \end{bmatrix}U=⎣⎢⎢⎡​⋮u(1)⋮​⋮u(2)⋮​⋮u(3)⋮​⋯​⋮u(m)⋮​⎦⎥⎥⎤​,取前k列得到u(1),⋯,u(k)u^{(1)},\cdots,u^{(k)}u(1),⋯,u(k),即矩阵UreduceU_{reduce}Ureduce​最后通过计算得到 z=UreduceTxz=U_{reduce}^Txz=UreduceT​x

我们知道xapprox(i)x_{approx}^{(i)}xapprox(i)​是x(i)x^{(i)}x(i)的近似

为了实现原始数据的重构,即z∈R→x∈R2z\in R \rightarrow x\in R^2z∈R→x∈R2

可通过公式xapprox(i)=Ureducez(i),xapprox(i)≈x(i)x_{approx}^{(i)}=U_{reduce}z^{(i)},x_{approx}^{(i)}\approx x^{(i)}xapprox(i)​=Ureduce​z(i),xapprox(i)​≈x(i)

如下图所示

应用PCA的建议

PCA的一大妙用就是给数据集降维,提升算法执行的效率,如下图所示,在监督学习中,我们可以应用PCA算法,先从训练集(x(i),y(i))(x^{(i)},y^{(i)})(x(i),y(i))中筛选出x(i)x^{(i)}x(i),然后通过PCA算法x(i)∈R10000→z(i)∈R1000x^{(i)}\in R^{10000} \rightarrow z^{(i)} \in R^{1000} x(i)∈R10000→z(i)∈R1000得到新的训练集(z(i),y(i))(z^{(i)},y^{(i)})(z(i),y(i))

注意,x(i)→z(i)x^{(i)} \rightarrow z^{(i)}x(i)→z(i)这个映射应该在训练集中通过运行PCA算法时确定,然后才可以应用到交叉验证集,测试集中

PCA的主要应用

压缩 减小存储数据所需的内存或硬盘储存提升算法运行效率和速度 可视化

用PCA算法来防止过拟合是一种不好的用法 PCA算法使用的数据集是无标签的,降维后可能会损失一些重要信息如果使用PCA算法但是保留99%或95%的数据方差,这样对过拟合问题也会有一点好处,但是这里更推荐使用正则化方法来防止过拟合

只有当x(i)x^{(i)}x(i)满足不了机器学习任务时,才进行PCA,使用z(i)z^{(i)}z(i)完成任务

第十五节 异常检测(anomaly detection)

15.1 问题动机

异常检测就是给定一个无标签数据集,其中每个数据都由数个特征组成,通过这些数据得到一个模型P(x)P(x)P(x),来预测新输入的数据xtestx_{test}xtest​是否异常

如下图所示,类似于正态分布

P(xtest)<ϵ→flaganomalyP(x_{test})< \epsilon \rightarrow flag\ anomalyP(xtest​)<ϵ→flaganomaly

P(xtest)≥ϵ→OKP(x_{test})\ge \epsilon \rightarrow OKP(xtest​)≥ϵ→OK

下面是异常检测算法的一些应用例子

fraud检测飞机引擎制造数据中心对服务器的监管

15.3 算法

训练集的每个元素都相互独立,且都满足参数不同的正态分布

故异常检测模型p(x)=∏j−1np(xj;μj;σj)p(x)=\prod_{j-1}^{n}p(x_j;\mu_j;\sigma_j)p(x)=∏j−1n​p(xj​;μj​;σj​)

即多元正态分布

如下图所示的二元高斯分布,ϵ\epsilonϵ为图像的高度,即概率值

15.4 开发和评估异常检测系统

我们使用无标签数据拟合异常检测模型

再用带标签数据作为交叉验证集和测试集来对模型进行评估

下图为飞机引擎的异常检测模型的例子

异常检测流程

根据训练集x(1),⋯,x(m)x^{(1)},\cdots,x^{(m)}x(1),⋯,x(m),拟合出异常检测模型p(x)p(x)p(x)

然后再交叉验证集/测试集中,预测

y={1ifp(x)<ϵ(anormaly)0ifp(x)≥ϵ(normal)y=\begin{cases} 1\ \ if\ p(x)<\epsilon (anormaly)\\ 0\ \ if\ p(x) \ge\epsilon (normal)\\ \end{cases}y={1ifp(x)<ϵ(anormaly)0ifp(x)≥ϵ(normal)​

评估算法,根据交叉验证集选择参数ϵ\epsilonϵ

评估算法

那么,我们要如何评估这个异常检测算法呢?

由于我们的数据十分倾斜(normal的数据远大于anormal的数据),所以我们不能使用准确率来衡量算法的好坏

我们可以采用

真阳性,假阳性,假阴性,真阴性Precision/RecallF1−scoreF_1-scoreF1​−score

这三个个指标来衡量算法的好坏

我们也可以使用交叉验证集的方法,通过学习曲线来选择ϵ\epsilonϵ

15.5 异常检测 vs 监督学习

监督学习和异常检测这两种算法存在一定的相似度

当我们拥有的数据集是偏斜的,那么我们可以使用异常检测算法;当正例和反例差不多时,我们可以选择监督学习。

使用异常检测算法时

阳性样本的数量非常少有大量阴性样本异常的种类非常多,很难从阳性样本中知道异常会是什么样的未来可能出现的新的异常可能和已知的异常样本完全不同

使用监督学习时

有大量的阳性样本和阴性样本有足够的阳性样本让算法深入了解阳性样本,新的阳性样本应该与训练集中的样本较为相似

15.6 选择要使用的功能

当特征不满足高斯分布时,我们可以通过开方和取对数等方法来使特征尽可能满足高斯分布

x1←log(x1)x_1\leftarrow log(x_1)x1​←log(x1​)x2←log(x2+c)x_2\leftarrow log(x_2+c)x2​←log(x2​+c)x3←x312x_3\leftarrow x_3^{\frac{1}{2}}x3​←x321​​

异常检测的误差分析

对于正常样本x,我们希望p(x)较大

对于异常样本呢x,我们希望p(x)较小

但是异常检测有个很常见的问题

对于正常和异常样本,p(x)都很大

如下图所示,绿色叉号的p(x)较大,但是是异常样本,我们的异常检测算法无法将其检测出来,于是我们就要专门研究这个异常样本,inspire出一个新特征x2,使得样本分布如右图所示,这样算法就能检测出异常样本了

以监管数据中心的服务器为例子

构造新特征时,要构造在发生异常时数值特别大或特别小的特征

如下图所示,当cpu发生死循环时,cpu load会很大,但是network traffic处于正常范围,那么我们可以构造新特征x5=cpuoadnetworktrafficx_5=\frac{cpu \ oad}{network\ traffic}x5​=networktrafficcpuoad​或x5=(cpuload)2networktrafficx_5=\frac{(cpu \ load)^2}{network\ traffic}x5​=networktraffic(cpuload)2​

当发生cpu死循环这个异常时,由于x5这个特征很大或很小,我们的异常检测算法可以轻易的发现这个异常

15.7 多变量高斯分布

对于一些数据集,如果它们地特征相关性较高,其分布可能会呈椭圆形,如下图所示

而这样的样本分布,我们不能单独地建立p(x1),p(x2),⋯p(x_1),p(x_2),\cdotsp(x1​),p(x2​),⋯这样地异常检测模型,我们应该建立多元高斯分布的异常检测模型

此模型参数为μ∈Rn,Σ∈Rn∗n(协方差矩阵)\mu\in R^n,\Sigma\in R^{n*n}(协方差矩阵)μ∈Rn,Σ∈Rn∗n(协方差矩阵)

p(x;μ,Σ)=1(2π)n2∣Σ∣12exp(−12(x−μ)TΣ−1(x−μ))p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))p(x;μ,Σ)=(2π)2n​∣Σ∣21​1​exp(−21​(x−μ)TΣ−1(x−μ))

下面是多元高斯分布参数对图像的影响

15.8 使用多变量高斯分布的异常检测

对于多元高斯分布

其参数为μ∈Rn,Σ∈Rn∗n(协方差矩阵)\mu\in R^n,\Sigma\in R^{n*n}(协方差矩阵)μ∈Rn,Σ∈Rn∗n(协方差矩阵)

模型为:p(x;μ,Σ)=1(2π)n2∣Σ∣12exp(−12(x−μ)TΣ−1(x−μ))p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))p(x;μ,Σ)=(2π)2n​∣Σ∣21​1​exp(−21​(x−μ)TΣ−1(x−μ))

参数拟合

给定一组训练集x(1),x(2),⋯,x(m)x^{(1)},x^{(2)},\cdots,x^{(m)}x(1),x(2),⋯,x(m),拟合参数

μ=1m∑i=1mx(i)Σ=1m∑i=1m(x(i)−μ)(x(i)−μ)T\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μ=m1​∑i=1m​x(i)Σ=m1​∑i=1m​(x(i)−μ)(x(i)−μ)T

原始模型和多元高斯分布模型的区别

我们知道,对于原始的模型,其概率函数为

p(x)=∏j−1np(xj;μj;σj)p(x)=\prod_{j-1}^{n}p(x_j;\mu_j;\sigma_j)p(x)=j−1∏n​p(xj​;μj​;σj​)

对于多元高斯分布模型,其概率函数为

p(x;μ,Σ)=1(2π)n2∣Σ∣12exp(−12(x−μ)TΣ−1(x−μ))p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))p(x;μ,Σ)=(2π)2n​∣Σ∣21​1​exp(−21​(x−μ)TΣ−1(x−μ))

根据概率论的知识,我们知道原始模型函数成立的前提是各特征相互独立

所以原始模型的特征不相关,是多元高斯分布的一种特例

原始模型的特点

需要手动创造一些新的特征来检测一些特殊的异常,例如cpu死循环的异常,就需要构建x3=x12x2=cpuload2networktrafficx_3=\frac{x_1^2}{x_2}=\frac{cpu\ load^2}{network\ traffic}x3​=x2​x12​​=networktrafficcpuload2​计算成本较低即使样本很小异常检测算法也能表现得很好

多元高斯分布得特点

会自动捕捉那些相关性较强的特征计算成本较高训练集的数量m必须大于特征的数量n,否则协方差矩阵Σ\SigmaΣ不可逆不能有冗余特征,即特征之间线性无关,否则协方差矩阵Σ\SigmaΣ不可逆

第十六节 推荐系统(Recommender Systems)

16.1 问题规划

推荐系统的任务就是给用户未看过的电影预测评分并推荐给用户

16.2 基于内容的推荐算法

一些符号标记

r(i,j)=1r(i,j)=1r(i,j)=1代表用户j评价了电影i,否则=0y(i,j)y^{(i,j)}y(i,j)用户j给电影i的评分θ(j)\theta^{(j)}θ(j)用户j的参数向量x(i)x^{(i)}x(i)电影i的特征向量(θ(j))T(x(i))(\theta^{(j)})^T(x^{(i)})(θ(j))T(x(i))算法预测,用户j对电影i的评分m(j)m^{(j)}m(j)用户j评价过的电影数量

我们采用类似于线性回归的方法来拟合用户参数θ(j)\theta^{(j)}θ(j)(梯度下降算法)

对于单个参数θ(j)\theta^{(j)}θ(j)的学习

minθ(j)12∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑k=1n(θk(j))2\mathop{min}\limits_{\theta^{(j)}} \frac{1}{2}\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^{n}(\theta_k^{(j)})^2θ(j)min​21​i:r(i,j)=1∑​((θ(j))Tx(i)−y(i,j))2+2λ​k=1∑n​(θk(j)​)2

对于多个参数θ(1),θ(2),⋯,θ(nu)\theta^{(1)},\theta^{(2)},\cdots,\theta^{(n_u)}θ(1),θ(2),⋯,θ(nu​)的学习

minθ(1),⋯,θ(nu)12∑j=1nu∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑j=1nu∑k=1n(θk(j))2\mathop{min}\limits_{\theta^{(1)},\cdots,\theta^{(n_u)}} \frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2θ(1),⋯,θ(nu​)min​21​j=1∑nu​​i:r(i,j)=1∑​((θ(j))Tx(i)−y(i,j))2+2λ​j=1∑nu​​k=1∑n​(θk(j)​)2

下面是推荐算法的梯度下降过程

16.3 协同过滤

collaborative fittering algorithm

每个用户都在帮助算法更好地进行特征学习

协同过滤的过程即

随机初始化用户喜好θ\thetaθ,用以估计每部电影的评分xxx根据电影评分来估计用户的喜好θ\thetaθ再根据用户的喜好来估计电影的评分xxx重复2,3过程

16.4 协同过滤算法

我们之前讨论l协同过滤算法的过程,我们分别利用两个公式(类似于线性回归算法)来估计θ(用户参数)和x(电影参数)

而现在我们可以将这两个公式合为一个公式

J(x(1),⋯,x(nm),θ(1),⋯,θ(nu))=12∑(i,j):r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑j=1nu∑k=1n(θk(j))2+λ2∑i=1nm∑k=1n(xk(i))2J(x^{(1)} ,\cdots,x^{(n_m)},\theta^{(1)},\cdots,\theta^{(n_u)})=\frac{1}{2}\sum_{(i,j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_k^{(i)})^2J(x(1),⋯,x(nm​),θ(1),⋯,θ(nu​))=21​(i,j):r(i,j)=1∑​((θ(j))Tx(i)−y(i,j))2+2λ​j=1∑nu​​k=1∑n​(θk(j)​)2+2λ​i=1∑nm​​k=1∑n​(xk(i)​)2

利用这个公式同时预测x和θ

下面就是协同过滤算法的流程

先将参数x和θ随机初始化为较小的值然后利用梯度下降法或者其他优化算法来最小化J(x(1),⋯,x(nm),θ(1),⋯,θ(nu))J(x^{(1)} ,\cdots,x^{(n_m)},\theta^{(1)},\cdots,\theta^{(n_u)})J(x(1),⋯,x(nm​),θ(1),⋯,θ(nu​))然后对于一个参数为θ的用户,一部参数为x的电影,我们可以预测这部电影的评分为θTx\theta^TxθTx

16.5 矢量化:低秩矩阵分解

低秩矩阵分解,这是向量化算法的关键

寻找相似电影

对于每一部电影i,都对应着一个特征向量x(i)∈Rnx^{(i)}\in R^nx(i)∈Rn

我们采用指标∣∣x(j)−x(j)∣∣||x^{(j)}-x^{(j)}||∣∣x(j)−x(j)∣∣来衡量电影i和j的相似度

16.6 实施细节:均值规范化(类似于正态分布的标准化

Y为评分矩阵,其中行为电影参数,列为用户参数

有的时候会出现数据缺失,如下图所示,Eve这个人没有给任何电影评分

这样会导致我们在预测她给电影打分时,预测的所有分数都为0,这样的数据时毫无用处的

因此,我们得对数据进行预处理,即均值归一化

计算出每一行的平均值,然后这一行的每个数据都减去平均值,即完成均值归一化

原本我们预测的分数为(θ(i))T(x(i))(\theta^{(i)})^T(x^{(i)})(θ(i))T(x(i)),均值归一化后变为(θ(i))T(x(i))+μi(\theta^{(i)})^T(x^{(i)})+\mu_i(θ(i))T(x(i))+μi​

那么对于数据缺失的用户来说,其预测评分即为平均值

第十七节 大数据集学习(Large Scale Machine Learning)

17.1 学习大数据集

数据为王

有的时候算法可能不是最主要的,数据有时候更重要,如下图所示,当数据量足够大时,算法之间的优劣性相差不大

于是,对于大规模数据集的机器学习,有时候我们可以先用小规模的数据集来进行学习,并利用训练集和交叉验证集来绘制学习曲线,观察我们的模型是属于高偏差问题还是高方差问题,如下图所示,然后再决定是否使用大数据集

17.2 随机梯度下降

我们知道,(个人理解)机器学习的问题其实就是找到代价函数,然后使代价函数尽可能地小,使得我们地模型可以很好地拟合数据,并预测新数据,对于(Batch gradient descent),其每次迭代都使用所有的数据集,故对于大规模数据集表现较差

下图为Batch梯度下降和随机梯度下降的算法流程

Batch梯度下降每次迭代都是走的最优的一步,而随机梯度下降由于每次迭代只使用一个数据,故下降的每一步不是最优的

其下降路径为弯弯曲曲的折线,但是多次迭代后,其肯定可以达到全局最优解附近

17.3 Mini-Batch梯度下降

每个梯度下降算法之间的区别为

Batch 梯度下降:每次迭代都使用全部数据集随机梯度下降:每次迭代只使用一个数据Mini-batch 梯度下降: 每次迭代使用b个数据

Mini-batch 梯度下降算法的流程如下图所示,每b个数据进行一次梯度下降,然后重复多次

17.4 随机梯度下降收敛

每1000个样本点绘制一个点得到的cost-NO of iterations图像如下图所示,有四种情况

如图一所示,一般来说,由于随机梯度下降每遍历一个数据就迭代一次,故每隔100个数据就绘制一个cost值点通常如下图蓝线所示,如果减小学习率α,可能会如红线所示,cost值收敛得更小

如图2所示,蓝线为正常情况,红线为每隔5000个样本点绘制一个cost值,可以看见红线更为平滑

如图3所示,我们可以看到蓝线在一个水平线上不断振荡,这是由于绘制cost值时隔得样本点太少,噪声太多,当增大间隔样本时,曲线如红线所示,可以看出cost值的趋势还是减小的,当再度增大间隔样本时,曲线可能就如洋红色曲线所示,基本不变

如图4所示,cost值增大的情况可能是梯度下降算法发散了,这时我们需要减小学习率α

为了使算法更好的下降到最小值,我们可以根据迭代次数来逐渐减小学习率α

α=const1iterationNumber+const2\alpha=\frac{const1}{iterationNumber+const2}α=iterationNumber+const2const1​

17.5 在线学习

在线学习抛弃了数据集这个概念,每新得到一个数据,就会对参数θ进行一次更新

在线学习和随机梯度下降法很相似,都是根据一个数据迭代一次,只不过在线学习没有固定的数据集

在线学习的优点是,根据新输入的数据的变化,其假设函数所预测的东西也在变化

17.6 减少映射和数据并行

完结撒花

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。