社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

文末赠书 | 推荐算法背后的机器学习技术

机器学习与推荐算法 • 3 年前 • 306 次点击  
嘿,记得给“机器学习与推荐算法”添加星标

机器学习是一种利用统计和其他数学理论给予计算机学习能力的方法。机器学习和统计其实都有相同的目标:从数据中学习知识。但是具体的手段和理念有所不同。机器学习是计算机科学的一个分支,侧重的是从数据中建立有机的系统,而不是用目的很明显的规则去编程。而统计学是数学的一个分支,侧重的是用数学公式建立变量之间的联系。近年来,随着计算机硬件成本的不断降低和数据量的极大增加,数据科学家得以充分利用机器学习手段来分析和挖掘数据。另一方面,统计建模技术则早在计算机问世前就已经存在。

01

机器学习预测结果推广性理论

对于机器学习问题而言,我们最关心的是算法的预测效果。但是算法训练结果都来自于训练数据,因此核心问题转化为算法的推广性,或者如何减少推广误差(generalization error)。对此,机器学习有其理论框架,因此能够从根本上保证了机器学习的推广性。有两种常用的理论框架,如表1所示。

我们以相对简单的PAC框架为例来进一步讨论, PAC框架把下面几个相关问题综合起来:

(1)训练数据样本的大小为m,

(2)满足数据的所有可能的假设或者概念空间H,
(3)得到的假设与真正目标概念之间的误差

(4)机器学习成功的概率

在PAC框架下,我们可以保证,机器学习可以学到这样一个假设(或者说模型) h,随着数据的增加,其误差接近于0,而得到误差接近于0的概率接近于1,表达如下:

                         

上述公式看似比较绕弯,但表达的意思就是,随着数据的增加,机器学习找到一个误差和真实结果接近于0模型的统计概率是非常大的。这便从理论上保证了训练数据得出的机器学习结论可以推广到更大的数据空间中。

对于一个具体的机器学习问题,我们可以进一步计算期望的推广性误差(expected generalization error)。假如机器学习想要学到的,真实的目标方程为:

                       

其中,x为自变量或者特征变量, y为目标或者标签变量。自变量取值分别为x1,x2到xn, 分别对应每一个的y的观察值。y的观测值或者测量值和真实值,往往存在一定的差距,并且通常满足这一关系:

                       

其中,被称作噪音或者固有的测量误差,并且其分布满足高斯分布,平均值为0,标准差为。通过机器学习,我们的任务是要找一个近似方程来尽可能的逼近真实的方程f(x)。而判断机器学习给出的方程或者模型效果好坏的方法,就通过计算如下所示的均方差大小的方式:

 其中,

                                      

上式的证明过程在这里我们不再详细推导,但其结论的重要意义在于,机器学习总的误差可以被分解为偏差和方差两个部分。这就说明,如果要减少机器学习算法的误差,要尽可能的减少两个误差来源。如果只关注一个来源,另一个来源通常会增加,从而导致总的误差并不能减少。

为了直观理解偏差和方差的区别,我们举一个打靶的例子,便可以形象的说明问题。假设四个射手连续射击100次,每个人的靶子弹孔分布如图1所示。

1     机器学习模型偏差和方程说明举例

低偏差的情况是所有弹孔离靶心的平均距离小,上图中的最上面两个靶子就属于这种情况。而低方差的情况则是所有弹孔的位置的分布范围比较小,上图中的最左边两个靶子属于这种情况。当然,在上面四种情况中,低偏差和低方差的情况最理想。

在上面射手的例子中,偏差和方差的情况取决于射手本身的素质。而在机器学习算法训练中,偏差或方差则跟模型的复杂度有直接关系。如图2所示,机器学习模型偏差和方差分别随着模型复杂度提升的变化有这样的曲线关系。

图2  机器学习模型偏差和方差随着模型复杂度变化趋势

