吴恩达机器学习-笔记

本文是吴恩达机器学习课程的学习笔记,涵盖了多元线性回归、梯度下降、正则化、逻辑回归、神经网络等多个主题。讨论了欠拟合与过拟合的解决方案,强调了特征缩放、正则化参数选择、学习率调整的重要性,并介绍了SVM、K-means聚类算法和降维方法PCA。此外,还涉及了异常检测、推荐系统以及大规模机器学习中的优化策略。

名不显时心不朽,再挑灯火看文章。
-题记

1.先建模 假设函数 y=a0+a1*x
2.目标函数 (代价函数求最小值)

凸函数 只有一个最优解,不存在局部最优解

矩阵:
通常用大写字母表示矩阵 A B X。向量一般用小写表示。 x y
矩阵不满足交换律,满足结合律
单位矩阵
I=[1 0]
0 1
单位矩阵的特性任何矩阵乘以它都得到它本身
IA=AI=A

逆矩阵:只有行数和列数相同的方阵才有逆矩阵
奇异矩阵(退化矩阵)没有逆矩阵,类似0没有倒数
A*A(-1)=A(-1)*A=I

转置矩阵:
A =[1 2 0]
3 5 9
A^T=B
Aij=Bji
A^T =[1 3]
2 5
0 9

多元线性回归
特征缩放 :不同特征的取值,在相近的范围内,梯度下降法可以更快的收敛
一般特征的取值都约束到[-1,1]
一般在[-3,3]或[-1/3,1/3]

均值归一化:让特征的平均值为0
x1=(size - 1000)/2000。 //其中U1=1000为平均值,S1=2000为最大值减去最小值的取值范围 也称标准差

学习率的大小,看随迭代步数变化的代价函数的走势图,和自热检测s=10^(-3)
如果代价函数来回跳动,可能是学习率过大导致的,一般按3的倍数寻找学习率

多项式回归
x1=size
x2=size^(2)
x3=size^(3)
h0(x)= O1x1+02x2+03X3
讲多项中的转化为新的特征特征
选取特征的时候,看对应训练数据的特点,和数学函数的匹配度

求解代价函数的最大或最小值时(可以选用梯度下降和正规方程两种方式)
正规方程:当矩阵为奇异或退化矩阵时不可逆。//很少发生,也不影响求解
pinv()伪逆函数 //即使不可逆也可以计算出逆矩阵
1.两个特征存在函数关系,删除多余特征
2.训练数据集少于特征数,正则化

Logistic回归
加入多项式可以构建复杂的决策边界
梯度下降函数和多线性回归是相同的
用循环次数绘制代价函数的值观察是否算法正常工作

Cost --翻译: 代价
惩罚函数

梯度下降优化:共轭梯度这种优化算法使用最新代码包,不要自己实现,自动寻找学习率

多分类问题:
一对其余:看成多个二分类问题,找到概率最大的类别

欠拟合:高偏差
过拟合:高方差,代价函数很可能接近0,无法泛化新的样本
解决过拟合的方式:1、减少选取变量 2、正则化

正则化:
引入惩罚因子,越大对应的特征参数更趋向于0。 留下高度相关的特征

神经网络:
第一层为输入层、最后一层为输出层、中间被称为隐藏层
每一次提取相当简单的特征,拟合相对简单的函数,最后组成相对复杂的函数
多分类,输出为多个神经元,取概率高的

1.激活函数 logistic
2.权重=模型的参数
3.误差反向传播,计算出每个权重的偏导,进行梯度下降

梯度检验:
用近似导数的方法检验所写的求导公式是否正确

初始化:
逻辑回归时可以将参数初始值都设为0,神经网络学习中不可以这样做,相当与每个隐藏层的值都相同
神经网络参数初始化为随机思想,接近0 在-s,s 之间

训练神经网络的整体流程:
1,选择一种训练架构,多少隐藏层,和每个隐藏层对应的神经元
定义输入和输出神经元的个数
默认合理只有一个隐藏层
对于多个隐藏层,一般默认每个隐藏层的神经元个数一致,一般隐藏层的神经元是输入层的2-4倍
2.随机初始化权重
3.实现前向传播,给定x,输出y
4.实现代价函数
5.反向传播计算偏导数
6.梯度校验,校验反向传播算法是否正确,正确之后,停止梯度校验
7.开始训练,使用梯度算法,或高级如共轭梯度算法

改进机器学习的方法:
以多元线性回归,预测房价为例
1.可以增加训练样本。–高方差
2.尝试选用更少的特征,防止过拟合。 --高方差
3.选取更多的特征。 --高偏差
4.增加更多多项式特征的方法。 --高偏差
5.增大正则化参数。 --高方差
6.减小正则化参数 --高偏差

机器学习诊断法:
1.如何判断一个假设是否过拟合
划分一部分数据作为测试集,一般按7:3的比例随机选择。
训练完成,计算测试误差

