本文根据Jin Liang的《Getting Started with Machine Learning》ver 0.96而写,基本上就是翻译,但并不是逐字翻译。
第一部分 机器学习基础
01.概述
应用:自动驾驶,面部识别,垃圾邮件识别,信用卡欺诈识别,机器验伤,销售预测,语音识别,机器人。
深度学习包含于机器学习包含于人工智能。
机器学习使使计算机程序从已有的数据中学习已预测新的数据,趋势。
机器学习的流程:
①选择数据,分成训练数据,验证数据,测试数据。
②数据建模,利用数据的相关特征训练相关模型。
③验证模型:使用验证数据检验模型。
④测试模型:使用测试数据测试已验证的模型。
⑤使用模型:部署整个模型,对新数据进行预测。
⑥改进模型
与传统方法的区别:传统方法是人事先制定好所有解决问题的方法,而机器学习是从数据中自己学习解决方法。
与数据挖掘的区别:数据挖掘是从数据中寻找未知的模式和关系的科学,机器学习是应用事先推断的知识于新的数据以在实际问题中做出决策。
考虑是否需要机器学习?
①你是否需要机器学习?
你是否需要将任务自动化?有复杂的规则和非结构化数据的大量任务是合适的选择。
②能否将你的问题清晰的用公式表达?
要何种输入,进行何种预测?
③你是否有合适的例子?
机器学习总是需要数据的。通常来说,数据越多越好。数据需有两个部分(有监督学习),特征和标签。
④数据的规则性
机器学习是学习规则和模式
稀少或不规则的数据难以学习。
⑤你能否找到数据的真实意义?
样本常以特征矩阵的形式出现,成功的机器学习需要好的特征。
⑥你如何定义成功?
评估函数需支持商业目标。
你应当何时使用机器学习?
涉及大量数据,但没有现成的公式或方程的任务或问题。
如何创建机器学习模型?
将数据划分为训练集和测试集。用训练集数据进行数据清洗,特征工程,模型选择,参数优化,最后建立模型。用模型对测试数据进行预测,最后将预测值与真实值进行对比。
机器学习的基本任务
分类(预测类别):决定数据点属于哪个类别。
回归(预测值):计算与样本点相关的连续值属性。
02.理解商业
理解你的问题,包括以下任务:
①.定义你的商业目标
②.评估你的形势
③.定义你的数据挖掘目标
④.制订你的项目规划。
数据科学可以回答的五个问题:
①这是A还是B?
②它是怪异的吗?
③有多少?
④这是如何组织的?
⑤我接下来该做什么?
03.理解数据
收集原始数据
描述数据
探索数据
检验数据质量
在考虑能做多好之前先考虑能不能做。
04.数据准备
数据清理准备在整个机器学习过程中耗时最多。约一半以上的时间。
真实世界的数据是脏的,影响数据质量的因素:
①无效数据
②数据格式不一致
③属性间的依赖关系
④重复数据
⑤数据缺失
⑥书写错误
⑦位置错误:一个属性包含另一个属性的数据。
数据预处理避免“垃圾进,垃圾出”:数据清洗,数据重构,文本清洗,数据归一化(normalization),数据离散化。
处理缺失值的方法:删除,用空值,平均值,高频数值,回归值来填充。
异常值的问题,有的算法对其很敏感。
对奇异值的处理:保留、抛弃或用邻近值代替。
这样处理的点如果少于5%,不会影响假设检验,否则可能影响样本代表性,降低分析的有效性等。可以考虑数据转换,或使用其它数据处理技术。
数据归一化:将数据缩小到指定范围内。
①最大值最小值法
归一化后的样本值 = (原值 - 最小样本值)/(最大样本值-最小样本值)
②正态化
z=(样本值 - 平均值)/标准差
③数值小数点位数改变。
数据描述:可以用可视化等方法,可以用分类方法将连续数据离散化。
数据缩减:样本再取样,对属性取样,对样本分组,每组用一个数据代表。
文本清洗。
特征工程:这是机器学习中的关键任务。从原始数据中提取特征的过程。它是一种艺术。将数据纳入模型与避免较多的数据纳入之间存在平衡。引入不相关的变量会增加模型噪音。
特征即输入,自变量;目标即结果,因变量。
特征工程可以增强你的数据。
为何应该执行特征筛选?
①简化模型便于研究者/应用者解释。
②缩短训练时间减少学习过程。
③避免维度灾难(curse of dimensionality)
④通过降低过拟合增强模型的通用性。
维度灾难:当维度高于某特定限度后,模型表现反而下降的现象。原因,当维度越高时,平滑填充整个空间的数据需要指数级的增长。但实际中数据的规模是固定的。
现代特征选择的方法:过滤(filter),封装(wrapper),嵌入(embedded method)。
传统方法:前向法(逐渐向模型添加特征),后向法(逐渐从模型中排除特征),逐步回归法。
①过滤法:纳入所有特征-选择最佳子集-学习算法-检查模型表现。
通过统计学方法检验每个特征与结果的相关性,排序,从而决定纳入和排除哪些特征。
该方法倾向于纳入多余的变量,因为它不考虑变量间的关系。
②封装法:通过一个前瞻性的模型来给特征子集评分。
所有特征的集合-产生一个子集,执行学习算法-反复进行上一步,选出最佳子集-执行。
该方法将特征子集的选择看做一个搜索过程,用一个前瞻模型来评估子集。这种方法考虑了变量之间的关系。它运算强度比较大,比较耗时。但通常它能给出某个模型的最佳特征子集。
③嵌入算法:特征选择是模型建构过程的一部分。
所有特征的集合-产生一个特征子集-运用学习算法建模-评价表现-重复上面三步,选择表现最佳的特征子集。最常用的是正则化方法(regularization)。
后两种算法更耗时,更易产生过拟合。
特征选择与降维
特征选择减少了特征数量,但通常不被称为降维。特征选择产生一个特征的子集但并不改变其数据。降维方法可以通过改变数据将原有的特征转化为新特征。
谷歌的特征工程的定义:将原始数据转换为特征向量的过程。
05.建模
建模是一个综合数据结构,算法,数学等以找到数据集中特征与目标的关系的交互性过程。
模型定义了特征与标签之间的关系。
机器学习过程:获取原始数据,数据清洗处理,特征工程,建模,模型检验,应用。
建模是一个反复试验调整的过程。
通常在真实值与预测值之间有差异。平均误差平方(Mean square error,MSE)常用来表示误差的大小,也被称为损失函数或成本函数。
模型的训练是一个寻找最佳参数使得预测误差最小的迭代过程。
梯度下降法是寻找最佳参数的常用算法。
参数和超参数
超参数是训练前指定的(根据经验等),决定模型的不同。”调参”就是调整这个。参数是从数据中学习到的。
超参数的例子:神经网络的层数,学习率。随机树森林里树的数目。
分类算法,根据结果有两分类和多分类。
机器学习分四类:监督学习,无监督学习,半监督学习,增强学习。
需要选择合适的算法,不合适的算法准确度很低。
选择算法的因素:
①数据的大小,质量和性质
②可用的计算时间
③任务的紧急程度
④你想用数据做什么?
06.模型评估(Evaluation)
什么是好的模型?
准确度高,可解释性强,快速,可扩展性强。
在训练阶段表现良好的模型可能在实际中表现很差。
能在新数据中有很好的普遍性的模型很关键。
欠拟合和过拟合
模型不能抓住数据中的重要特征叫欠拟合。它甚至在训练集中表现都很差。这通常意味着使用了一个过度简单的模型。(高训练误差,高测试误差)
模型能较准确的拟合训练数据但在新数据上表现过差叫过拟合。(低训练误差,高测试误差)
这两种情况都会导致预测表现太差。
模型检验其对新数据的有效性。通过倒置或分割数据以检验模型的有效性。在监督学习时抽出一部分数据作为测试集,使用训练集训练模型,使用测试集测试模型。
模型检验策略:
①hold-out检验:将数据分为训练集和测试集两部分,不要拿测试集训练模型。不建议采用这种方法,因为这种检验不能公平的评估假设的普遍性。
更好的检验方法:将数据划分为训练集,交叉验证集和测试集三部分。使用交叉验证数据选择模型,测试数据来评估模型。这是吴恩达建议的。
对于小数据集,三者的比例约为6:2:2。对于大数据集,三者比例为98:1:1。
②k折交叉验证(k-fold cross validation)
将数据集均分为k份大小相等的部分。重复进行k次hold-out检验。每次,其中一份数据用作测试集,其余k-1份用作训练集。计算每次检验的的误差。
这一方法的优点是数据划分方式对结果的影响很小。每份数据有一次作为测试数据,有k-1次作为训练数据。随着k的增大,误差减小。
③留一交叉检验(leave-one-out cross validation)
上一个方法的特例,k=n,即有多少样本点,就分成多少份。每次只留一个样本点做测试数据,其余数据都作为训练数据。这种方法需要很大的运算量。
检验方法的选择:大数据集选择hold-out检验,计算量小,适合于深度学习,因为数据量巨大。但传统的数据划分如80:20不适合于深度学习。小数据集选择交叉验证。10折比较常见,当更小的值也可以选。
评价模型的表现
模型评价矩阵
分类模型
准确性(Accuracy)
精确性(Precision)
召回(Recall)
F值
ROC
AUC
Log Loss
回归模型
MAE(平均标准差)
MSE(平均方差)
RMSE(平均方差根,Root Mean Square Err)
MAPE(平均绝对误差百分比)
R²
评估分类算法
①准确率 = 预测正确例数/总例数
对于偏态数据准确率并不是一个好的指标。比如癌症检测,准确率很高的方法可能也是没用的。
②精确性 = 正确的阳性预测/所有阳性预测,这回答的是预测是阳性的有多大比例是真的阳性。
③召回率 = 正确的阳性预测/(正确的阳性预测+错误的阴性预测),它回答的问题是真正的阳性中间有多大比例被预测为阳性。
预测错误的代价
有两种错误:纳假(第一类错误),拒真(第二类错误),一个概率高另一个概率就低,要根据犯错的成本来选择。
④F值 = 2×PR/(P+R)
值越大越好
⑤ROC曲线
正确阳性率与错误阳性率在不同决定水平的关系的曲线。
曲线显示了当你允许越来越多的错误阳性的时候能得到多少正确阳性分类。
曲线越靠左上角越好。
a是随机猜测,c比b好。
⑥AUC,ROC曲线下的面积,是用单独一个数衡量模型表现的最好方法。值越高越好。随机猜的模型,AUC=0.5。
评估回归算法
①MAE:误差绝对值的平均值。
测量预测值与真实值的接近程度。之所以取绝对值,是防止正负误差相互抵消。最好的回归有最小的MAE值,因此MAE值越小越好。
②MSE:误差平方的平均值
用误差平方值代替绝对值。会放大误差较大者的影响,跟MAE一样,越小越好。
③RMSE:误差平方和的平均数的平方根。
即MSE开平方根。是在回归分析中最常用的指标。它有一些缺点,比较容易受异常值影响。其对大的误差值更加敏感。同样越小越好。
④MAPE:平均绝对误差比例
当数据没有极端值(包括0)时最好。当数据为0或接近0时该指标会给出混乱的结果。越小越好。
⑤R²
r称为皮尔森相关系数,衡量两个变量的线性相关性。取值范围为[-1,1]。当值为0时二者没有线性关系。
R²是测量模型是否拟合真实数据的标准方法。等于r^2。它描述了因变量的变化能由模型来解释的比例。它取值范围[0,1],越高越好。在使用时要小心,太高的值要怀疑。
具体计算略了。
R²的问题:①往模型中加入更多的特征,R²的值会增加,尽管特征可能与因变量无关。因此一个特征更多的模型可能比特征较少的模型的R²值高,其预测能力却未必如此。②当模型有更多特征和更高阶的多项式时,会拟合噪音,即过拟合,而R²值会较高,产生误导。
⑥调整R²
是R²的修正版。如果加入更多的无关特征,模型的调整R²会降低。而加入更多相关特征,模型的调整R²会升高。调整R²总是小于或等于R²。
误差的来源有两个:偏倚和变异。
变异是预测值偏离其平均值的程度。
偏倚是预测值与真实值的差异。
预测误差可以分解为上述两个部分。
低偏倚及低变异是最好的,高偏倚和高误差是最差的。但通常无法两者兼顾。在选择模型时需要权衡两者。选择能平衡二者并使总误差最小的模型。
左侧是欠拟合(偏倚),中间刚好,右边是过拟合(变异)。
模型在训练集上很好,在测试集上很差,是变异问题。如果模型在训练和测试集上都很差,是偏倚问题。
可以使用交叉验证来诊断偏倚和变异问题。
高偏倚问题的特征:高训练误差,验证误差与训练误差类似。
高变异问题的特征:低的训练误差,非常高的验证误差。
处理:
①高偏倚(欠拟合):使模型更复杂(尝试其它模型;如更大的神经网络。);使用更复杂的特征;调整超参数;使用一系列复杂度更低的算法(bosting)
②低偏倚而高变异(过拟合):获取更多数据;减少特征数量;使用正则化;换成复杂度较低的算法;使用一系列高复杂度的算法(Bagging/随机树森林)
学习曲线是描述训练误差和测试误差随训练集的大小增加的变化的曲线,用来诊断偏倚和变异。
上面是典型的高变异的学习曲线,下面是典型的高偏倚的学习曲线。
具体调参的内容略了。
07.模型应用
应用训练好的模型和真实数据进行预测。模型应用以后还要进行评估、监控、管理。
评估分为离线评估和在线评估。模型的表现会随时间下降,对于表现不好的模型,撤回。
08.其它话题
几个建议:
①快速建立初始系统,再迭代。别在一开始就过度思考。
②使用交叉验证来评估模型的通用性。
③使用偏倚/变异分析和错误分析作为进一步改进的先导。
谷歌有数据集搜索引擎。
接下来第二部分是具体各种机器学习算法的介绍。下次吧。
我发文章的四个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的博客园博客地址: https://www.cnblogs.com/zwdnet/
我的微信个人订阅号:赵瑜敏的口腔医学学习园地