如图2所示,随着模型复杂度上升,模型的偏差总是会逐步降低,但是方差却会逐渐上升,因此总的误差开始逐渐变小,然后有逐渐增大。根据上面得到的模型误差分解公式,我们可以看出,当总的误差最小,此时的最佳模型误差所对应的模型复杂度不能太小也不能太大。

举一个例子,在线性回归模型中,模型的参数越多,模型的复杂度越高。如果我们用100个维度的线性回归模型去拟合100个训练数据点,我们就会得到完美的预测结果。但是很显然,这种模型并不适合推广。另一方面,如果我们用有限的维度(模型复杂度低),比如我们用一次项线性回归去拟合一条变化趋势特别复杂曲线,其效果同样不会太好。


02

机器学习问题的分类

机器学习算法是一个大的家族,狭义上是统计学的一个分支,广义上是人工智能研究的基础。按照不同的标准,机器学习算法可以有不同的分类方式。在下一章节我们深入讨论每一种典型的机器学习算法原理之前,我们先看一下如何对机器学习算法进行大的分类。

第一种分类方法是,监督学习(supervised learning)对应非监督学习(unsupervised learning),再对应强化学习(reinforcement learning):

     (1)监督学习:通过提供许多对输入(X)和对应的输出(Y)的历史数据,通过优化的方式找到最佳的映射关系。一旦从训练数据学到了这一种映射关系,我们就可以随时根据新的输入数据(X),从而预测给出最佳的结果(Y),比如常见的分类问题。

    (2)非监督学习:和监督学习不同,输入只有X,而没有Y。是通过数据自身的特征,把相似的数据聚合到一起,并不涉及Y变量。比如聚类问题,把大量数据点按照相似性聚合到不同的种类。

    (3)强化学习:研究在一个特定环境中如何采取每一步的行动,从而获得最大的累积奖励。比如电子游戏中的打坦克游戏,目的是避免对方攻击和击毁最多的坦克。强化学习和标准的监督学习不同,它并不是通过提供许多对正确的输入和输出(X,Y)形式去寻找答案,也不用太担心优化过程中的次优解,而是通过学习研究主体所在环境对主体行动的反馈,在已有知识和未知领域两者中去寻求平衡,追求累计奖励的最大化。强化学习在某种形式上最贴近人们通常意义上对人工智能的想象,比如机器人自动规划路线和下围棋。

第二种分类方法是,参数化(parametric)对应 非参数化(non-parametric)方式:

    (1)参数化:参数化算法,需要假设底层数据符合参数化的方程形式。比如朴素贝叶斯模型,回归模型,和传统的神经元网络算法。参数化算法,具有形式简单,优化速度比较快,需要训练数据量相对较少等优点。

    (2)非参数化:非参数化算法对底层数据遵守的规律不做任何假设,直接依靠数据得到模型。比如决策树算法,kNN算法(k最邻近算法)。同参数化算法相比,非参数化算法更加灵活,效果有时候比较强大。但是这种方法需要比较多的数据才能达到较好的效果,速度较慢,需要警惕过度拟合的风险。

第三种分类方法是,生成式(generative)对应判别式(discriminative)模型,机器学习算法根据自变量X寻求目标变量Y的预测,本质上是寻求条件概率函数P(Y|X)的表达形式,即已知X得到Y的条件概率(比如已知我们身在东北,寻求冬天下雪的概率):

     (1)生成式:生成式算法假设并且从训练数据中得到目标变量Y的分布方程P(Y),以及自变量特征X的条件分布方程P(X|Y)。然后根据贝叶斯公式,我们可以得到最终的预测方程P(Y|X)。比较典型的例子,是朴素贝叶斯算法。

     (2)判别式:判别式算法直接根据数据去训练并且得到预测方程P(Y|X),比如逻辑回归算法。