模型选择问题:
特征的多少次方,正则化参数选择
1.依次计算各次方拟合的测试误差,选取误差最小的一项。
测试集并不能完全反映泛化能力,用测试集拟合的次方d,需要先用验证集验证,在用测试集衡量误差
将数据样本分割为,训练集、验证集、测试集 分配比例 6:2: 2

算法表现不理想时两种情况:
1.偏差比较大 欠拟合问题 :训练误差比较大,验证误差也比较大和训练误差接近,正则化参数过大,各权重接近0
2.方差比较大 过拟合问题 :训练误差很小,验证误差远大于训练误差,正则化参数过小,正则化程度比较很小,容易出现过拟合

正则化参数选择:
代价函数为之前不带正则化的函数
选取正则化参数的取值范围,以2倍步长增加,【0,10.24】
拟合所有情况,选取验证误差最下的正则化参数,观察测试误差
神经网络的层数选择也是遵循这个规律,验证多种情况,选取验证误差最小的那个

学习曲线:检测学习算法是否运行正常,绘制关于训练集数目m的图像
1.训练集的平均误差平方和,不使用正则化
2.验证集的平均误差平方和

高偏差:测试误差很快变水平,随m增大而减小,训练误差随m增大而增大,最后接近验证误差,误差的绝对值比较大
相对简单的神经网络结构
改进:增加更多的特征
高方差:训练误差随m增大而增大,绝对值也很小。测试误差很大,与训练误差数量级相差很大
相对复杂的神经网络结构,优选这个方式,用正则化减少过拟合
改进:增加更多的数据集

机器学习系统设计:(以邮件区分为例)
1.如何表达特征向量(高频单词是否出现 0,1,进可能的构造有价值的特征)
2.收集训练数据集

1.优先用简单方式构造处理一个系统
2.画出学习曲线,确定高方差或高误差的问题
3.误差分析:查看哪些被错误分类的数据,观察共同的规律和特征,将会启发你设计新的特征(在验证数据集上做误差分析,不要在测试数据集上)
4.构建一个评估数值,可以快速的看到算法的预估效果
5.是否决定引进一种新的方法构造特征,先用简单的方式验证是否有效,错误率是否下降
6.偏斜率问题(不对称分类的误差):正负例子的数据比例差距很大,出现很高的准确率的时候,观察数量较少分类的查准率或召回率发现模型是否正常
查准率:预测中真实的分类/预测的分类
召回率:预测正确的分类/实际分类中的数量

如何平衡查准率和召回率(要具体应用分析,确定其判断概率):
当提高判断类别的概率(一般以0.5作为标准)时:查准率升高、召回率降低
当降低判断类别的概率(一般以0.5作为标准)时:查准率降低、召回率升高
F值:结合查准率和召回率的衡量数值 2PR/(P+R)
F值可用于自动选取边界判断概率,遍历所有概率组合,在验证集上选取F值较大那个

收集大量训练数据集的前提是:有足够的特征用来预测(标准就是一个对应领域的专家是否能依据对应的特征作出预测)
总结起来就是更完备的特征,和大量的数据集

支持向量机(SVM):
参数C都非常大,会对异常点特别敏感(可以近似理解为梯度下降【入】的倒数)
选取所有的训练数据作为标记点
选择核函数参数(过大特征平衡容易欠拟合,过小特征明显容易过拟合)
可以选择线性核函数,用本身x去拟合(一般当特征足够多,训练数据量比较少的时候选择)
也可以选择高斯核函数(一般当特征比较少,训练数据量足够大的时候选择)
使用svm之前将特征的数值标准化
多分类:可以用一对其余的方法,看出每个类别单独的分类,取概率最高的

逻辑回归和svm如何选择:(当训练样本和特征足够多的情况下,一般svm表现要好过逻辑回归,神经网络速度要慢过svm,准确性应该更高)
1.特征N远大于训练数据m,一般使用逻辑回归或线性svm
2.特征N小于训练数据m,数量适中,一般使用高斯svm
3.特征N远小于训练数据m,高斯svm运行速度会很慢,建议增加特征使用逻辑回归或线性svm

无监督学习:
K-means算法(聚类算法):
1.随机初始化选取N个聚类中心点
2.遍历数据集计算距离中心点近的距离,进行分类
3.更新聚类中心点,一直迭代到中心点和分类数据不在改变
如果存在一个没有分类数据的聚类中心,可以重新初始化。或直接移除这个分类,变成N-1
一般用于市场划分,把用户划分成不同的部分,观察每个部分进行相应的策略
代价函数:最小化每个点和其分类中心的和(算法的过程也是在最小化这个代价函数)
随机初始化:随机选择K个训练样本数据,作为初始化的聚类中心点
避免局部最优:尝试多次初始化,计算代价函数,取最小的那个(一般循环50-1000次)K越小,越容易出现局部最优
如何确定选取几个聚类:肘部法,遍历1,K所有的可能,画出代价函数值,选取变化肘节点(变化大的最后一个值,变化小的第一个值)
如果能明确后续目的,可以根据应用决定聚类的数目

