利用四个多月的业余时间学习机器学习算法,本文试着站在准备入门产品经理的角度,进行一个小结和整理。
一、什么是机器学习
机器学习是研究计算机怎样模拟或实现人类的学习行为,通过观察和训练,发现事物规律,从而获得分析问题、解决问题的能力。简单来说,机器学习其实是学习从输入到输出的映射,即希望通过足够的数据,把数据中的规律与联系给找出来。
机器学习的必备条件:有规律可以学习、编程很难做到、有足够多能够学习到其中规律的数据
机器学习的三要素:数据、算法、模型
机器学习的三个阶段:准备数据、建立模型、模型应用
机器学习可以解决的问题有:回归、分类、聚类、归因(寻找关键因素)、异常检测
机器学习可以分为:监督学习、无监督学习、半监督学习、强化学习、迁移学习。
监督学习:监督学习的训练集要求每一条数据都包括输入和输出,也就是说必须带有特征和分类结果。训练集中的分类结果是人为标注好的,监督学习是一个通过已有训练样本的输入与输出训练模型,再利用这个模型将所有的新输入数据映射为相应的输出,对输出进行判断从而实现分类的过程。监督学习是最常见的传统机器学习算法,如决策树、支持向量机、朴素贝叶斯法、K近邻法、人工神经网络等都是监督学习。
无监督学习:无监督学习的训练集使用无标签的数据,每一条数据没有所谓的“正确答案”,模型必须自己搞明白最后呈现的是什么。无监督学习的目标不是告诉计算机怎么做,而是让计算机自己去学习怎么做,自己去探索数据并找到数据的规律。我们常说的“物以类聚,人以群分”就是最典型的例子,只要把相似度高的东西放在一起,模型就能发现它们的规律,对于新来的样本,计算新样本与原来样本的相似度后,模型可以按照相似程度对它们进行归类。常见的聚类问题都属于无监督学习。
半监督学习:在实际项目中,我们给数以亿计的数据都打上标签是不大现实的,往往拿到的是其中只有少量数据有标签的海量数据,这种情况非常不利于使用监督学习,半监督学习就是为解决此类问题而产生的,其目的在于利用海量未带标签数据,辅之以少量带标签数据进行学习训练,增强计算机的学习能力。虽然无标签数据不能提供类别信息,但是这些数据中蕴含了大亮的数据分布信息,这些规律对模型学习起到正向帮助的作用。
半监督学习可以被进一步划分为纯半监督学习和直推学习。纯半监督学习假定训练数据中的未标记样本并非待预测数据,而直推学习假定学习过程中所考虑的未标记样本就是待预测数据,学习的目标就是在未标记样本上获得最优泛化性能。也可以理解为纯半监督学习基于开放世界的假设,直推学习基于封闭世界假设。
强化学习:是智能系统从环境到行为映射的学习,目的是获得最大的奖励信号。强化学习会在没有任何标签的情况下,先尝试做出一些动作得到一个结果,通过这个结果的反馈,调整之前的行为。也就是说强化学习输出的是给机器的反馈,用来判断这个行为是正确还是错误的,其结果反馈有延时,有时候走了很多步以后才知道前面某一步选择的优劣。
迁移学习:考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的参数分享给新模型,把已经训练好的模型参数迁移到新的模型来帮助新模型训练数据集,从而加快并优化模型的学习。
二、数据的准备工作
在监督学习中,一般把数据集分成训练集、验证集与测试集三类。训练集是指专门用来供模型进行学习的样本数据。通过学习这些样本,模型可以调节自身的参数来建立一个分类器。验证集是用来调节模型的超参数的,测试集用来测试训练好的模型的分辨能力,测试模型的性能。当数据量多的时候,上述三个数据集可以按照5:2.5:2.5的比例,或者8:1:1的比例划分,当数据量少的时候,可以采用K折交叉验证法。
数据预处理:
我们在拿到原始数据时,可能会存在缺失值、异常值、度量范围不同、表达意义不准、定性特征不能直接使用、信息利用率低等问题,为了解决这些问题,需要采用数据预处理的方式对原始数据进行加工。
数据预处理分为数据清洗、数据集成、数据变换及数据归约四个步骤。
数据清洗一般步骤为:格式标准化、错误纠正、异常数据清理、清除重复数据,在面对实际问题时根据数据源的特点选择合适的方法进行清洗即可。
数据集成是指将多个数据库整合为一个数据库,在这个过程中需要着重解决命名差异、数据冗余以及数据值冲突三个问题。
为了进一步寻找数据之间的联系,挖掘更有价值的信息,我们可以尝试数据变换,以提升模型准确率,常见的数据变换方法有:标准化、归一化、正则化、二值化、对类别特征编码、缺失值的插补等。
在分析大样本集的内在关联前,一般会进行数据归约,通过数据归约的方式可以获得与原数据集相比更小的归约数据集,同时去除冗余特征,减少建模工作量,让模型的学习速度更快,精度更高。数据归约的三个基本操作是删除列、删除行和减少列取值的数量,常见手段有维归约、数据压缩、数量归约等。对一个数据集进行归约之前,需要对计算时间、预测精度以及数据挖掘的复杂度这三个方面进行分析,只有当项目拥有的资源能够满足这三方面条件时,才能进行大规模的数据归约。
在进行数据预处理时,可以通过数据可视化帮助我们直观的了解数据状况,常用直方图与散点图。直方图用于描述连续型数据,可以直观显示各组取值分布情况和差异;散点图通常用于比较不同类别的聚合数据,可以检查两两不同特征之间的关系,还可以观察点簇和离群点等情况。
特征工程:
除了提升原始数据的质量以外,通过特征工程,可以帮助计算机挖掘出特征与特征之间的联系,达到提升模型的目的。特征工程本质上是一种特征转化的过程,原始数据通过特征工程转化为更有意义的特征,其能够表述原始数据的内在关联关系。
特征工程包括特征构建、特征提取和特征选择三部分,特征构建是从原有特征进行组合运算生成新的特征,特征提取和特征选择都是为了从原始特征中找出最有效的特征。他们之间的区别在于,特征提取改变了特征间的关系,如组合不同特征得到新的特征,而特征选择是从原始特征数据集中选出子集,子集与原始数据是一种包含关系,没有改变原始特征的特征空间。
特征选择的方法很多,包括过滤法、封装发、嵌入法等,过滤法是指按照特征的发散性和相关性对各个特征进行评分,设定一个阈值,选择在阈值内的特征;封装法使用算法训练模型,根据目标模型计算的预测效果评分,每次选择若干特征,或者排除若干特征;嵌入法是先使用算法训练模型,得到各个特征的权值系数,再根据系数从大到小选择特征,与过滤法不同,它是通过机器学习训练来确定特征的优劣。不管哪种方法都是以特征是否发散、特征与目标的相关性如何这两个条件作为选择的标准。
三、模型评估方法与指标
常见的评估方法有留出法、k折交叉验证、自助法、调参确定最终模型等。
在性能度量上,回归任务最常用的性能度量是“均方误差”,分类任务中,常用的性能度量方式有:
1、错误率与精度
错误率是分类错误的样本数占样本总数的比例,精度(accuracy、准确率)则是分类正确的样本数占样本总数的比例。
2、查准率、查全率
查准率(precision、精准率)是针对预测结果而言的指标,它表示预测为正类的样本中有多少是对的;查全率(recall、召回率)是针对原始样本而言的指标,它表示原始样本中的正例有多少被预测正确。理想情况下,我们希望查准率和查全率两者都高,然而事实上这两者在很多情况下是互相矛盾的,当查全率高时意味着需要尽可能找到原始样本的正例,因此模型覆盖的数量会变多,模型就有更高的概率犯错,将原本不属于该分类的样本也加进来,这就导致查准率下降。
查准率与精度是比较容易混淆的两个评估指标,两者的核心区别在与,查准率是一个二分类指标,只适用于二分类任务,而精度能应用于多分类任务。
以查准率为纵轴、查全率为横轴,就得到了“P-R曲线”,显示该曲线的图称为“P-R图”,可以直观的显示出学习器在样本总体上的查准率和查全率,在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者性能优于前者。“平衡点”(Break-Event Point、BEP)是“查准率=查全率”时的取值,可以综合考虑查准率和查全率的性能度量。
3、F值
BEP相对而言还是过于简化了些,为了使查准率和查全率有个更综合的评价,引入F指度量(F-Measure)的概念,其计算公式为:
当查准率和查全率最接近时,F值最大,其系数固定为1时,F值就变成了F1度量,其公式为:
4、ROC与AUC
ROC(Receiver Operating Characteristic、受试者工作特征)曲线可以帮助我们从图像的角度分辨两个分类结果的分布情况以及选择模型合适的阈值,其横坐标为假正类率(FPR=FP/(FP+TN)),纵坐标为真正类率(TPR=TP/(TP+FN)),对于一个分类器而言,每个阈值下都会有一个FPR和TPR,这个分类器就可以被映射成ROC平面上的一个点。ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。
在进行学习器比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性的断言两者优劣,如果此时一定要进行比较,较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。AUC值是指随机给定一个正样本和一个负样本,分类器输出该正样本为正的概率值比分类器输出该负样本为正的那个概率值要大的可能性,AUC值越高代表模型的排序能力越强。
5、偏差与方差
“偏差-方差分解”是解释学习算法泛化性能的一种重要工具,泛化误差可分解为偏差、方差与噪声之和,偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
一般来说,偏差与方差是有冲突的,称为偏差-方差窘境。假定我们能控制学习算法的训练程度,在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器发生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已经非常强,训练数据轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学习到了,则将发生过拟合。
四、算法总结
(一)回归分析
回归分析是最基础最常用的算法之一,它是一种确定两个及两个以上变量间相互依赖关系的统计分析方法。回归分析按照涉及的变量数量,可分为一元回归分析与多元回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。
在回归分析中,自变量和因变量是线性关系的,如果只包括一个自变量和一个因变量,称为一元线性回归,如果包括两个或两个以上自变量,称为多元线性回归,在线性回归中,我们很难找到完全拟合所有真实样本点的函数,预测点和样本点之间总是存在误差,因此寻找最理想的拟合函数的过程变成了寻找使得误差最小的函数的过程,在数学上表示为损失函数的最小化求解,通常可以使用最小二乘法求解损失函数的最小值。在统计学中常用判定系数R2判断回归方程的拟合程度,R2越大代表回归线拟合程度越好。
优点:
1、实现简单,计算简单,速度快
2、可以根据系数给出每个变量的理解和解释
缺点:
1、不能拟合非线性数据
2、对异常值敏感
应用场景:自变量与因变量存在某种线性关系的场景,如产品运营中预测目标的趋势发展。
逻辑回归是在线性回归的基础上,套用了一个激活函数,即sigmoid函数,使得原本敏感的函数变的更柔和,将原本对正类或负类的结果预测,转化为对正类或负类的概率预测。逻辑回归实际是一种分类学习的方法,但其本质上仍然是一个线性回归模型,因此逻辑回归求解方法与线性回归相同,都是通过构造损失函数的方法逼近最优解,逻辑回归中利用最大似然法建立目标函数和损失函数,通常使用梯度下降法求解损失函数的最小值。
优点:
1、易于理解和实现
2、分类时计算量非常小,速度很快,存储资源低
3、便利的观测样本概率分数
缺点:
1、当特征空间很大时,逻辑回归的性能不是很好
2、容易欠拟合,一般准确度不太高
3、一般处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),
4、需线性可分,对于非线性特征,需要进行转换
应用场景:
1、用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等
2、Logistic回归的扩展softmax可以应用于多分类领域,如手写字识别等
3、经济预测、信用评估
4、测量市场营销的成功度、预测某产品的收益
5、疾病诊断
(二)决策树
决策树属于有监督学习,是一种基本的分类和回归方法。一般情况下,一棵决策树包含一个根节点、若干个内部节点和若干个叶子节点,树中的根节点与每个内部节点都表示一个特征或属性,叶节点表示一个分类结果,每个分叉路径代表某个可能的属性值。选择特征的评判标准不同,衍生了不同的决策树算法。
ID3算法中,使用信息增益作为纯度的度量。信息增益=信息熵-条件熵,可以用该公式计算每个特征的信息增益,然后选取使得信息增益最大的特征作为判断节点。
在C4.5算法中,使用增益率作为度量标准,这种方式克服了用信息增益选择属性时偏向选择取值多的属性的不足,信息增益率=信息增益/分裂信息度量,选择信息增益率最大的特征作为判断节点。C4.5算法采用了剪枝方法,避免模型产生过拟合的现象。
在CART算法中,使用基尼系数来代替信息增益率,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益的概念是相反的。
三种决策树对比如下:
优点:
1、输出结果易于理解,可以可视化分析,容易提取出规则
2、计算复杂度不高,在相对短的时间内能够对大型数据源做出可行且效果良好的结果,测试数据集时,运行速度比较快
3、对中间值的缺失不敏感,比较适合处理有缺失属性的样本
4、可以处理不相关特征数据
5、可以同时处理标称型和数值型数据
6、路径是互斥和完备的
缺点:
1. 容易发生过拟合(随机森林可以很大程度上减少过拟合)
2. 容易忽略数据集中属性的相互关联
3. 对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向;信息增益准则对可取数目较多的属性有所偏好(ID3),而增益率准则(CART)则对可取数目较少的属性有所偏好
应用场景:
决策树早期主要用来解决二分类问题,在企业管理实践,企业投资决策,恶意入侵监测、预测互联网用户在线广告点击率等场景上都有较高表现,由于决策树很好的分析能力,在决策过程应用较多,但决策树寻找到的最优解只是一个局部最优解,这使得决策树的适用场景比较受限。
(三)朴素贝叶斯
朴素贝叶斯是一种有监督的学习算法,它是以“贝叶斯定理”和“特征条件独立假设”为基础。其中心思想很简单,先对某事会不会发生预估一个主观的先验概率,再根据随后观察到的结果进行调整,随着调整次数的增加,得到的概率将会越来越精确,这个概率称为后验概率。计算时,先计算联合概率分布,然后再利用贝叶斯工时计算给定的某个样本数据后,被分到每个类别的概率分别是多少,然后取被分到概率最大的类别作为该样本数据的类别。
在文本处理领域,朴素贝叶斯算法有广阔的应用前景,非常适合处理文本类的信息,例如垃圾邮件检测、违规信息检测及文档分类等。其将条件变量之间的独立性假设应用到文本分类中:一是假设各个特征词对分类的影响是独立的;另一个是假设词语先后顺序的变化与词频对于结果没有影响。但实际情况中词语先后顺序与词频对邮件内容有直接影响,因此我们采用多项式模型和伯努利模型来避免条件独立假设带来的影响,伯努利模型也称文档模型,以“文档”为统计单位,统计某个特征词出现在多少个文档中;多项式模型称为词频模型,以“单词”为统计单位。伯努利模型更适合处理段文档,在特征数量较少时效果较好,多项式模型适合处理长文档,在特征数量较多时效果较好。
优点:
1. 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率
2. 对大数量训练和查询具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已
3. 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练)
4. 对缺失数据不太敏感,算法也比较简单
5. 朴素贝叶斯对结果解释容易理解
缺点:
1. 需要计算先验概率
2. 分类决策存在错误率
3. 对输入数据的表达形式很敏感
4. 由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好
(四)支持向量机
支持向量机(SVM)是一个以“最大间隔”作为分类标准的二分类算法。其核心思想是对于给定的数据集,在样本空间中找到一个划分超平面,从而将两种不同类别的样本分开,并且这个划分超平面对于最接近的数据点间隔最大。
对于线性可分的数据,我们考虑从点到平面的距离公式入手,给出这个划分超平面的数学定义。首先通过“支持向量”求出超平面的表达式,然后构造这个超平面的约束优化条件,接下来将有约束的原始目标函数转换为无约束的拉格朗日目标函数。为了简化求解过程,我们使用拉格朗日的对偶性,将不易求解的优化问题转换为易求解的优化问题,最后再利用序列最小优化方法(SMO)求解得出超平面,这就是线性SVM的求解过程。
对于非线性可分的数据集,我们需要将低维线性不可分的数据转换到高维,让数据集变的线性可分。在转换到高维空间的过程中,由于内积的计算量太大,导致无法直接计算,因此我们需要借助核函数来简化计算。在实际项目中,我们不知道特征映射的形式,所以使用者只能多次尝试各种核函数,选择其中效果最好的。
以上情况都是没有噪声数据的理想情况。当数据存在噪声时,我们需要使用软间隔支持向量机。软间隔支持向量机是在硬间隔的基础上增加一个松弛因子,让误分类的样本多了一个惩罚项,在实际使用时可以通过惩罚项调节误分类样本与平面最大间隔的平衡。
优点:
1. 可以解决高维问题,即大型特征空间
2. 解决小样本下机器学习问题
3. 能够处理非线性特征的相互作用
4. 无局部极小值问题;(相对于神经网络等算法)
5. 无需依赖整个数据,只需保留几个支持向量就够了,极大地减小了内存的占用,而效果却不差
6. 泛化能力比较强
缺点:
1. 当观测样本很多时,效率并不是很高
2. 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数
3. 对于核函数的高维映射解释力不强,尤其是径向基函数
4. 常规SVM只支持二分类
5. 对缺失数据敏感
应用场景:文本分类、图像识别(主要二分类领域,毕竟常规SVM只能解决二分类问题)