第四种分类方法是,分布式对应非分布式模型:

    ( 1)分布式:分布式算法是指那些可以很好的以并行化编程方式解决,从而依托大数据计算平台,针对单机不能轻易处理的大数据训练模型的算法。这些算法包括K-means聚类算法,朴素贝叶斯,逻辑回归,PageRank等。

    (2)非分布式:许多效果优异的机器学习算法,并不容易被改造成分布式计算方式。比如支持向量机(SVM),梯度增强算法(GBM)等。


03

二分类模型的评价方法

工作中,很多时候我们需要预测一个事件发生的概率或者事件所属类别。比如客户申请信用卡时候,银行会预测该客户将来是否会逾期,或者说不还贷款的概率有多大。在深入理解机器学习模型的具体的建模技术手段,流程,以及底层算法原理之前,我们可以先了解如何通过量化的方法去评价一个机器学习模型的预测效果好坏。

机器学习模型可以广泛的应用在不同的领域,比如预测房价或者股票,预测图片中的动物属于哪一种动物,也可以帮助机器人优化行走路线。在这里我们重点分析在机器学习领域最常见的一种应用:二分类模型,比如预测贷款客户是否会逾期。除了二分类模型,其他常见的还有多分类模型和回归模型,其对应的评价方法有所不同。

二分类机器学习模型的输出形式有两种,一种是直接给出预测的种类,第二种是给出每一分类的概率。模型的输出形式取决于实际业务中的具体需要,同时也导致了了对其不同的评价方法。


👉 3.1 混淆矩阵定义和使用

有些二分类模型会直接给出预测的种类,对于这种模型,最直接的评价方式是查看混淆矩阵(confusion matrix),如图3所示。

图3  机器学习模型的混淆矩阵

从图3的混淆矩阵中可知道,待评价的数据样本中,真正的正样本数量为P, 真正的负样本数量为N, 正样本被模型正确预测为正样本的数量为TP, 正样本被模型错误预测为负样本的数量FN, 负样本被模型错误预测为正样本的数量FP, 以及负样本被模型正确预测为负样本的数量TN。显然,TP 和TN的数量越高,FN和FP的数量越小,就说明模型预测越好。基于这几个数量值,我们进一步总结出得出下面的几个不同的评价指标:

(1)精确率(precision):

精确率的意义在于回答这个问题,在所有预测为正样本的结果中,到底有多少是真正的正样本。

(2)召回率(recall):

(3)准确率(accuracy):

准确率的意义在于,所有样本中,多少预测正确,即正样本被预测为正样本,负样本被预测为负样本。

(4)F1 score:

F1 score的意义在于把precision 和 recall 两个指标综合起来,给出一个更全面的评价指标。类似的评分还有其他形式,但本质上都是对precision 和 recall的一个加权平均,试图给出一个更加综合的评价指标。

上面的公式可能有些抽象,我们举个具体的例子。比如一家电商公司需要预测什么用户会去网站买东西,那就需要模型人员给出一个营销模型,从而决定对什么样的人推送广告。精确率指标关心的就是所有被推送广告的人群中,到底有多少人会真正来买东西,成为我们的客户。而召回率就是,假设我们预先被告知某个城市有10万人肯定是我们客户群体(具体是那些人,我们不知道),那么我们根据模型推送了广告以后,问题是到底这10万人中我们覆盖了多少人。

如何合理的利用上面几个指标来评价模型,需要结合具体的业务和数据来做判断。比如,了解数据的不平衡性对使用什么指标来评价有很大帮助。对于高度不平衡的数据,准确率通常是一个具有欺骗性的指标。假如数据里面99%的标签为正样本,那么,即使一个随机模型,准确率也能达到99%,但这样的模型显然不是我们希望得到的模型。这个时候精确率和召回率就能更加准确的评价一个模型。

但对于大多数模型而言,我们往往又不可能同时提高精确率和召回率。提高精确率的同时往往会牺牲召回率,反之亦然。如何取舍,更多要取决于当前的业务。比如重大疾病预测模型,提高召回率是第一位的,这是因为漏诊病人的重大疾病和把病人小病误诊为重大疾病相比,前者的危害要高得多。相反,对于网购业务中的薅羊毛客户的预测模型,如何提高精确率就更加重要。这是因为,把普通消费者误判为羊毛党会极大的损害用户体验。