降维:
目标:1.将不同高度相关的变量特征降维到更少变量特征里,去除冗余数据。可以节省内存,使学习算法运行的更快。在使用PCA之前先考虑如果用原始数据可不可以达到目的
2.数据可视化,将高维数据降维到可以绘图的,用分类描述降维后的抽象特征

主成分分析(PCA):在学习算法之前对高维度数据进行降维,对预测的新值也对降维后进行预测,只能用训练数据集得到,不能用验证集和测试集
目标函数:找到一个K维向量最小化对应投影在上面的投影误差之和
降维数K的选择:选择特征可以保留99%方差保留百分比以上特征的K
压缩重现:将降维后的数据重新乘上降维矩阵,得到之前数据的近似在的n维坐标
错误用法:不能用来防止过拟合,过拟合需要用正则化去矫正

异常检测:建立概率模型,对每个特征值,求对应的高斯分布,当新数据的每个特征概率的乘积,小于阈值认为可能是异常值
主要应用:反作弊相关
高斯分布(正态分布):找到训练数据对应的正态分布参数
评估算法的准确性:用带有标签数据对算法预估的值作出统计,假设大量正常的数据按6:2:2分配
阈值参数的确认:选取不同的参数,选取使验证集的召回率最大的值
如何确定选择监督学习还是异常检测:异常检测对特征的异常更敏感,需要对异常值做预估的选择异常检测,当正例的样本数过少的时候,一般少于50个。在监督学习的情况下,当正例样本过少,很难学到具体的异常是什么,也没发预告正例中没有出现的异常。如果有足够多的正例数据,且未来出现的正例数据也在训练数据的范围内,可选择监督学习,当数据规模足够大的时候,可以由异常检测迁移至监督学习。
如何设计和选取特征:画出训练数据的直方图,观察是否符合高斯分布的特征,如果不符合做下数据转化如log()或1/2次方转化。重点观察那些预估错误的数据,在其中找到特征。也可以将其他特征组合起来,乘积或做除法
多变量高斯分布:为了解决不同特征之间相关性和不同组合的问题,通过计算协方差矩阵,构造多变量高斯分布.单高斯分布的乘积是多变量高斯分布,所有变量不相关下的特例。
传统异常检测和多变量高斯分布之间选择:当特征过多训练数据很少的时候,选用传统异常检测,优点计算成本小,如果期望捕捉不同变量之间的相关性,需要构建额外的特征。训练数据远大于特征时,一般10倍,选取多变量高斯分布可以捕捉变量之间的相关性。

推荐系统:
1.基于内容的的推荐算法:用用户以评论的内容,训练出用户参数,对新内容作出预估,当内容已经存在相应特征。
2.协同过滤cf(推荐和你类似用户喜欢内容):通过内容特征训练出用户的参数,在通过用户的参数训练出内容的特征。类似word2vector,不会在初始x0为1这种,因为学习到的是全部特征。(1)先随机初始化x值(2)梯度下降求的拟合之后的x和参数(3)均值归一化,对已经评价的分数,求出平均值,减去平均值,在学习特征,对于没有任何训练数据的用户,对于每个视频的预估分数就是平均值

大规模机器学习(当训练数据很大的时候):
1.先用抽样看看模型效果是否可以满足,观察学习曲线。
2.随机梯度下降:先对训练数据打乱顺序,不遍历所有的数据在做梯度下降,对每一训练数据做对应的梯度下降。(对训练数据循环1-10次)
3.Mini—Batch梯度下降:小范围的批量梯度下降,一般b取值在(2,100)
4.随机梯度下降收敛:随机梯度每一千个画出平均代价函数值,随机梯度会收敛到全局最小值反复震荡,更小的学习率可以使震荡更小。使用更大迭代次数汇聚,得到的学习曲线会更平滑,越小噪音会越大。如果曲线发散,代价函数越来越大,应该减小学习率。
5.学习率的选择:可以使学习率成为变化的随时间或迭代次数的变量,常数/(常数+迭代次数)

在线学习:
感觉用户在线发生的行为实时学习用户的偏好更新模型参数,训练后丢弃数据。
点击率预测学习(CTR)
Map-reduce:可以将算法拆解成求和形式,运用编程模型进行并行计算。也可以在单机上实现多核cpu的并行计算。

机器学习示例-图片文字识别(照片OCR):构建机器学习流水线(pipeline),不同模块处理各种的特定问题,都是一个机器学习模型。
1.识别文字区域 2.字符分割 3.文字识别
人工数据合成:对特定问题具体分析如用不同字体构建图片识别图像,用已有标签的正例去扩展,绘制学习曲线,先确认已经得到高方差,低偏差的模型,在扩展训练数据集(1)从头构建数据集(2)将已有的数据集扩充成更大的数据集
不断思考获取10倍的数据集需要多少时间。
上限分析:最宝贵的资源就是自己的时间,在一个pipeline中,衡量总的成功率,从头开始构造人工数据每个模块准确率100%,分析总的成功率提高多少。不能相信直觉,要有数据支撑。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值