吴恩达机器学习
学习视频参考b站:吴恩达机器学习
本文是参照视频学习的随手笔记,便于后续回顾。
如何在机器学习项目中决定下一步做什么
当训练模型后效果并不好,下一步可以考虑:
1.使用更多训练数据
2.使用更少或更多的特征值
3.尝试采用多项式特征值
4.减少或增加正则化参数λ
下面会通过诊断判断该进行哪一步
模型评估(Evaluating a model)
多维难以判断模型好坏
多特征值不是很好通过图像评估模型好坏
训练集与测试集
我们可以将数据集分为两部分,70%为训练集,30%为测试集,以下有具体的符号表示
1.先通过训练集的数据通过代价函数最小化参数w,b
2.使用测试集的代价函数或训练集的代价函数(除去正则化项)判断模型好坏
训练集的代价函数小,但测试集的代价函数高,说明模型只在训练数据集中表现良好,在一些没训练的地方,实际表现不是很好,如下图
在分类问题中的过程
大致参考回归过程,也可以是下面的方法
通过设定y-hat来分类,如果预估值y-hat不等于实际值y,就是错误分类,通过观察训练集和测试集的错误分类数量来判断模型好坏
模型选择&交叉验证测试集的训练方法
训练集、测试集方法:
通过训练集拟合w,b参数,测试集评估拟合效果,这样的预测效果并不好,因为都是一个数据集里的数据,实际使用并不优秀,那么该如何选择模型?
可以通过观察不同阶数多项式的代价函数值,通过测试集测试,选用最小的那个作为模型
这样有一个问题,使用测试集的数据得到的代价函数误差都会小于实际误差
下面会解决这个问题
将数据集分为三个部分,训练集(Training set),交叉验证集(cross validation set)或称验证集(Validation set),测试集(test set)
下图是符号表示
你可以使用多个多项式来拟合w,b,在交叉验证集上评估误差,看看哪个最低用哪个
然后通过训练不同神经网络架构,选择Jcv最小的一个来使用,最后使用测试集来验证模型效果
总结:通过训练集和验证集来拟合、评估模型,最后用测试集测试
模型诊断
通过偏差和方差进行诊断(diagnosing bias and variance)
Jtrain很高说明模型有高偏差
Jcv远远高于Jtrain说明模型具有高方差
Jtrain不高并且Jcv也不远高于Jtrain,说明模型较好
当多项式的阶数越来越高,Jtrain会下降,因为这样会更适应训练数据,但是可能会导致过拟合
当多项式的阶数很低,Jtrain会很高,因为这样不能很好的更适应训练数据,会导致欠拟合
但是Jcv随着多项式阶数变化表现为二次函数,所以最低值是模型最适合的,这样Jcv不会很高
有时候对数据的训练可能同时出现欠拟合和过拟合
高偏差意味着即使在训练集上做的不好
高方差意味着在验证集上和训练集上表现差很多(训练集好,实际不好)
正则化如何影响方差和偏差
正则化参数λ很大,会导致欠拟合,高偏差
正则化参数λ很小,会导致过拟合,高方差
如何选择一个好的λ值
λ从很小的值开始,每次都加倍,通过拟合后,选择Jcv最小所对应λ值,然后通过测试集观测误差
λ过大,导致欠拟合,模型对训练集的表现不好,高偏差
λ太小,导致过拟合,模型对训练集的表现很好,对测试集表现差,高方差
尝试很多λ的值,最终选择导致Jcv小的
性能评估的基准
通过三方面来确定基准
1.人类表现水平
2.竞争算法的表现
3.基于经验猜测
像是下面例子,如果Jtrain远大于基准,就是高偏差,如果Jcv远大于Jtrain,就是高偏差
也有可能会同时出现高方差和高偏差,概率小
学习曲线(Learning curves)
随着训练集变大,Jtrain会变大,因为阶数限制了不能更好的拟合数据
而Jcv会随着训练集变大而变小,但还是会比Jtrain大
高偏差的学习曲线
随着数据量变大,模型并没有太大的改变,所以Jtrain会逐渐变平
高方差的学习曲线
Jtrain可能比人类表现水平低或高
如果是高方差,那么增加训练集数据可能会有好处,因为Jcv会变低接近人类表现水平
绘制学习曲线缺点:计算成本很高
决定下一步做什么(修订revisted)
解决高方差或高偏差应该做什么:
不需要减少训练集的大小,这并不会有任何帮助,会恶化模型
偏差与方差
大型的神经网络往往会是低偏差
当训练完模型后可以判断Jtrain的值,如果模型是高偏差就适当增加神经网络的大小,再次训练
如果低偏差就通过验证集验证Jcv,如果有高方差,就适当提高训练集,再次训练,或者使用其他减少高方差的办法
最终会得到比较好的模型,但是神经网络的增大会导致计算成本升高
如果你要把小的神经网络扩大,可能会导致过拟合,如果正则化效果较好,也可能会和小神经网络表现一样或更好
只要适当的正则化,选择更大的神经网络几乎没什么坏处,不过会减慢计算速度
机器学习开发的迭代
机器学习开发迭代的一般步骤
迭代循环
1.选择数据、参数等
2.训练模型
3.诊断
4。做决定下一步干什么
示例:垃圾邮件分类
垃圾邮件与正常邮件对比:
制作字典,一种方法是某个单词在邮件中出现就设为1,另一种是单词在邮件中出现几次设为几
第一种比较好
给予一些数据进行训练,预测y是多少
如果预测的结果y正确率并不高,可以尝试一些方法优化模型,像是下面
通过判断高方差还是高偏差来选择不同的优化方法
误差分析(Error analysis)
统计100个错误分类的邮件有什么共同的特点(基于数据集大小和时间选择统计数量)
像是都包含drug单词、故意拼写错误、不寻常的路由、盗窃密码、图片嵌入
发现故意拼写错误占的比重不大,要优先解决所占比重大的
优先解决示例中的包含drug字段的问题因为它100个邮件中有21个都是垃圾邮件
可以选择更多的数据,更多包含医疗邮件的来训练,或者更多与医疗相关的单词加入特征值
根据具体的问题思考不同的解决方法
添加更多数据(两种方法)
添加数据继续训练模型时,可以增加模型做不好的相关数据,像是示例中的医疗垃圾邮件,
也可以通过数据增强:像是判断图像A,可以将图像进行旋转,放大,缩小,增加对比度,镜像后作为输入数据,让模型更好的判断图像A
数据增强更高级的示例,在图像A上放一个网格,通过扭曲网格来制造更丰富的A的资源库
也可以在语音识别上用,给一段原始音频增加杂音等,让它变的更糟,来增加训练数据
对数据做无意义的处理事没有用的,像是给A加噪点,机器实际处理的时候并不是这样储存的
另一种方法是数据合成:通过人工数据输入来创造全新的数据示例(using artificial data inputs to create a new training example),(计算机视觉用的多)
以photo OCR为例:读取大屏上的文字
通过计算机上的不同字体,不同颜色来合成数据(右图),左图为真实数据
迁移学习(使用不同任务中的数据-using data from a different task)
迁移学习:像是下图的示例,有1百万个数据集用来训练识别猫狗人车等1000个分类的模型,你现在需要10个输出,只需要替换输出层为更少的神经元(0-9),然后通过两种训练方式重新训练(小数据集),重要的是先前的监督预训练(一百万数据),自己训练的过程使用小模型称为微调(Fine tuning)
方式1.只训练输出层的参数,其他层参数固定
方式2.训练所有层的参数
为什么迁移学习有用?
像是图像识别,每一层都识别不同的小形状,学会识别了通用的图像特征,所以也通用与其他图像处理任务
必须是相同类型的模型,适用自己的目标的模型才能微调,其他模型拿过来并不起作用
迁移学习的两个步骤
1.下载预训练模型
2.微调
机器学习项目的完整周期
确定项目范围->收集数据->训练模型->生产部署
部署Deployment
模型部署在推理服务器,app调用API使用模型预测
过程中也需要软件工程的参与
MLOps:机器学习操作--系统地构建和部署实践并维护机器模型
公平、偏见与伦理(Fairness,bias,and ethics)
bias-偏见问题
Adverse use cases-不良用例
奥巴马口型模仿
Guidelines-指导方针
1.多元化团队
2.行业标准、指南和文献
3.制定缓解计划
倾斜数据集的误差指标(Error metrics for skewed datasets)
如果一个罕见病只有0.5%的人会得,机器判断99%的概率准确,1%错误
当判断出是罕见病输出y=0这并不好
有0.5%错误率的模型之会输出y=0,和有1.2%错误率的模型会判断这是那种罕见病
后者比较好,并不是完全看错误率来判断模型好坏
精准率和召回率(Precision/recall)
例如100个例子
四个方格有不同的名字
精准率公式:True positives/predicted positive
召回率的公式:True positives/actual positive
如果模型始终预测零,那么模型没有意义,精准率和召回率可以帮助判断算法是否始终预测为零
这两个值越高越好,算法越有用
精准率和召回率的权衡(Trading off precision and recall)
分类的阈值一般为0.5,若提高到0.7甚至0.9,或者降低到0.3会发生什么?
提高阈值会导致精确率提高,召回率降低
降低阈值会导致精准率降低,召回率提高
F1 score:通过将精准率和召回率合并为一个分数,判断算法的好坏
方法:1.取平均值(不推荐,别用),2.计算F1 score(这个公式也称为P和R的调和-harmonic mean)
Summary
本周主要学习了以下内容
1.机器学习项目中如何决定下一步做什么,模型评估,模型选择,
2.训练集和测试集的训练方法,交叉验证集的训练方法
3.通过偏差和方差进行模型诊断,正则化如何影响方差和偏差,性能评估的基准,学习曲线
4.机器学习开发的步骤,误差分析,添加数据的两种方法
5.迁移学习,机器学习项目的周期,项目的部署
6.一些公平、偏见和伦理问题,指导方阵
7.精准率和召回率,如何权衡