👉 3.2 ROC曲线及其应用

许多分类模型的输出结果是连续性数值,比如逻辑回归给出概率,随机森林给出多棵树的投票结果,支撑向量机算法给出离分类边界的距离等。这些模型输出的连续数值,有的可以直接被解释为概率,有的可以用刻度的方法转换为概率。如果设定一定的阈值,比如0.5, 那么概率大于0.5 的可以当作一个分类,小等于0.5则被预测为另一个分类。一旦选择这种基于阈值的分类办法,模型评价便可以用上节所述的混淆矩阵方法来评价。

但是直接基于模型的输出概率进行评价,我们可以得到一个更加全面客观的评价方法。问题的核心在于,设定什么样的阈值更加合理。我们可以在0和1之间选定任意的阈值,不同的阈值会导致不同的模型效果。有的阈值可以使模型得到较高的精确率,有的阈值可以使模型得到更高的召回率。因此我们可以针对许多不同的阈值,得到一系列不同的指标,从而全面的去评价一个模型。

ROC (Receiver Operating Characteristic) 曲线是一种常用的全面评价模型的方法,对每一个选定的阈值,我们计算出对应的:

(1)True Positive Rate (TPR) = TP/P,

(2)False Positive Rate (FPR) = FP/N。

假如我们选择阈值为1(意味着我们认为模型输出值大于1的为正样本),那么TPR 和 FPR都为0,因为概率最大也就为1,于是没有样本被预测为正样本。但假如我们选择阈值为0(意味着是我们认为模型输出值大于0的为正样本),那么TPR 和FPR 都为1,因为所有样本都被预测为正样本。按照这样的逻辑和流程,我们从0到1依次采用不同阈值,每个阈值都会给出对应的TPR(Y坐标)和FPR (X坐标)数值, 从而我们可以得到如图4所示的ROC曲线。

4    机器学习模型的ROC曲线

图4中右方即为ROC曲线,该ROC曲线下的积分面积被称作AUC score,反映了模型的一个比较全面的评价指标。AUC score的大小应该在0.5 和 1之间。原因在于,即使一个随机模型也可以给出一条(0,0) 到(1,1)的对角线,面积正好为0.5。ROC曲线也给出了一个选择阈值的直观方法,使用者可以明确的知道某一个阈值对应的TPR 和 FPR, 从而根据业务选择最佳的阈值。


假设某个阈值点对应的TPR为0.7, 而FPR为0.1,那么这意味者,70%的正样本会被正确预测,但是10%的负样本也会被误判为正样本。对于互联网贷款业务而言,这正是通过率和对应风险的权衡问题。10%负样本虽然比例不大,但是如果业务底层数据的负样本远远大于正样本数,那么通过阈值的负样本绝对数量也会大于正样本数量。在这种情况下,可能更好的阈值选择是,比较低的TPR值,比如0.3,但是FPR也更低,比如0.05,从而我们可以对通过阈值的负样本绝对数量进行一个合理的控制。对于金融风控而言,负样本就是很大概率回逾期不还贷款的客户。


另一个常用的评价指标是KS值,其实也和ROC曲线有直接关系。每一对TPR 和 FPR差的最大值就是KS, 在图4中,则反映为ROC曲线本身和(0,0)到(1,1)对角线的之间,在y方向的最大距离,即是KS值。这样我们可以看出,KS指标和AUC score 是高度相关的。但不同的是,AUC score 是一个更加综合的评价,它考虑整个曲线的形状,尤其是当ROC 曲线由于某种原因显得不大规则和平滑的时候。很高的KS值则可能只在某个特别阈值下的过度拟合结果,从而有可能没有真正反映模型的预测质量。


