[中英字幕]吴恩达机器学习系列课程(19.24h): https://www.bilibili.com/video/BV164411b7dx
文章目录
- 1 引言
- 2 机器学习概念
- 3 介绍矩阵相关概念
- 4 多元线性回归、归一化、正规方程求解
- 6 从线性回归,引到逻辑回归,实现二分类、多分类:决策边界、交叉熵损失函数、高级优化算法
- 7 过拟合问题、正则化技术
- 8 神经网络 neutral network
- 9 如何构建训练集以及如何学习这参数
- 10 提高机器学习算法效能
- 11 如何设计一个复杂的机器学习系统
- 12 支持向量机 Support Vector Machine
- 13 第一种无监督学习 聚类
- 14 第二种无监督学习 降维
- 15 异常检测问题 Anomaly Detection (机器学习的一种常见应用,属于非监督学习)
- 16 推荐系统
- 17 大数据学习
- 18 照片ORC技术 Photo Optical Character Recognition :计算机视觉,计算机读出图片文字信息,方便找照片
- 19 完结撒花
1-7:掌握线性回归、逻辑回归、高级优化算法、正则化
1 引言
计算生物学:Computational biology
计算机集群:computer clusters
机器学习算法: Machine learning algorithms:
监督学习:Supervised learning
无监督学习:Unsupervised learning
Others: 强化学习 Reinforcement learning, 推荐系统 recommender systems.
Also talk about: 最佳实践 Practical advice for applying learning algorithms.
监督学习:Supervised learning 每个样本都有明确的标记(正确答案)
- 回归问题 regression problem 预测一个连续值输出
- 分类问题 classification problem 预测离散值得输出
无监督学习:Unsupervised learning (只有数据没有标签)
- 聚类算法 clustering algorithm
2 机器学习概念
线性回归 linear regression
假设函数 hypothesis function
代价函数 cost function (损失函数)
平方误差函数 squared error function
平方误差代价函数 square error cost function
梯度下降 gradient descent(机器学习路上第一个算法)
- 在这个算法中,梯度下降是损失函数对未知数偏导,之后统一更新到未知数中
- 当我们接近局部最低时,导数值会自动的变得越来越小,所以梯度下降也会自动一个更小的幅度,所以没有必要再动态减小学习率
- 有时候也叫Batch gradient descend,每一步梯度下降,都遍历了m训练集的样本(所以当计算偏导数时,会计算总和(累计梯度)),再更新梯度。(也有不一定的)
学习率 learning rate
- 太小,需要更多的训练次数,太大,会无法收敛甚至发散
Octave
3 介绍矩阵相关概念
矩阵
- 向量 vector: An n x 1 matrix 是一个n行的列向量;n维向量 n dimensional vector; yi 表示第i个元素;课程里默认使用从下标1开始
- 大写字母表示矩阵,小写字母表示原始数字、标量、向量
- 标量乘法 scalar multiplication
- 向量乘法 vector multiplication
- 矩阵乘法 matrix multiplication 尽管不能交换顺序,但是满足结合律,即后两个先计算,再乘前面一个
- 单位矩阵 identity matrix:斜向下对角线为1,其他为0;用I表示
- 逆运算 inverse A(A-1)=I 方阵 才有逆,也不是所有矩阵都有逆 1/0就不是,没有逆矩阵可以想非常接近0,所有没有逆,就像0不存在倒数一样;不存在逆矩阵的矩阵叫奇异矩阵 singular matrix 或 退化矩阵 degenerate matrix
- 矩阵转置 matrix transpose A^T
4 多元线性回归、归一化、正规方程求解
多元线性回归 multivariate linear regression: h = (w^T)x;w = [w0, …, wn],x = [1, x1, x2, …, xn], x0 = 1;
梯度下降
- 特征缩放 feature scaling: 如果多个特征取值范围差得特别大,在等高线也会变得细长的椭圆,梯度下降时可能造成反复来回震荡,收敛特慢;归一化之后等高线看起来更圆一些,下降时可以找到更直接的路径(每一步更新的方向都是沿着登高线垂直的方向,所以越圆越容易往中间走);缩放到-1到1之间,这个范围没有固定说法,最好保证相同数量级;均值归一化 Mean normalization: (x-u)/r xi减去平均值,再除以r(x范围内最大减去最小),规整到-0.5到0.5,当然只要范围接近就可以;特征缩放不需要太精确,只是为了让梯度下降运行的更快一点
- 学习率 根据迭代次数,画出损失函数的图像,正常来说每一步迭代之后,损失函数值都应该下降,通过图像可以判断是否收敛;自动收敛测试 automatic convergence test:让损失函数值小于一个很小的数来判断 0.001; 如果曲线上升(发散)或者上下震荡,可以尝试使用较小的学习率。每次增加3倍:0.001、0.003、0.01、0.03、0.1、0.3、1、3…
选择合适的特征
- 通过当前当前已有的特征去推算一个更好的特征,比如知道一块土地的长宽,就可以使用面积作为特征
- 根据特征和实际情况选择一个更好的拟合函数
多项式回归 polynomial regression
正规方程 normal equation:一次性求解出,而不是迭代;无条件极值,在一些文献中看到过,拉格朗日乘子式;如果使用这个方法就不需要特征缩放;如何选择:梯度下降需要选择合适的r并且需要多次迭代,但当有很多特征时,效果依然好,而正规求解时,逆矩阵求解的时间复杂度达到O(n^3),n上万时需要考虑,而且对于线性回归有很好的效果;这里不深究可逆举证是否存在
6 从线性回归,引到逻辑回归,实现二分类、多分类:决策边界、交叉熵损失函数、高级优化算法
开发一个名为 逻辑回归 logistic regression 的算法 其输出值一直介于0和1之间,可以视为一种分类算法,名字带回归只是历史原因
- 假设表示 hypothesis representation: 当一个分类问题,用哪个方程来表示我们的分类
- sigmoid 和 logistic 是同义术语,可以替换,h(x) = g((w^T)x),这里的g()函数就是这类 g(z) = 1 / (1 + e^-z)
- 假设函数h输出的意义:任意输入x,输出y=1的概率估计,或者直接是y=1的概率函数,是一种条件概率 ,即 h = P(y=1|x),给定x的条件下y=1的概率;y的值必定是1或0,所以 P(y=1|x) + P(y=0|x) = 1,即y=0的概率为 1 - P(y=1|x);P33
决策边界 decision boundary(来理解logistic回归,假设函数在计算什么),对于这个假设函数h(x) = g((wT)x),g叫sigmoid函数;当我们预测y的值时,取决于计算的估值概率,这就是**预测过程**;**(wT)x = 0 这条线被称为决策边界**(有了这个,我们可以自己尝试画图可视化工作),决策边界是假设函数的一个属性,取决于W,不是数据集的属性;高阶多项式特征 higher order polynomial features 可以得到非常复杂的决策边界
如何拟合函数,确定参数,具体来说是先定义一个优化目标或叫优化函数 cost function,这就是logistic回归模型的拟合问题;代价函数J(w) = 1/m * sum_m(cost(h(x), y)),这里定义了代价函数cost,即,cost在训练集上求和,之后除以m;观察到h(x)是经过g()的,是个以复杂的非线性函数,最后J(w)图像就是一种非凹函数non convex function,有很多局部最优解,我们想要的可不是这个函数,所以可以找一个好的代价函数 cost function
交叉熵损失函数 cross entropy error function,下面这个总的代价函数,是从最大似然估计得出的
高级优化算法 advanced optimization algorithms,不只是梯度下降,来最小化代价函数,如:Conjugate gradient,BFGS,L-BFGS(他们通常不需要手动选择学习率,里面有个智能内循环 clever inner-loop,称为线性搜索算法 line search algorithm,它会自动尝试不同的学习率并选择一个最好的,所以速度很快,收敛速度优于梯度下降,缺点就是复杂),所以当是一个大的学习项目,可以使用高级的优化算法
代价函数 J_theta,优化函数cost function,这两个概念有点混
梯度下降实例:这里的代价函数要能返回代价J,梯度g
如何修改logistic回归,使其适用于多分类任务,“一对多余”,转换成多个独立的二元分类问题 two-class classification problems
7 过拟合问题、正则化技术
过拟合问题 overfitting problem 表明算法具有高方差 high variance,而没有很好拟合数据集称欠拟合underfitting problem,解决过拟合:人工减少不必要的特征(这个工作也可以通过模型选择算法来做),也因此会丢失信息;正则化 Regularization 保留所有的特征变量,但是减少量级
正则化例子:
- 加入惩罚penalizing机制,使得参数theta变小,在优化函数中加入1000倍的theta,优化过程中,就会使得theta变的很小,接近于0
- 如果所有参数都加上这种惩罚机制,就像当于在简化这个模型,其实接近0了,得到的函数会越平滑,也更不容易出现过拟合问题,总之使参数变小,函数会变的简单,模型变的更加精细(通过惩罚机制调整每个变量之间的优先级,即惩罚相关度低的,高阶的)
- 当特征很多很多时,我们不知道该惩罚哪些特征,因此在正则化中,对代价函数 cost function J,来缩小所有参数,加入一个额外的正则化项,系数称正则化参数,控制两个不同目标之间的取舍?第一个目标是以前的拟合数据项,第二项是保持参数尽量的小,控制两者之间的平衡关系,如下图
- 正则化参数越大,表明对特征的惩罚程度越大,说明模型偏见性就越强,且theta0不受自变量的影响,惩不惩罚,对结果影响不大
正则化线性回归,避免过拟合
- 第一种:在梯度下降时,theta都会乘以一个比1略小的数,然后其他的和之前一样,是上面提到的加一个正则化项
- 第二种,在使用正规方程来解决时,使用正则化,来得到最小值
- 第二种方法中,不可逆的问题,加上正则化矩阵时,一定可以可逆!
Logistic回归正则化 — 改进梯度性下降和高级优化算法
- 先修改代价函数,再观察梯度下降
- 高级优化算法:
8 神经网络 neutral network
对于线性回归,尽管只包含二次项,也会有(n^2)/2项个参数,项数过多很容易过拟合,同样运算量大,若再加入三次项,会使特征空间集急剧膨胀,所以来建立一个非线性的分类器就不合适了
非线性假设 non-linear hpotheses
偏置单元 bias unit or bias neuron,就是x0,但通常x0=1;激活函数 就是 g();参数theta,也会被叫做weight,权重
前向传播 forward propagation:有点像多层逻辑回归,全连接层就在做逻辑回归
神经网络为什么可以学习复杂的非线性假设模型;XOR是异或,XNOR是同或,左侧的简单图,单个神经元如何计算逻辑函数
神经网络多分类问题,多个逻辑回归分类器
9 如何构建训练集以及如何学习这参数
修改了代价函数
反向传播算法:如何计算代价函数和求偏导项
反向传播固定步骤
- 前向计算
- 反向传播,代价函数的偏导数,这里演示的和前向计算一样反向传播计算
将参数从矩阵展开成向量,相当于取出权重
梯度检测 gradient checking:保证前向计算和反向传播正确运行,自己验证自己写的代码;双侧差分,和单侧差分,下面是参数是实数和向量,可以充数值上去估算任何参数或参数的偏导数
数值上的梯度检验,当你确定梯度下降算法是正确的,就可以关掉梯度检验了,梯度检验要比求梯度慢很多很多
随机初始化 random initialization:在初始化的时候,不能将所有参数都初始化为0,否则很多单元会计算同样的特征,带来冗余,所有需要随机初始化成非常接近0的数
首先将权重初始化为一个接近0的数,然后进行反向传播,特度检验,梯度下降或其他算法来最小化代价函数
如果y是1、2、3形式,要改写成one-hot编码
第一件事,选择一个网络架构 network architecture(即神经元之间的连接方式,对于隐藏层,一般一层,多层可以保持每层数目一致,通常隐藏单元数越多越好,可以是输入层的1倍2倍3倍4倍等等),之后训练网络(六步:初始化,前向计算,计算损失函数,反向传播,梯度检测,尝试高级优化算法)
10 提高机器学习算法效能
在设计机器学习系统时,如何选择一个高效的方法,增强或改进
Coursera做作业
提高机器学习的预测能力,可以从下面这6种方法入手:寻找适量数据,尝试更少的特征防止过拟合,在想获取更多信息之前 先评估是否有必要,同样尝试增加多项式特征的方法,增大或减小lambda。不要凭感觉来做
机器学习诊断 machine learning diagnostic,目的是了解算法问题出现在哪了
如何评价算法,如何防止过拟合和欠拟合
先:划分数据集:7比3,training set;注意数据分布是不是随机分布,请先打乱顺序
评估算法如下:分类错误,是实际上假设函数误标记错误,
模型选择问题:如何确定多项式的最高幂,用d来表示,那么d从1到10,分别训练,得到对应参数,再经过测试集得到d=5时,误差最小,那么就可以说我们用测试集拟合了参数d,所以需要使用验证集来验证模型的泛化能力
训练集,交叉验证集,测试集(cross validation set 也叫验证集,记cv):6比2比2,同样有三个误差;cv来选择模型,测试集来测试;数据小的时候就没有必要这么来分,直接分成两个
训练误差 training error
实际的泛化误差 actual generalization error
算法表现不理想:要么偏差(bias problem)大,要么方差(variance)大,换句话是欠拟合或过拟合
符合判断是否拟合很好,这两个误差都很大而且接近,就是bias,欠拟合,而相差大,就是过拟合
正则化和欠拟合过拟合有什么关系,是如何影响的(下图是控制正则化系数,对最后拟合曲线的影响)
(下面这张图同样是通过验证集来拟合lambda,最后去测试集上测试泛化能力)
(lambda对bias和variance的影响)
诊断工具:学习曲线 learning curves (检测是否正常及其表现,误差曲线)。m是训练集的大小,训练误差会随着m的增大而增大,验证误差与之相反
高偏差的情况下,增加m数无意义
高偏差-欠拟合-模型过于简单
高方差-过拟合-模型过于复杂(这个更好,过拟合了就想办法调整)
总结:炼丹,不确定就多试,画图比较确定最佳参数
11 如何设计一个复杂的机器学习系统
面对一个新的机器学习问题
- 对于你要研究的问题,如何构建你的特征向量x
- 如何在有限的时间里具有高精度和低错误率:钓鱼收集数据、添加更多额外的描述信息(发送地址、IP、标题)、不过分追求极致 采用普遍且有效的方法
误差分析 从多种方法中挑选出优秀的
- 不是建立一个复杂的模型系统,和一个复杂的特征系统,而是通过一个简单的算法快速实现,简单粗暴的做出来,然后测试数据,画出学习曲线等等,找出算法是否具有高偏差或高方差,帮组判断,之后再决定是否使用更多的数据或特征或者别的东西,才能有时间和精力花在刀刃上,避免过早优化,此外可以进行误差分析
- 交叉验证集 cross validation set(就是验证集),观察被算法分类错误的文件,找出规律,启发:如何应该设计怎么样的特征,以及当前系统有什么优点和缺点,以致于改进
- 人工智能,先人工后智能
- 对改进的算法进行评估
-
- 正负样本比例问题,极端比例,做不平衡数据的误差估计
- 查准率和召回率 precision and recall,混淆矩阵:Precision 查准率,对的且预测是对的 比上 所有预测是对的,比值越高越好,说明有很好的找出是对的的能力;Recall 召回率(也叫查全率),实际上是对的且预测是对的 比上 实际上是对的,表示我们发现是对的能力,同样越高越好;通过这两个数据就能知道我们的分类效果好不好
-
- 如何保持查准率和召回率的平衡呢?根据实际情况来设计,阈值会影响
- 如何自动选取阈值?(动手试,看验证集结果),如何正确评价一个算法优劣?
如何判断是不是需要大量数据?
- 是否有特征可以坚定来预测,例如,仅有房间大小很难预测价格,但是如果数据足够多
- 此外观察模型是否有很多参数,数据越多就可能越好,前提是特征值有足够的信息量
- 如果是一个人类学家,看到你的特征能不能正确的预测出来;有没有庞大的数据
12 支持向量机 Support Vector Machine
从数学角度的定义
- 从优化目标入手:相比于逻辑回归,去掉了m,将负号提到里面来,将控制权重的lambda替换成C,并改变cost函数
- 同时不再输出一个概率,而是输出一个直接的预测
也叫大间距分类器
向量内积
根据内积的概念,这里优化最小的代价函数就可以表示为参数向量的长度;最后系数乘以x大于1的预测为1,而这个乘式又可以表示为投影p乘以参数向量的模
参数向量为什么和决策边界是相互垂直的?要优化最小,即使得theta最小,反过来就是是p最大,即各个样本在参数向量上的投影长度最大,这样就是可以输出一个较小的theta值,达到优化的目的,可以解释会是一个最大间距分类器
例子:做一个复杂的非线性分类器,引出kernel概念,什么叫核函数,可以理解成高级特征或高阶函数中的处理函数
高斯核函数 Gaussian kernel,相似度函数
这个核函数都干了嘛,定义新的特征
根据核函数推出边界
如何选择核函数及如何选择相似点l,将所有样本都当做相似点,之后所有特征,构成特征向量
相比于以前的优化函数,x被替换成了核函数
其他参数
选择核函数,如何特征多数据少可以使用线性内核函数 linear kernel,特征少数据多可以使用高斯核函数
如果你使用高斯核函数,需要自己实现核函数,类似下面这种,如何特征大小不一,注意归一化,防止某些特征影响特别大
其他核函数
多分类
选择逻辑回归还是SVM
13 第一种无监督学习 聚类
unsupervised learning 非监督学习
K-means clustering algorithm K均值聚类算法,是一种迭代算法
- 将一堆无标记的点分成2簇
- 随机生成2个聚类中心
- 重复下面这两步:
- 簇分配:遍历所有样本点,离哪一个聚类中心近,就分配到哪一类,用c_i记录
- 计算这一类的中心(每个特征的均值),作为这类新的聚类中心
- 优化函数也叫失真函数 distortion function
- 随机初始化:避免局部最优(K值较小时,进行很多次初始化,选择最后误差最小的那个);随机挑选K个样本作为聚类中心
- 选择一个K:通过观察可视化图来确定 或者 根据后续使用目的来确定分类数目
14 第二种无监督学习 降维
这两有什么关系吗:降维 目的是数据压缩和数据可视化
高度相关的特征才是降维,不是瞎降,当然肯定会有误差
从2维想1维投影
主成分分析法PCA principal components analysis 可以用来降维和数据压缩:会找一个低维平面,找到一个投影长度平方(也叫投影误差)最小的低维平面
- PCA和线性回归的区别:投影和高度差的问题,没有特殊的y,都是特征x
- PCA 先要对数据进行标准化
- 协方差矩阵 covariance matrix;左边这个符号就是sigma,来代表这个协方差矩阵;svd 奇异值分解 singular value decomposition;eig与特征值相关;最后得到U,前K个就是我们需要的
- 得到降维矩阵U_reduce
- 选择一个合适的K;x_approx,是降维后再还原的的值
- 不断尝试,k为1…,直到满足条件;S是一个对角矩阵;保留99%的特征
- 压缩重现,从低维回到高维,这个过程也叫数据重构Reconstruction
- PCA仅在训练集上找参数
- 错误说法,使用PCA防止过拟合,防止过拟合就去使用正则化
- 为什么要使用PCA,建议先使用原始数据,当结果不理想时(运行太慢、内存不够),可以考虑;PCA是用误差的,如无必要,勿增实体
15 异常检测问题 Anomaly Detection (机器学习的一种常见应用,属于非监督学习)
高斯分布 又叫正态分布
参数估计:对于方差,m和m-1在实际应用中差距很小,更多取m
检测算法
划分数据:推荐上面一个
评估一个异常算法
异常检测 和 监督学习 有什么区别
- 异常检测 可以说是学习正常样本的特征,不是的就打死
- 监督学习对正样本和负样本都学习其特征,所以需要保证数据量最好对等
- 取决你有没有见过大量的异常样本
如何选择或设计异常检测算法的特征
- 画图,最好是高斯分布,也会做一下加工
- 也可以通过误差分析来确定是不是可以作为特征,和通过异常样本分析新的特征
多元高斯分布
- 存在的问题,检测不出来,一些异常点
- 多元高斯应用检测
- 以前的模型只是多元高斯的一种特例
- 两者对比:前者对于异常需要自己构造特征、运算量小,后者可以捕获、运算大还有矩阵是否可以分解可逆的问题(特征冗余可能导致不可逆)(样本数量远大于特征数量,10倍);
16 推荐系统
推荐系统,推荐的值,换句话说是预测了什么
推荐系统就是基本的线性回归问题:同时预测多个值,得到一个整体最小值
- r(i, j) = 1 表示 用户j评价了电影i,没有评价就是0
- y(i, j) 是用户j对电影i的评价
- theta_j
- x_i 是特定电影的一个特征向量
- m_j 表示评价了电影的用户数量
- 最后的公式去掉了m_j这个常量
优化对象的变化
代价函数J,
协同过滤 collaboration filteing,有一个很有意思的特性,特征学习,feature learning:通过观察大量的用户,这些用户的实际行为,来协同得到更佳每个人对电影的评价
听取用户意见,知道每个用户喜欢什么,以及对电影的评价,推测电影的特征,这不就反过来了吗???根据theta,学习x,这个两套参数一样吗
随机给一组theta,学习x,再学习theta,一直迭代
实际应用的算法:两者同时优化
用户寻找一个商品,有没有相关的产品可以推荐:低秩矩阵分解(一种协同过滤算法),对不同产品进行估分
均值归一化 mean normalization,作为协同过滤算法的预处理
使均值为0,得到Y,当做用户评分,来做后续
17 大数据学习
处理大数据集的算法
采用低偏差的算法,然后使用大量数据训练
在面对大量数据的时候,先尝试一下,能否使用较小的数据达到相同的效果,可以使用两种方法:随机梯度下降 或 减少映射
随机梯度下降 stochastic gradient descent, 以线性回归为例子
对全部数据求和,又叫批量梯度下降 batch gradient descent,batch 表示每次都要考虑所有样本;cost衡量的是,在某个样本的表现,每次只关注一个样本
两者收敛形式不一样,后者是连续不断的在某个区域内朝着全局最小值得方向徘徊,而不是直接达到全局最小值
Mini-batch 梯度下降 Mini-batch gradient descent,介于以上两者之间,每次用多个样本来优化
如何确保随机梯度下降已经收敛,及如何设置合适学习率;检查是否收敛,在计算前1000个样本前先做一次计算(预测),然后画图,缺点是每隔一遍才能有图;小的学习率震荡更小
对于学习率,有保持不变,也有不断减小
新的大规模学习机制,在线学习机制 online learning setting:有连续的一波数据或连续的数据流:每个样本只使用一次,优点是可以适应用户的偏好
产品搜索算法,如何反馈给用户好的搜索列表,点击率学习 CTR …
MapReduce减少映射:在多台机子上跑
如果想应用这种方式,就需要保证,学习算法是否可以表示成对训练集的一种求和
也可以在单机上进行尝试,毕竟多CPU,这种并行,也有很多库帮你实现了如Hadoop
18 照片ORC技术 Photo Optical Character Recognition :计算机视觉,计算机读出图片文字信息,方便找照片
机器学习流水线 machine learning pipeline
人工数据合成 artificial data synthesis,下面这个过程就可以叫这个,设计不同的模块,然后串起来
滑动窗口分类器 sliding windows classifier
行人检测:固定一个窗口,不听的遍历、比较;文字检测也是,第一步:先是用不同窗口来找到文字,在对零散的白色像素周围看看还有没有其他的白色像素,范围进行扩充,之后就可以剪切出来了
第二步:字符分割,再度监督算法;第三步,字符识别,多分类问题
人工数据合成 artificial data synthesis:自己创造数据或将小的数据集转成大的数据集
找数据之前,先确认,分类器偏差较低高方差,绘制一个学习曲线,增加特征数量,隐藏层单元数据量,直到偏差降低;以及获取数据所需要花费的时间,数据量提升10倍
上限分析 ceiling analysis,确定哪一部分值得花时间分析,从第一个模块开始,人为的认为是对的