【强推】吴恩达机器学习(已完结)
2023-08-08 21:13:27 0 举报
AI智能生成
机器学习是目前信息技术中最激动人心的方向之一。以吴恩达老师的机器学习课程为主线,使用Process On 在线绘图构建机器学习的思维导图。
作者其他创作
大纲/内容
Database mining
NPL(Natural Language Progressing)
CV(Computer Vision)
Applications can't program by hand
self-customizing programs
Welcome
Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.
无监督学习(Unsupervised Learning)
监督学习(Supervised Learning)
强化学习(Reinforcement learning)
推荐系统(Recommender systems)
ML algorithms
Machine Learning definition
definition: \"right answers\" given
回归(Regression):Predict continuous valued output
分类(Classification):Discrete valued output
聚类(Clustering)
引言(Introduction)
模型表示
the number of the training examples
Hypothesis:
Parameters:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
Squared error function:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
求 span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
代价函数(cost function)
repeat until convergence {span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
:学习率(learning rating)
span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
批量梯度下降算法(batch gradient descent algorithm)
梯度下降的线性回归
梯度下降(Gradient Descent)
单变量线性回归(Linear Regression with One Variable)
支持多变量的假设:
令:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
则:
引入 ,则假设变为:
多维特征
代价函数:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
批量梯度下降算法
多变量梯度下降
多维特征问题,为了让梯度下降算法更快地收敛,要保证这些特征都具有相近的尺度。(归一化)
特征缩放(Feature Scaling)
过小,达到收敛时所需要的迭代次数就非常多,收敛缓慢
过大,可能会越过最小值而造成代价函数的值越来越大,最终导致发散
尝试这些学习率 (3倍)
学习率(Learning Rate)
梯度下降法实践
线性回归不适用的场合,需要曲线来适应数据
采用多项式回归模型,在使用梯度下降算法时,特征缩放很有必要
特征和多项式回归
本质:代数方法,求函数最小值
求解 时的 值,这个 使得代价函数的值最小
训练集特征矩阵为 (包含 ),训练结果为向量 ,则利用正规方程解出向量
与梯度下降比较
1. 训练集有多余的特征,即特征之间存在着线性关系,导致特征矩阵 不满秩
2. n(特征数量)相较于m(样本数量)过大,导致其产生的齐次方程组不只有零解
不可逆性原因
正规方程(Normal Equation)
多变量线性回归(Linear Regression with Multiple Variables)
如果要预测的变量是离散的值,可以使用逻辑回归
二元分类,要预测的变量非0即1,逻辑回归算法的输出值在0到1之间
分类(Classification)
逻辑回归模型假设(分类器):
其中, 代表特征向量, 代表逻辑函数(logistic function)Sigmoid function 。
作用是对于给定的输入变量,根据选择的参数计算输出变量=1的可能性,即 span class=\"equation-text\" contenteditable=\"false\" data-index=\"1\" data-equation=\
假设表示
这张图的判定边界就是所示的圆
分界线,用适合的模型将数据分隔
判定边界
用来拟合参数的优化目标,即如何拟合(choose)逻辑回归模型的参数 。
简化 span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
逻辑回归代价函数:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
简化的Cost()代入代价函数得:
与线性回归的算法不一样,这里的
梯度下降法求代价函数最小值
代价函数
共轭梯度法 BFGS(变尺度法)
L-BFGS(限制变尺度法)
高级优化(代数方法,类似于线性回归中的正规方程)
得到三个分类器,输入 ,选择一个让 最大的
子主题
多类别分类:一对多
逻辑回归(Logistic Regression)
回归中过拟合
分类中过拟合
丢弃一些不能帮助我们正确预测的特征
正则化:保留所有的特征,减小参数(特征变量前的系数)的大小
解决方法
过拟合(over-fitting)问题
:正则化参数(Regularization Parameter)
正则化参数过大,导致所有的参数最小化,模型可能会变成 ,欠拟合(红色直线)
不进行正则化,过拟合(蓝色曲线)
代价函数
正则化后梯度下降算法:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
梯度下降法求解
,其中矩阵为
正规方程求解
正则化线性回归
梯度下降算法形式与线性回归类似,但是 ,与线性回归不同
不参与其中的任何正则化
代价函数模型:
正则化逻辑回归
正则化(Regularization)
非线性的多项式可以建立更好的分类模型
特征太多(万数量级),普通的逻辑回归不能有效处理,这时需要神经网络
非线性假设
大脑中的神经网络
偏差单元 span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
激活单元:
输出:
向量表示
神经网络模型建立在很多神经元之上,每个神经元又是一个学习模型。这些神经元(又叫激活单元,activation unit)采纳一些特征作为输入,并根据本身的模型作为输出。
很像 Logistic Regression。可以把 span class=\"equation-text\" contenteditable=\"false\" data-index=\"1\" style=\"\" data-equation=\
模型表示
AND
OR
逻辑运算 AND OR
XNOR(XNOR = ( AND ) OR (NOT) AND (NOT)
直观理解
出现不只有两种分类的情况
假设有四种分类,则输出层应有四个值 ,且 span class=\"equation-text\" contenteditable=\"false\" data-index=\"1\" style=\"\" data-equation=\
输出四种可能形式: span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
多元分类
神经网络:表述(Neural Networks:Representation)
假设神经网络的训练样本有 个,每个包含一组输入 和一组输出 , 表示神经网络的层数, 表示第 层神经元的个数, 表示最后一层神经元的个数
二类分类: 表示分到哪一类
类分类: 表示被分到第 类(2\")
神经网络分类
分类 cost function:
代价函数
最后一层误差: ,前一层误差:
不做任何正则化处理时:
𝑙 代表目前所计算的是第几层。 𝑗 代表目前计算层中的激活单元的下标,也将是下一层的第 𝑗 个输入变量的下标。 𝑖 代表下一层中误差单元的下标,是受到权重矩阵中第𝑖行影响的下一层中的误差单元的下标。
首先计算出最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层
直观理解
利用反向传播算法算出梯度下降的方向
反向传播算法(Backpropagation Algorithm)
对神经网络使用梯度算法时,可能会出现代价看上去在不断减小,但最终的结果可能并不是最优解。
为了避免这样的问题,采用梯度的数值检验(Numerical Gradient Checking) 方法,通过估计梯度值来检验我们计算的导数值是否真的是我们要求
代价函数上沿着切线方向选择离两个非常近的点,计算两个点的平均值来估计梯度
梯度检验(Gradient Checking)
如果我们令所有的初始参数都为 0,那么第二层的所有激活单元都会有相同的值
通常初始参数(权重)为正负 之间的随机值。假设我们要随机初始一个尺寸为10x11的参数矩阵,代码
随机初始化(Random Initialization)
第一层的单元数即我们训练集的特征数量
最后一层的单元数是我们训练集的结果的类的数量
如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数 越多越好
网络结构
1. 参数(权重)的随机初始化
2. 利用正向传播方法计算所有的
3. 编写计算代价函数 𝐽 的代码
4. 利用反向传播方法计算所有偏导数
5. 利用数值检验方法检验这些偏导数
6. 使用优化算法来最小化代价函数
训练步骤
小结
神经网络:学习(Neural Networks:Learning)
1.尝试减少特征的数量
2.尝试获得更多的特征
3.尝试增加多项式特征
4.尝试减少正则化程度𝜆
5.尝试增加正则化程度𝜆
运用训练好了的模型来预测未知数据的时候发现有较大的误差
不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。
决定下一步做什么
评估假设函数是否过拟合
通常用70%的数据作为训练集,用剩下 30%的数据作为测试集
线性回归模型,利用训练集数据计算代价函数 ,并最小化得到参数 。将得到的参数 代入测试集代价函数 计算测试集误差
利用测试数据集来计算代价函数:,其中 由训练集数据计算代价函数 ,并最小化而得到
错误分类:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
逻辑回归模型
评估一个假设
越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型。
1. 使用训练集训练出 10 个模型 2. 用 10 个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值) 3. 选取代价函数值最小的模型4. 用步骤 3 中选出的模型对测试集计算得出推广误差(代价函数的值)
模型选择和交叉验证集
算法的表现不理想, 要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。
将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表
训练集误差和交叉验证集误差近似时:偏差大,欠拟合 ;交叉验证集误差远大于训练集误差时:方差大,过拟合
诊断偏差和方差
使用正则化方法来防止过拟合。但是正则化的程度可能会太高或太小了,即在选择 λ 的值时也需要思考与刚才选择多项式模型次数类似的问题。
选择 的方法为: 1.使用训练集训练出 12 个不同程度正则化的模型 2.用 12 个模型分别对交叉验证集计算的出交叉验证误差 3.选择得出交叉验证误差最小的模型4.运用步骤 3 中选出模型对测试集计算得出推广误差
• 当 𝜆 较小时,训练集误差较小(过拟合)而交叉验证集误差较大
• 随着 𝜆 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加
将训练集和交叉验证集模型的代价函数误差与 λ 的值绘制在一张图表上
正则化和偏差/方差
使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验(sanity check)。
学习曲线是将 训练集误差和交叉验证集误差作为训练集实例数量(𝑚)的函数绘制的图表。
在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。
高偏差(欠拟合)
在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。
高方差(过拟合)
学习曲线
使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小。使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。
神经网络的偏差和方差
应用机器学习的建议(Advice for Applying Machine Learning)
1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
2. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
3. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势
构建一个学习算法的推荐方法
误差分析
查准率(Precision)和查全率(Recall) 我们将算法预测的结果分成四种情况
查准率=TP/(TP+FP)
查全率=TP/(TP+FN)
类偏斜的误差度量
可以将不同阈值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同
选择使得 F1 值最高的阈值
查准率和查全率之间的权衡
大量的数据在某种学习算法里面训练,可以是一种有效的方法获得良好性能的学习算法
偏差问题,通过一个具有很多参数的学习算法来解决
机器学习的数据
机器学习系统的设计(Machine Learning System Design)
Support Vector Machine:
Hypothesis:
优化目标
这条黑线有更大的距离,这个距离叫做支持向量机间距(margin)。这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器。
C 设置非常大,它将决策界从黑线变倒了粉线。C 设置的不要太大,则最终会得到这条黑线。
大间距的直观理解
先看一下向量内积的知识: 假设有两个二维向量 和 , 叫做向量 和 之间的内积。
第一种内积计算方式:首先将 投影至 向量,记其长度为 (有正负,与 同向为正,反向为负,标量),则两向量的内积 (注: 是一个实数, 也是一个实数,因此 就是两个实数正常相乘。)
第二种内积计算公式:
SVM 的 cost function ,如果将C设的很大,cost function只剩下后面的那项。 为简化设 ,只剩下 和 ,则 cost function 为:
对于正样本 而言,想要 ,现在 长度非常短,就意味着 需要非常大;对于负样本 而言,想要 ,现在 长度非常短,就意味着 需要非常大。但我们的目标函数是希望最小化参数 的范数,因此我们希望: 投影长度 尽可能大。
大间距分类背后的数学
利用核函数计算新的特征,预先选定的地标(landmarks)span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
如果一个训练实例 𝑥 与地标 𝐿 之间的距离近似于 0,则新特征 𝑓 近似于,如果训练实例 𝑥 与地标 𝐿 之间距离较远,则𝑓近似于。
在预测时,我们采用的特征不是训练实例本身的特征,而是通 过核函数计算出的新特征 span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
高斯核函数:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
其中:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
对实例 ,有:
如何选择 landmark:通常如果训练集有m个实例,则选取m个landmark,并将 初始化为 。
这里与之前的 cost function的区别在于用核函数 代替了 。 预测一个实例 对应结果的方法:给定 ,计算新特征 ,当 时预测 ; 否则反之。
将 Kernel 引入 SVM:将Gaussian Kernel 代入 SVM 的 cost function
带有 kernel 的 SVM 有两个参数 C 和 σ,对结果的影响如下:1. C当 C 较大,相当于 λ 小,可能会导致过拟合,高方差 variance;当 C 较小,相当于 λ 大,可能会导致欠拟合,高偏差 bias;2. σ当 σ 较大时,图像扁平,可能会导致低方差,高偏差 bias;当 σ 较小时,图像窄尖,可能会导致低偏差,高方差 variance。
SVM 的参数
核函数(Kernels)
我们通常需要自己写核函数,然后使用现有的软件包(如 liblinear,libsvm 等) 来最小化 SVM 代价函数。强烈建议使用高优化软件库中的一个,而不是尝试自己实现。
使用现有的软件包
No kernel(linear kernel),
kernel f(比如Gaussian Kernel),,这里需要选择方差参数
两种 SVM
如果使用高斯核函数,需要进行特征缩放
特征缩放
其他 kernel
可以训练 k 个支持向量机来解决多类分类问题,可以直接使用支持向量机软件包里面的多类分类功能。
多分类问题
逻辑回归和 SVM
使用支持向量机
支持向量机(Support Vector Machines)
数据没有附带任何标签,训练集可以写成只有 span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
通过一种算法帮助我们找到数据中的内在结构。上图的数据看起来可以分成两个分开的点集(称为簇),一个能够找到圈出的这些点集的算法,就被称为聚类算法。
无监督学习简介
K-Means 是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
1)选择K个随机的点,称为聚类中心(cluster centroids);
2)对于数据集中的每个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。
3)计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
4)重复步骤 2-3 直至中心点不再变化。
K-Means 是一个迭代算法,迭代过程如下
聚类示例
没有非常明显组群的情况下,也可以使用K-means
K-均值算法
K-means最小化问题,是要最小化所有数据点与其所关联的聚类中心点之间的距离之和
代价函数(又称畸变函数 Distortion function):span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
算法第一个循环用于减小 引起的代价,而第二个循环则是用于减小 引起的代价。会在每一次迭代都减小代价,
优化目标
a) 选择K < m,即聚类中心点的个数要小于所有训练集实例的数量
b) 随机选择K个训练实例,然后令K个聚类中心分别与这K个训练实例相等
K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情况。通常需要多次运行 K-均值算法,每一次都重新进行随机初始 化,最后再比较多次运行 K-均值的结果,选择代价函数最小的结果。
随机初始化
上图在 3 的时候达到一个肘点。在此之后,畸变值就下降的非常慢,那么我们就选K = 3。但是大部分情况下图像会像右图一样没有肘点。就需要人工选择。
比如根据客户需求选择 T-恤的尺寸数
“肘部法则”:改变聚类数K,运行聚类算法,然后计算成本函数(畸变函数)J。 有可能会得到一条类似于肘部的曲线
选择聚类数
聚类(Clustering)
假设用两个特征描述同一个物品的长度,单位是厘米cm,单位是英寸inches。这将导致高度冗余,所以需要减到一维。
将数据从三维降至二维
动机一:数据压缩
降维可以帮助我们将高维数据可视化。
假使有关于许多不同国家的数据,每一个特征向量都有 50 个特征(如 GDP,人均 GDP,平均寿命等)。如果要将这个 50 维的数据可视化是不可能的。将其降至 2 维,便可将其可视化了。
动机二:数据可视化
主成分分析(PCA)是最常见的降维算法。PCA 要做的是找到一个方向向量(Vector direction),当把所有的数据都投射到该向量上时,投射平均均方误差尽可能小。
主成分分析问题,要将n维数据降至k维,目标是找到向量 使得总的投射误差 Projected Error 最小
主成分分析最小化的是投射误差,不作任何预测。线性回归最小化的是预测误差,目的是预测结果。上图中,左边的是线性回归的误差(垂直于横轴投影),右边则是主要成分分析的误差(垂直于斜线投影)。
主成分分析与线性回归的比较
PCA问题的公式描述
1)均值归一化。计算出所有特征的均值,然后令 。如果特征是在不同的数量级上,还需要将其除以标准差 。
2)计算协方差矩阵(covariance matrix) sigma Σ
3)计算协方差矩阵 Σ 的特征向量(eigenvectors):在 Matlab 里我们可以利用奇异值分解(singular value decomposition)来得到特征向量矩阵 U,调用方式为 [U, S,V] = svd(sigma) 。
对于一个 n × n 维度的矩阵,U 是一个由 “与数据之间最小投射误差的方向向量” 构成的矩阵。 如果希望将数据从 n 维降至 k 维,只需要从 U 中选取前 k 个向量,获得一个 n × k 维度的矩阵,用 表示,然后通过如下计算获得要求的新特征向量 :。其中 Ureduce 为 n x k 维,x 为 n × 1 维,因此结果 为 k × 1 维。
PCA算法
从给定的压缩后的低维数据反向得到高维数据
假设 为2维, 为1维,,相反的方程为:,这时有:。
重建原始特征
目标:在【平均均方误差与训练集方差的比例尽可能小】的情况下,选择尽可能小的 k 值。
如果希望比例小于 1%, 就意味着原本数据的偏差有 99% 都保留下来了。 另外,还可以使用5%(对应95%的偏差), 10%(对应90%的偏差) 这些比例。通常95%到99%是最常用的取值范围。
可以先令𝑘 = 1,然后进行主要成分分析,获得 和 𝑧,然后计算比例是否小于 1%。如果不是的话再令𝑘 = 2,如此类推,直到找到可以使得比例小于1%的最小𝑘 值(原因是各个特征之间通常情况存在某种相关性)。
选择主成分的数量 k
假使我们正在针对一张 100×100 像素的图片进行某个计算机视觉的机器学习,即总共有 10000 个特征。使用 PCA 算法的步骤如下:1. 运用 PCA 将数据压缩至 1000 个特征2. 对训练集运行学习算法3. 在预测时,采用之前学习得到的 将输入的特征 x 转换成特征向量 z ,然后再进行预测。
PCA 应用:压缩(减少数据存储和加速学习算法)和可视化
不如使用正则化处理。原因在于 PCA 只是近似地丢弃掉一些特征,它并不考虑任何与结果变量有关的信息,因此可能会丢失非常重要的特征。而当进行正则化处理时,会考虑到结果变量,不会丢掉重要的数据。
1. 将其用于减少过拟合(通过减少特征的数量)
最好是从原始数据特征开始
2. 在项目开始时便将PCA考虑进去(默认地将主要成分分析作为学习过程中的一部分)
错误的用法
PCA 的应用建议
降维(Dimensionality)
异常检测(Anomaly detection)问题是机器学习算法的一个常见应用。这种算法虽然主要用于无监督学习问题,但从某些角度看,它又类似于一些监督学习问题。
span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\"if \\quad p(x)\\begin{cases}
密度估计
问题的动机
符合高斯分布 span class=\"equation-text\" contenteditable=\"false\" data-index=\"1\" style=\"\" data-equation=\
已有数据集 ,预测总体均值 和 方差 。,
高斯分布(Gaussian Distribution)
每个特征 都对应不同的高斯分布
密度估计:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
检测算法
举例
算法
将已有数据分开,从中选择一部分正常数据作为训练集,剩下的正常数据和异常数据混合构成交叉检验集和测试集
划分数据
1) 根据测试集数据,估计特征的平均值和方差并构建p(x)函数
2) 对CV set,尝试使用不同的 ε 值作为阈值,并预测数据是否异常,根据 F1 值或者查准率与查全率的比例来选择 ε
3) 选出 ε 后,针对Test集进行预测,计算异常检验系统的F1值,或者查准率与查全率之比
评价方法
开发和评价一个异常检测系统
监督学习:同时有许多正向类和负向类。正向实例足够用于训练算法。
异常检测与监督学习对比
特征转换:将原始数据转换成高斯分布
通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小)。
误差分析:一些异常的数据可能也会有较高的 值,因而被算法认为是正常的。 可以使用误差分析帮我们分析是否存在问题。
选择特征
假如我们有两个相关的特征,其值域范围比较宽。一般的高斯分布模型可能不能很好地识别异常数据。其原因在于,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,得到的判定边界范围比较大。
多元高斯分布 ,其中: |Σ|是矩阵的行列式
协方差矩阵对模型的影响
均值 对中心点的影响
多元高斯分布
步骤:1) 计算出均值 µ 和协方差矩阵 Σ2)对新实例 x, 根据公式计算其 p(x) 的值,如果小于 ε 则异常。
对于一个多元高斯分布模型,如果其协方差矩阵只有正对角线上元素非零,则退化为原始高斯分布模型。
对比
原始高斯分布模型 和 多元高斯分布模型
使用多元高斯分布进行异常检测
异常检测(Anomaly Detection)
问题形式化
在一个基于内容的推荐系统算法中,假设对于我们希望推荐的东西有一些数据,是这些东西的特征。现在假设每部电影都有两个特征, 代表电影的浪漫程度, 代表电影的动作程度。
每部电影都有一个特征向量,如 是第一部电影的特征向量,为 。下面我们采用线性回归模型,针对每一个用户都训练一个线性回归模型,如 是第一个用户的模型的参数。 于是有:用户 的参数向量, 电影 的特征向量,对于用户 和电影 ,我们预测其评分为:
线性回归模型的代价为预测误差的平方和,加上正则化项。其中 span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\
所有用户代价函数求和:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
梯度下降法求最优解的更新公式
基于内容的推荐系统
在之前的基于内容的推荐系统中,使用电影的特征,训练出了每一个用户的参数。相反地,如果拥有用户的参数,可以学习得出电影的特征。
优化目标便改为同时针对x和θ进行。是一个:预测 ,再反过来预测 , 再预测 ,再预测 的迭代过程。
如果既没有用户的参数,也没有电影的特征,这两种方法都不可行了。可以使用协同过滤算法,同时学习这两者。
协同过滤 (Collaborative Filtering)
代价函数:span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
使用步骤
给定 span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
协同过滤优化目标
协同过滤算法
现在有5部电影,4位用户,矩阵 Y 就是一个 5 行 4 列的矩阵,存储每个用户对每个电影的评分数据
,
将所有 都集中在一个大的矩阵 中,每一部电影是一行;将所有 集中在一个大的 中,每个用户是一行。
Predicted ratings: ,矩阵 乘 的转置,在数学上具有低秩属性。因此这个算法也被称为低秩矩阵分解 low rank matrix factorization。
矢量化:低秩矩阵分解
新增一个用户 Eve,她没有为任何电影评分,那么我们以什么为依据为 Eve 推荐电影呢?如果按照之前的模型,那么预测出来的的评分都是0,没有意义,一次要做一些处理。
矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值。
利用新的 矩阵来训练算法。 最后在预测评分时,需要在预测值的基础上加回平均值,即预测值等于 。
实施细节:均值归一化
推荐系统(Recommender Systems)
如果有一个低方差的模型, 通常通过增加数据集的规模,可以获得更好的结果。
如果数据集特别大,可以绘制学习曲线来帮助判断这么大的规模是否有必要。
大型数据集的学习
适用于大规模的训练集
randomly shuffle dataset(数据集随机洗牌)
SGD 步骤
在批量梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远。但 SGD 不是每一步都是朝着”正确”的方向迈出的。因此虽然会逐渐走向全局最小值的位置,但可能无法到达最小值点,而是在附近徘徊。
随机梯度下降法(Stochastic Gradient Descent)
Batch gradient descent: Use all m examples in each iterationStochasticgradient descent: Use 1 example in each iterationMini-batch gradient descent: Use b examples in each iteration
span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" style=\"\" data-equation=\
小批量梯度下降(Mini-Batch Gradient Descent)
图1:红色线的学习率比蓝色线要小,因此收敛的慢,最后收敛的更好一些。图2:红线通过对5000次迭代求平均,而不是1000个,得到更加平滑的曲线。图3:蓝线颠簸不平而且没有明显减少。可以增大α来使得函数更加平缓,也许能使其像红线一样下降;或者可能仍像粉线一样颠簸不平且不下降,说明模型本身可能存在一些错误。图4:如果曲线正在上升,说明算法发散。应该把学习速率α的值减小。
可能的几种图像
批量梯度下降中,将 作为梯度下降迭代次数的函数。数据集很大时,采用随机梯度下降,这时为了检查随机梯度下降的收敛性,我们在每1000次迭代运算后,对最后1000个样本的cost值求一次平均,将这个平均值画到图中。
可以令学习率随着迭代次数的增加而减小
随机梯度下降算法的收敛
针对数据流,并非离线静态数据。例如,许多在线网站都有持续不断的用户流,对于每一个用户,网站希望能不将数据存储到数据库中,便顺利地进行算法学习。
只对单一的实例进行学习,并非一个数据集。
在线学习(Online Learning)
分而治之
很多学习算法可以表达为对训练集函数的求和。可以使用多核 CPU 并行处理矩阵运算(算法向量化实现的重要性,可以使用计算机快速运算)
映射简化和数据并行(Map Reduce and Data Parallelism)
大规模机器学习(Large Scale Machine Learning)
1.文字侦测(Text detection)——将图片上的文字与其他环境对象分离开来
2.字符切分(Character segmentation)——将文字分割成一个个单一的字符
3.字符分类(Character classification)——确定每一个字符是什么
图像文字识别步骤
问题描述和流程
从图像中抽取对象。如果需要在图片中识别人,首先用许多固定尺寸的图片来训练一个能够准确识别行人的模型。
之后在用训练模型时使用的图片尺寸对预测图片进行剪裁,将剪裁出的图片交个模型判断是否为行人。若不是则滑动剪裁区域再次判断,直至整张图全部检测完。
按比例放大剪裁区域,以新的尺寸对图片进行剪裁,将新剪裁的图片按照比例缩小至模型采纳的尺寸,再交给模型判断,如此往复。
区分字符和非字符
字符区域扩展
分割字符
用于文字识别
滑动窗口(Sliding Windows)
以文字识别应用为例
1、从网站下载各种字体,利用不同的字体配上各种不同的随机背景
2、对已有的数据进行修改,例如将其进行扭曲、旋转、模糊处理。
有关获得更多数据的几种方法: 1.人工数据合成;2.手动收集、标记数据;3.众包
获取大量数据和人工数据
判断哪一部分最值得我们花时间和精力去改善
文字检测值得投入更多时间
脸部检测Face detection,眼部分割Eyes segmentation 和 逻辑回归Logistic regression 值得优化
上限分析
应用实例:图片文字识别(Application Example: Photo OCR)
Supervised Learning
Unsupervised Learning
Special applications/special topics
Advice on building a machine learning system
原版
线性回归、逻辑回归、神经网络、支持向量机
监督学习
K-均值、主成分分析、异常检测
无监督学习
推荐系统,大规模机器学习。
特殊应用/特殊主题
偏差/方差、正则化;决定下一步要做什么:评估学习算法,学习曲线,误差分析,上限分析。
关于建立机器学习系统的建议
翻译
总结(Conclusion)
吴恩达机器学习
收藏
0 条评论
回复 删除
下一页