👉 3.3 Lift分析方法

Lift分析方法在市场分析和商业情报(BI)领域运用广泛,该方法也依赖于模型输出的连续概率值。比如市场营销时候,需要建立营销模型,从而对所有目标客户的营销成功概率进行预测。在经费和人力有限的时情况下,营销人员可以把目标客户按成功概率进行排序,从而营销最有可能前多少个客户。

用Lift方法来分析模型效果的具体步骤,如下所示:

    (1)把客户按照预测的概率排序后分组,比如10等分,第一组为概率排名在前10%的客户。

     (2)计算每组里面的转化率,即每组里面营销成功的客户数量除以每组的客户总数。

通过上面步骤获得数据,我们可以获得如图5所示的曲线。

5  机器学模型Lift曲线

我们来理解一下图5的含义,按照我们的分组方法,左图中,横坐标为我们每完成一个组,即每联系10%的客户比例,而纵坐标为累计的真实客户转换比例。左图中的对角线是一个基准线,其意义是,假如我们的客户分组一开始是随机的,那么我们每完成10%的客户营销和联系,我们的真实客户数量也只会增加10%。这种情况下,如果要覆盖一个城市的所有真正客户,除非我们把城市中每个人都联系到(因为我们不知道谁会最终成为客户),否则我们永远转化不了这个城市所有的潜在真正客户。


图5中,左图的黑色曲线则代表了在模型的帮助下,我们的进展速度。第一个分组完成以后,我们可能已经能覆盖30%的真正客户,第二个分组完成后,这个数量累计增加到50%,以此类推。显然,这样的增长率快得多,我们不需要营销所有的人即能转化到多数的真正客户。图2.5中右图的数字更加好理解,是两条曲线转化率的商。


从图5中,我们可以很清楚的看到模型的效果。假设所有目标客户群体有1万人,而我们把所有1万人的客户营销之后,最终会转化成功1000个客户。那么如果没有模型的帮助,我们只能随机的随机营销客户,那么每联系1万人里面10%的用户,就会营销成功1000人里面的10%,等于100人,成为最终客户。


但是模型对客户进行了排序,因此在模型的帮助下,我们营销了1万人里面的前10%客户,已经可以获得1000个最终客户里面的30%,等于300人。Lift分析方法,可以帮助营销人员在同样的人力物力下,获得更多的客户。


04

多分类模型的评价方法

多分类模型指的是当需要预测的分类多于两个分类的情况,比如预测一张图片中的动物是100种动物中的哪一种。为了简单起见,我们这里假设多分类模型的输出结果,只是多个分类中的一个分类结果。

以计算每种预测结果的精确率(precision)指标为例,假如某个模型预测4种分类A,B,C,D中的一个,并且该模型在测试数据集上的预测结果中有以下的表现:

    (1)A分类:3个真正的A分类为正确预测为A,即3个TP;2个其他分类被错误的预测为A,即2个FP。

    (2)B分类:5个真正的B分类为正确预测为B,即5个TP;3个其他分类被错误的预测为B,即3个FP。

   (3)C分类:2个真正的C分类为正确预测为C,即2个TP;2个其他分类被错误的预测为C,即2个FP。

    (4)D分类:8个真正的D分类为正确预测为A,即8个TP;5个其他分类被错误的预测为D,即5个FP。

根据上面的表现,我们可以单独计算每一种分类结果的precision指标,结果如表所示。

表2中,我们根据precision的计算方式计算出了每一种分类的结果后,有下面几种不同的方式来计算整个模型的平均precision值:

   (1)宏观的平均方式(macro),模型的平均precision等于每种分类precision的简单平均值,比如从上诉的结果我们可以得到:

      

   (2)微观的平均方式(micro),先计算所有分类TP和FP之和,再根据定义,计算模型的precision值,比如上诉的结果可以得到:

               

   (3)假设上面4种分类真实个数分别为6,8,6,和10个,那么我们还可以计算加权的宏观平均指标,计算公式如下:


从上面不同的计算方式可以看出,影响3种不同的计算结果关键,在于分类的不平衡程度。对于各个分类数量基本相同的情况,不同的计算方式结果相差不大。但是对于分类高度不平衡的情况,加权的宏观平均或者微观平均方式会更加合理。


05

回规模型的评价方法
回归模型和分类模型的最大区别在于输出结果形式不同,分类模型返回的分类结果,而回归模型返回的是连续数值预测值。一个简单的线性回归预测结果,如图6示。

6    回归模型预测值意图

对于回归模型的预测结果效果评价,有下面几种常用的方式:

    (1)均方误差(mean squared error 或者MSE),计算预测值和真实值差别的平方和,再求平均值,计算公式如下。

利用上式,图6所示预测结果的均方误差为0.984。

      (2)均方根误差(root mean squared error 或者RMSE),计算预测值和真实值差别的平方和的平均值,再取平方根。和均方误差相比,均方根误差的量纲和预测值的量纲相同,因此更能形象反映预测的效果,其计算公式如下。

利用上式,图6所示预测结果的均方根误差为0.992。

    (3)平均绝对误差(mean absolute error 或者MAE),计算预测值和真实值绝对值差别的平均值,计算公式如下。

利用上式,图6所示预测结果的平均绝对误差为0.883。

    (4)R2值,有一定局限性,但是可以用来计算线性模型中预测值多大程度上和真实值吻合,取值0到1之间,值越大预测效果越好。R2也可以理解为测量真实值的方差多大程度能被预测值解释,方差能够被解释的越多,预测效果越好,具体计算公式如下:

上面公式中,数值1减掉的部分,其分子代表真实值和预测值差别的平方和,而分母代表真实值和所有真实值平均值差别的平方和。这个可以理解为,预测值多大程度上能够比简单的平均值更好的预测y值。利用上式,图6所示预测结果的R2为0.823。

但需要注意,R2一般只能用来评价线性回归模型,对于非线性回归模型,其假设不成立。另一个特别需要注意的地方是,对于线性回归模型,R2有一个非下降的性质(non-decreasing property),即随着越多的自变量加入模型,R2只会保持不变或者增加,但是绝不会下降。比如上面的线性回归例子,我们加入自变量平方项,会发现预测效果更好,R2更大。

但是这个现象,不是因为模型整的越来越好,而只是过拟合的可能性越来越高。为了克服上式困难,我们可以引进调整后的R2公式,计算如下:

上式中,n代表数据点个数,k则为出去常数项的自变量或者特征个数。这种计算R2的方式,可以适当降低增加自变量对真实预测效果的评价,因而更加准确。

本文选自北京大学出版社的《人工智能原理与实践》一书,略有修改,经出版社授权刊登于此。

内容简介:

人工智能的日益广泛的应用和普及,而要深入理解人工智能,我们必须全面理解底层的各类机器学习算法基本原理并能驾驭人工智能各种应用。

人工智能原理与实践》分为13章,前7章为原理篇。原理篇中,我们重点讨论机器学习模型建模的全部流程,各类常用的机器学习算法原理,深度学习和强化学习原理,机器学习涉及的优化论原理,以及机器学习和自然语言处理技术。后面6章为实战篇,我们重点讨论信用卡场景中的客户细分,保险行业中的生活事件时间序列预测,电商交易中欺诈客户预测,信用卡和金融贷款场景中的风控预测,房价估值和预测,以及股市短期回报率预测等多个实际应用场景。


福利时间
本次联合【北京大学出版社】为大家送出4本人工智能原理与实践》!参与方法:
1. 转发本文案朋友圈
2. 点亮本文在看
3. 公众号后台回复"赠书",参与抽奖!
(长按图片直达公号后台)
7月19日晚8点结束并开奖。中奖读者将被免费寄送!!!
喜欢的话点个在看吧👇
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/137432