精华内容
下载资源
问答
  • 主要介绍了DHCP是什么意思?DHCP基础知识介绍,本文用通俗易懂的语言描述了何谓DHCP,面向普通用户去解释,需要的朋友可以参考下
  • R语言数据分析入门

    千人学习 2016-05-13 16:53:58
    R语言是一种用来进行数据探索、统计分析、作图的解释型语言。它具有丰富的数据类型、灵活多样的作图功能,以及数量众多的算法功能包。目前已在各行各业赢得数据分析者的青睐,并成为众多科研工作者、商业机构、与...
  • 机器学习模型可解释性的详尽介绍

    千次阅读 2019-11-20 17:30:00
    机器之心平台来源:腾讯技术工程模型可解释性方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于...

    机器之心平台

    来源:腾讯技术工程

    模型可解释性方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于模型和特征的优化,更能够帮助更好的理解模型本身和提升模型服务质量。本文对机器学习模型可解释性相关资料汇总survey。


    综述

    机器学习业务应用以输出决策判断为目标。可解释性是指人类能够理解决策原因的程度。机器学习模型的可解释性越高,人们就越容易理解为什么做出某些决定或预测。模型可解释性指对模型内部机制的理解以及对模型结果的理解。其重要性体现在:建模阶段,辅助开发人员理解模型,进行模型的对比选择,必要时优化调整模型;在投入运行阶段,向业务方解释模型的内部机制,对模型结果进行解释。比如基金推荐模型,需要解释:为何为这个用户推荐某支基金。

    机器学习流程步骤:收集数据、清洗数据、训练模型、基于验证或测试错误或其他评价指标选择最好的模型。第一步,选择比较小的错误率和比较高的准确率的高精度的模型。第二步,面临准确率和模型复杂度之间的权衡,但一个模型越复杂就越难以解释。一个简单的线性回归非常好解释,因为它只考虑了自变量与因变量之间的线性相关关系,但是也正因为如此,它无法处理更复杂的关系,模型在测试集上的预测精度也更有可能比较低。而深度神经网络处于另一个极端,因为它们能够在多个层次进行抽象推断,所以他们可以处理因变量与自变量之间非常复杂的关系,并且达到非常高的精度。但是这种复杂性也使模型成为黑箱,我们无法获知所有产生模型预测结果的这些特征之间的关系,所以我们只能用准确率、错误率这样的评价标准来代替,来评估模型的可信性。

    事实上,每个分类问题的机器学习流程中都应该包括模型理解和模型解释,下面是几个原因:

    • 模型改进:理解指标特征、分类、预测,进而理解为什么一个机器学习模型会做出这样的决定、什么特征在决定中起最重要作用,能让我们判断模型是否符合常理。一个深度的神经网络来学习区分狼和哈士奇的图像。模型使用大量图像训练,并使用另外的一些图像进行测试。90%的图像被准确预测,这值得我们高兴。但是在没有计算解释函数(explainer function)时,我们不知道该模型主要基于背景:狼图像通常有一个下雪的背景,而哈士奇的图像很少有。所以我们不知不觉地做了一个雪地探测器,如果只看准确率这样的指标,我们就不会看到这一点。知道了模型是如何使用特征进行预测的,我们就能直觉地判断我们的模型是否抓住了有意义的特征,模型是或否能泛化到其他样本的预测上。

    • 模型可信性与透明度:理解机器学习模型在提高模型可信度和提供审视预测结果透明度上是非常必要的,让黑箱模型来决定人们的生活是不现实的,比如贷款和监狱刑法。另一个对机器学习结果可信度提出质疑的领域是药品,模型结果会直接决定病人的生与死。机器学习模型在区分恶性肿瘤和不同类型的良性肿瘤方面是非常准确的,但是我们依然需要专家对诊断结果进行解释,解释为什么一个机器学习模型将某个患者的肿瘤归类为良性或恶性将大大帮助医生信任和使用机器学习模型来支持他们工作。长久来看,更好地理解机器学习模型可以节省大量时间、防止收入损失。如果一个模型没有做出合理的决定,在应用这个模型并造成不良影响之前,我们就可以发现这一点。

    • 识别和防止偏差:方差和偏差是机器学习中广泛讨论的话题。有偏差的模型经常由有偏见的事实导致,如果数据包含微妙的偏差,模型就会学习下来并认为拟合很好。一个有名的例子是,用机器学习模型来为囚犯建议定罪量刑,这显然反映了司法体系在种族不平等上的内在偏差。其他例子比如用于招聘的机器学习模型,揭示了在特定职位上的性别偏差,比如男性软件工程师和女性护士。机器学习模型在我们生活的各个层面上都是强有力的工具,而且它也会变得越来越流行。所以作为数据科学家和决策制定者来说,理解我们训练和发布的模型如何做出决策,让我们可以事先预防偏差的增大以及消除他们,是我们的责任。

    可解释性特质:

    • 重要性:了解“为什么”可以帮助更深入地了解问题,数据以及模型可能失败的原因。

    • 分类:建模前数据的可解释性、建模阶段模型可解释性、运行阶段结果可解释性。

    • 范围:全局解释性、局部解释性、模型透明度、模型公平性、模型可靠性。

    • 评估:内在还是事后?模型特定或模型不可知?本地还是全局?

    • 特性:准确性、保真性、可用性、可靠性,鲁棒性、通用性等。

    • 人性化解释:人类能够理解决策原因的程度,人们可以持续预测模型结果的程度标示。


    动机

    在工业界中,数据科学或机器学习的主要焦点是更偏“应用”的解决复杂的现实世界至关重要的问题,而不是理论上有效地应用这些模型于正确的数据。机器学习模型本身由算法组成,该算法试图从数据中学习潜在模式和关系,而无需硬编码固定规则。因此,解释模型如何对业务起作用总是会带来一系列挑战。有一些领域的行业,特别是在保险或银行等金融领域,数据科学家通常最终不得不使用更传统的机器学习模型(线性或基于树的)。原因是模型可解释性对于企业解释模型所采取的每个决策非常重要。

    残酷的现实是,如果没有对机器学习模型或数据科学pipeline如何运作的合理理解,现实中的项目很少成功。现实中的数据科学项目,通常会有业务和技术两方面。数据科学家通常致力于构建模型并为业务提供解决方案。但是,企业可能不知道模型如何工作的复杂细节。

    数据科学从业者将知道存在典型的模型可解释性与模型性能权衡。这里需要记住的一点是,模型性能不是运行时或执行性能,而是模型在决策中的准确程度。有几种模型,包括简单的线性模型甚至是基于树的模型,它们可以很容易地解释模型为获得特定的洞察力或预测而做出的决策,但是你可能需要牺牲模型性能,因为它们总是不能产生最好的结果是由于高偏差(线性模型)或高方差的固有问题,导致过度拟合(完全成长的树模型)。更复杂的模型,如集合模型和最近的深度学习模型系列通常会产生更好的性能,但被认为是黑盒模型,因为很难解释模型如何真正做出决定。

    理解模型可解释性

    模型解释作为一个概念仍然主要是理论和主观的。任何机器学习模型的核心都有一个响应函数,它试图映射和解释独立(输入)自变量和(目标或响应)因变量之间的关系和模式。当模型预测或寻找见解时,需要做出某些决定和选择。模型解释试图理解和解释响应函数所做出的这些决定,即what,why以及how。模型解释的关键是透明度,质疑能力以及人类理解模型决策的难易程度。模型解释的三个最重要的方面解释如下。

    1. 是什么驱动了模型的预测?我们应该能够查询我们的模型并找出潜在的特征交互,以了解哪些特征在模型的决策策略中可能是重要的。这确保了模型的公平性。

    2. 为什么模型会做出某个决定?我们还应该能够验证并证明为什么某些关键特征在预测期间驱动模型所做出的某些决策时负有责任。这确保了模型的可靠性。

    3. 我们如何信任模型预测?我们应该能够评估和验证任何数据点以及模型如何对其进行决策。对于模型按预期工作的关键利益相关者而言,这应该是可证明且易于理解的。这确保了模型的透明度。

    在比较模型时,除了模型性能之外,如果模型的决策比其他模型的决策更容易理解,那么模型被认为比其他模型具有更好的可解释性。

    可解释性的重要性

    在解决机器学习问题时,数据科学家往往倾向于关注模型性能指标,如准确性,精确度和召回等等(毫无疑问,这很重要!)。这在大多数围绕数据科学和机器学习的在线竞赛中也很普遍。但是,指标只能说明模型预测决策的部分故事。随着时间的推移,由于环境中的各种因素导致的模型概念漂移,性能可能会发生变化。因此,了解推动模型采取某些决策的因素至关重要。

    如果一个模型工作得很好,为什么还要深入挖掘呢?在解决现实世界中的数据科学问题时,为了让企业信任您的模型预测和决策,他们会不断提出“我为什么要相信您的模型?”这一问题,这一点非常有意义。如果一个人患有癌症或糖尿病,一个人可能对社会构成风险,或者即使客户会流失,您是否会对预测和做出决策(如果有的话)感到满意?也许不是,如果我们能够更多地了解模型的决策过程(原因和方式),我们可能会更喜欢它。这使我们更加透明地了解模型为何做出某些决策,在某些情况下可能出现的问题,并且随着时间的推移它有助于我们在这些机器学习模型上建立一定程度的信任。

    • 了解预测背后的原因在评估信任方面非常重要,如果计划基于预测采取行动,或者选择是否部署新模型,那么这是至关重要的。

    • 无论人类是直接使用机器学习分类器作为工具,还是在其他产品中部署模型,仍然存在一个至关重要的问题:如果用户不信任模型或预测,他们就不会使用它。

    这是我们在本文中多次讨论的内容,也是决定数据科学项目在行业中取得成功的关键区别之一。这推动了模型解释的必要性和重要性的紧迫性。

    可解释性的标准

    有一些特定的标准可用于分类模型解释方法。Christoph Molnar,2018年“可解释的机器学习,制作黑箱模型可解释指南”中提到了一个很好的指南。

    • 内在还是事后?内在可解释性就是利用机器学习模型,该模型本质上是可解释的(如线性模型,参数模型或基于树的模型)。事后可解释性意味着选择和训练黑匣子模型(集合方法或神经网络)并在训练后应用可解释性方法(特征重要性,部分依赖性图)。我们将更多地关注我们系列文章中的事后模型可解释方法。

    • 模型特定或模型不可知?特定于模型的解释工具非常特定于内在模型解释方法,这些方法完全依赖于每个模型的功能和特征。这可以是系数,p值,与回归模型有关的AIC分数,来自决策树的规则等等。与模型无关的工具与事后方法更相关,可用于任何机器学习模型。这些不可知方法通常通过分析(和输入的扰动)特征输入和输出对来操作。根据定义,这些方法无法访问任何模型内部,如权重,约束或假设。

    • 本地还是全局?这种解释分类讨论了解释方法是解释单个预测还是整个模型行为?或者如果范围介于两者之间?我们将很快谈论全球和地方的解释。


    可解释性的范围

    如何定义可解释性的范围和界限?一些有用的方面可以是模型的透明度,公平性和责任性。全局和局部模型解释是定义模型解释范围的明确方法。

    全局可解释:就是试图理解“模型如何进行预测?”和“模型的子集如何影响模型决策?”。要立即理解和解释整个模型,我们需要全局可解释性。全局可解释性是指能够基于完整数据集上的依赖(响应)变量和独立(预测变量)特征之间的条件交互来解释和理解模型决策。尝试理解特征交互和重要性始终是理解全球解释的一个很好的一步。当然,在尝试分析交互时,在超过两维或三维之后可视化特征变得非常困难。因此,经常查看可能影响全局知识模型预测的模块化部分和特征子集会有所帮助。全局解释需要完整的模型结构,假设和约束知识。

    局部解释:试图理解“为什么模型为单个实例做出具体决策?”和“为什么模型为一组实例做出具体决策?”。对于本地可解释性,我们不关心模型的固有结构或假设,我们将其视为黑盒子。为了理解单个数据点的预测决策,我们专注于该数据点并查看该点周围的特征空间中的局部子区域,并尝试基于该局部区域理解该点的模型决策。本地数据分布和特征空间可能表现完全不同,并提供更准确的解释而不是全局解释。局部可解释模型 - 不可知解释(LIME)框架是一种很好的方法,可用于模型不可知的局部解释。我们可以结合使用全局和局部解释来解释一组实例的模型决策。

    模型透明度:为试图理解“如何根据算法和特征创建模型?”。我们知道,通常机器学习模型都是在数据特征之上利用算法来构建将输入映射到潜在输出(响应)的表示。模型的透明度可能试图了解模型的构建方式以及可能影响其决策的更多技术细节。这可以是神经网络的权重,CNN滤波器的权重,线性模型系数,决策树的节点和分裂。但是,由于业务可能不太精通这些技术细节,因此尝试使用不可知的局部和全局解释方法来解释模型决策有助于展示模型透明度。

    可解释性的作用

    对于想要了解模型如何工作的数据科学家来说,评估模型的准确性通常是不够的。数据科学家通常想知道模型输入变量如何工作以及模型的预测如何根据输入变量的值而变化

    机器学习算法和模型的工程应用中用到最多的主要是树类模型(lgb,xgb)和神经网络(cnn, rnn),使用者往往习惯于很少去思考其中的含义和解释性。需要思考一个模型的哪些东西是可解释的?

    所以有几个问题值得讨论:

    • 哪些特征在模型看到是最重要的?

    • 关于某一条记录的预测,每一个特征是如何影响到最终的预测结果的?

    • 从大量的记录整体来考虑,每一个特征如何影响模型的预测的?

    为什么这些解释信息是有价值的呢:

    • 调试模型用
      一般的真实业务场景会有很多不可信赖的,没有组织好的脏数据。你在预处理数据时就有可能加进来了潜在的错误,或者不小心泄露了预测目标的信息等,考虑各种潜在的灾难性后果,debug的思路就尤其重要了。当你遇到了用现有业务知识无法解释的数据的时候,了解模型预测的模式,可以帮助你快速定位问题。

    • 指导工程师做特征工程
      特征工程通常是提升模型准确率最有效的方法。特征工程通常涉及到到反复的操作原始数据(或者之前的简单特征),用不同的方法来得到新的特征。有时候你完成FE的过程只用到了自己的直觉。这其实还不够,当你有上百个原始特征的时候,或者当你缺乏业务背景知识的时候,你将会需要更多的指导方向。如何创造出这样优秀的特征呢?如何找到最重要的特征的方法,并且可以发现两个特别相关的特征,当面对越来越多的特征的时候,这些方法就会很重要啦。

    • 指导数据采集的方向
      对于网上下载的数据集你完全控制不了。不过很多公司和机构用数据科学来指导他们从更多方面收集数据。一般来说,收集新数据很可能花费比较高或者不是很容易,所以大家很想要知道哪些数据是值得收集的。基于模型的洞察力分析可以教你很好的理解已有的特征,这将会帮助你推断什么样子的新特征是有用的。

    • 指导人们做决策
      一些决策是模型自动做出来的,虽然亚马逊不会用人工来决定展示给你网页上的商品,但是很多重要的决策是由人来做出的,而对于这些决定,模型的洞察力会比模型的预测结果更有价值。

    • 建立模型和人之间的信任
      很多人在做重要决策的时候不会轻易的相信模型,除非他们验证过模型的一些基本特性,这当然是合理的。实际上,把模型的可解释性展示出来,如果可以匹配上人们对问题的理解,那么这将会建立起大家对模型的信任,即使是在那些没有数据科学知识的人群中。


    方法

    模型效果评估指标图


    Confusion Matrix

    一个完美的分类模型就是,如果一个客户实际上属于类别 good,也预测成good,处于类别 bad,也就预测成 bad。实际上一些是 good 的客户,根据我们的模型,却预测他为 bad,对一些原本是 bad 的客户,却预测他为 good。我们需要知道,这个模型到底预测对了多少,预测错了多少,混淆矩阵就把所有这些信息,都归到一个表里:

    Sensitivity(覆盖率,True Positive Rate)= 正确预测到的正例数 / 实际正例总数;Recall (True Positive Rate,or Sensitivity) =true positive/total actual positive=d/c+d;

    PV+ (命中率,Precision, Positive Predicted Value) = 正确预测到的正例数 / 预测正例总数;Precision (Positive Predicted Value, PV+) =true positive/ total predicted positive=d/b+d;

    Specificity (负例的覆盖率,True Negative Rate) = 正确预测到的负例个数 / 实际负例总数;Specificity (True Negative Rate) =true negative/total actual negative=a/a+b;

    图中关于混淆矩阵结果理解:recall:0.54;precision:0.915;specificity:0.95;

    Lift

    它衡量的是,与不利用模型相比,模型的预测能力 “变好” 了多少。实质上它强调的是投入与产出比。不利用模型,我们只能利用 “正例的比例是 c+d/a+b+c+d” 这个样本信息来估计正例的比例(baseline model),而利用模型之后,我们不需要从整个样本中来挑选正例,只需要从我们预测为正例的那个样本的子集(b+d)中挑选正例,这时预测的准确率为 d/b+d。

    显然,lift(提升指数)越大,模型的运行效果越好。如果这个模型的预测能力跟 baseline model 一样,那么 d/b+d 就等于 c+d/a+b+c+d(lift 等于 1),这个模型就没有任何 “提升” 了(套一句金融市场的话,它的业绩没有跑过市场)。

    ROC曲线 & PR曲线 & KS曲线

    实际应用中,通常是先基于训练好的分类器得出测试样本的预测概率,然后将该测试样本的预测概率与给定的阈值进行比较,若该预测概率大于给定阈值,则将该测试样本划分为正类,反之则将其划分为反类。对于不同的分类任务,该分类阈值的取值也是不一样的。

    • ROC曲线(The Receiver Operating Characteristic Curve)给出的是不同分类阈值情况下真正率(TPr)和假正率(FPr)的变化曲线。PR曲线(Precision-Recall Curve)给出的是不同分类阈值情况下查准率(Precision)和查全率(Recall)的变化曲线。有文献指出,ROC曲线相比PR曲线有一个非常好的特性:就是当正负样本分布发生变化的时候,ROC曲线的形状能够基本保持不变,而PR曲线的形状会发生较剧烈的变化。为了使得ROC曲线之间能更好的进行比较,通常采用AUC,即ROC曲线下的面积来衡量一个分类算法的性能。其中,AUC的值越大,表明分类性能越好。

    • KS(Kolmogorov-Smirnov Curve)曲线横轴为不同的分类阈值,纵轴为真正率(TPr)和假正率(FPr)的变化曲线。KS值=max|TPr-FPr|,等价于ΔTPr=ΔFPr,这和ROC曲线上找最优阈值的条件一致。KS值常在征信评分模型中用于衡量区分预测正负样本的分隔程度。一般来说,KS值越大,表明正负样本区分的程度越好,说明模型区分度越高。但并非所有的情况KS值都是越高越好的,尤其在征信模型中,如正负样本完全分错的情况下,KS值依旧可以很高。征信模型最期望得到的信用分数分布为正态分布,如果KS值过大,如0.9,就可以认为正负样本分得过开了,不太可能是正态分布,反而比较可能是极端化的分布状态(如U字型),这样的分数就很不好,基本可以认为不可用。

    Cumulative gains chart

    横坐标表示:代表我们样本的百分比,假设有10000个样本,0.1代表1000个,1代表10000个样本。

    纵坐标表示:代表横轴所代表的那么多样本中,判断正确的比率。

    baseline表示:如果我们不用模型,那我们对每一个人的打分都是一样的,正率在所有样本空间都是一样的,连接起来就成为一条直线。

    曲线含义:采用模型进行预测。y值的分子代表模型预测且预测为正例的人数,分母是整个群体正例人数。

    Silhouette Analysis

    Silhouette指的是一种解释和验证数据集群内一致性的方法。该技术提供了每个对象分类的简洁图形表示。

    轮廓值是对象与其自身群集(内聚)相比与其他群集(分离)相似程度的度量。轮廓范围从-1到+1,其中高值表示对象与其自己的簇很好地匹配并且与相邻簇很不匹配。如果大多数对象具有高值,则群集配置是合适的。如果许多点具有低值或负值,则群集配置可能具有太多或太少的群集。

    图中通过Silhouette方法大致对数据集样本分类有了掌握,可以看到0/1类别大致比例。

    Learning Curve

    概念:学习曲线就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。

    Bias是用所有可能的训练数据集训练出的所有模型的输出的平均值真实模型的输出值之间的差异。

    Variance不同的训练数据集训练出的模型输出值之间的差异。

    解读:当训练集和测试集的误差收敛但却很高时,为高偏差。左上角的偏差很高,训练集和验证集的准确率都很低,很可能是欠拟合。我们可以增加模型参数,比如,构建更多的特征,减小正则项。此时通过增加数据量是不起作用的。当训练集和测试集的误差之间有大的差距时,为高方差。当训练集的准确率比其他独立数据集上的测试结果的准确率要高时,一般都是过拟合。右上角方差很高,训练集和验证集的准确率相差太多,应该是过拟合。我们可以增大训练集,降低模型复杂度,增大正则项,或者通过特征选择减少特征数。理想情况是是找到偏差和方差都很小的情况,即收敛且误差较小。

    Permutation Importance

    一个最基本的问题大概会是什么特征对我模型预测的影响最大呢?这个东西就叫做“feature importance”即特征重要性。anyway,字面意思看着就很重要啦。我们有很多方法来衡量特征的重要性,这里呢,将会介绍一种方法:排列重要性。这种方法和其他方法比起来,优势有:

    • 计算速度快

    • 广泛使用和理解

    • 我们希望特征重要性与属性具有一致性

    工作原理:排列重要性,一定是在model训练完成后,才可以计算的。简单来说,就是改变数据表格中某一列的数据的排列,保持其余特征不动,看其对预测精度的影响有多大。大概三个步骤:

    • 训练好模型

    • 拿某一个feature column, 然后随机打乱顺序。然后用模型来重新预测一遍,看看自己的metric或者loss 。function变化了多少。

    • 把上一个步骤中打乱的column复原,换下一个column重复上一个步骤,直到所有column都算一遍。

    代码示例:

    from xgboost import XGBClassifier    
    from sklearn.model_selection import train_test_split
    import eli5   # python计算permutation importance工具包   
    from eli5.sklearn import PermutationImportance

    path = './census_income_dataset.csv'
    data = pd.read_csv(path)
    #...省略数据预处理过程
    X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state = 400)

    # 训练XGBoost模型
    model = xgb.XGBClassifier(
                            learning_rate =0.05,
                             n_estimators=100,
                             max_depth=3,
                             min_child_weight=1,
                             gamma=0.3,
                             subsample=0.8,
                             colsample_bytree=0.8,
                             objective= 'multi:softprob',
                             nthread=4,
                             scale_pos_weight=1,
                             num_class=2,
                             seed=27
                        ).fit(X_train, y_train)

    perm = PermutationImportance(model, random_state = 1).fit(X_test, y_test) # 实例化
    eli5.show_weights(perm, feature_names = X_test.columns.tolist())

    结果分析:

    • 靠近上方的绿色特征,表示对模型预测较为重要的特征;

    • 为了排除随机性,每一次 shuffle 都会进行多次,然后取结果的均值和标准差;

    • 部分特征出现负值,表示其 shuffle 之后,对精度反而有所提升。这通常出现在特征不那么重要的时候。当数据集较小的时候,这种情况更为常见;

    • “+ - ”之后的数字衡量的是一次重新洗牌后的表现如何变化;

    这个数据集是收入水平数据集,这个例子里,最重要的特征是“capital_gain”, 这看起来是合理的。

    PDP

    部分依赖图(PDP或PD图)显示特征对机器学习模型的预测结果的边际效应,可以展示一个特征是如何影响预测的。部分依赖图可以显示目标与特征之间的关系是线性的,单调的还是更复杂的。例如,当应用于线性回归模型时,部分依赖图总是显示线性关系。

    回归的部分依赖函数定义为:

    • xSxS是部分依赖图要画的特征集合

    • xCxC是其他特征

    通常,集合SS中有一到两个特征,这个集合中的特征我们想知道他们对预测的影响。在集合SS和集合CC中的特征并集组成了全部特征空间x。边际化机器学习模型输出在集合C的特征分布上。PDP的一个假设是,C中的特征与s中的特征不相关。如果违反这个假设,部分依赖图的平均值将包括非常不可能甚至不可能的数据点。

    边缘化概念
    边缘化是一种通过累加一个变量的可能值以判定另一个变量的边缘分布的方法。这听起来有点抽象,让我们看一个例子:

    假设我们想知道天气是如何影响英国人的幸福感的,也就是P(幸福感|天气)。假定我们具有衡量某人的幸福感所需的定义和设备,同时记录了某个英格兰人和某个苏格兰人所处位置的天气。可能苏格兰人通常而言要比英格兰人幸福。所以我们其实在衡量的是P(幸福感, 国|天气),即,我们同时考察幸福感和国。

    边缘化告诉我们,我们可以通过累加国家的所有可能值(英国由3国组成:英格兰、苏格兰、威尔士),得到想要计算的数字,即P(幸福感|天气) = P(幸福感, 国=英格兰|天气) + P(幸福感, 国=苏格兰|天气) + P(幸福感, 国=威尔士|天气)。

    部分函数f^xSf^xS通过计算在训练数据的平均值,即Monte Carlo方法:

    • x(i)CxC(i)是数据集中的真实特征值,这些特征是不关注的特征。

    特征重要性可以告诉你哪些特征是最重要的或者是不重要的。

    partial dependence图可以告诉你一个特征是如何影响预测的。

    PDP分析步骤如下:

    1. 训练一个Xgboost模型(假设F1 … F4是我们的特征,Y是目标变量,假设F1是最重要的特征)。

    2. 我们有兴趣探索Y和F1的直接关系。

    3. 用F1(A)代替F1列,并为所有的观察找到新的预测值。采取预测的平均值。(称之为基准值)

    4. 对F1(B)… F1(E)重复步骤3,即针对特征F1的所有不同值。

    5. PDP的X轴具有不同的F1值,而Y轴是虽该基准值F1值的平均预测而变化。

    PDP特别适合用来回答类似这样的问题:

    • 在所有的收入水平的特征中,年龄和学历是如何影响收入的?或者说,在不同的国家相同年龄的人群收入水平有多少相似呢?

    • 预测推荐基金时,投资偏好的不同会带来多大的影响?还是有其他更重要的影响因素?

    如果你对线性回归或者逻辑回归比较熟悉,那么partial dependence可以被类比为这两类模型中的“系数”。并且partial dependence在复杂模型中的作用比在简单模型中更大,抓出更复杂的特性。

    同样还是用census_income的数据集,不同的个体在各个方面都是不一样的。比如种族,年龄,受教育程度等等。一眼看过去,很难区分这些特征对结果的影响有多大。为了清晰的分析,我们还是先只拿出某一行数据,比如说这一行数据里,有种族White,45岁,Bachelors。我们将会用已有模型来预测结果,将这一行的某一个变量,反复的进行修改和重新预测,比如将年龄修改从45修改为60,等等。持续观察预测结果,在不同的年龄时有什么样的变化。

    这里的例子,只用到了一行数据。特征之间的相互作用关系通过这一行来观察可能不太妥当,那么考虑用多行数据来进行试验,然后根据平均值画出图像来。

    from pdpbox import pdp

    feature = 'age'
    # 创建好画图所需的数据
    pdp_goals = pdp.pdp_isolate(model, X_train, df.columns, feature)
    # 画出“age”这一特征的partial dependence plot
    pdp.pdp_plot(pdp_goals, feature)
    plt.show()

    第一:y轴是预测结果的变化量。
    第二:蓝色阴影区域代表了置信的大小。
    从这幅图可以看出,age的增加肯定可以增加高收入概率,但是增加到一定的时候,对这个概率影响不大了。

    置信区间概念

    给定置信水平,根据估计值确定真实值可能出现的区间范围,该区间通常以估计值为中心,该区间则为置信区间。

    feature = 'education_num'
    pdp_goals = pdp.pdp_isolate(model, X_train, df.columns, feature)
    pdp.pdp_plot(pdp_goals, feature)
    plt.show()

    从这副图可以看出,受教育程度对收入起积极作用,随着受的教育越多,收入越高,也符合常人理解。

    fig, axes, summary_df_1 = info_plots.target_plot_interact(
        df=dataset, features=['age', 'education_num'], feature_names=['age', 'education_num'], target='income_level'
    )

    在此图表中,气泡大小不太重要,因为它与观测数量(事件发生的次数)有关。最重要的见解来自气泡的颜色,较暗的气泡意味着更高的默认概率。这是一个强大的工具,因为它可以深入了解我们选择的两个变量对因变量的影响。

    features_to_plot = ['age', 'education_num']
    inter1  = pdp.pdp_interact(model, df, df.columns, features_to_plot)
    pdp.pdp_interact_plot(inter1, features_to_plot, plot_type='grid', x_quantile=True, ncols = 2, plot_pdp=True)
    plt.show()

    上图可以看出,受教育程度和年龄对收入水平有着正相关作用,且随着受教育程度增加,年龄从35-90,高收入的概率越来越大。

    fig, axes = pdp.pdp_interact_plot(
        inter1, ['age', 'education_num'], plot_type='contour', x_quantile=True, ncols=2, 
        plot_pdp=True
    )

    重要的是要记住,在该图中,较暗的颜色并不一定意味着较高的默认概率。在这里,我们绘制了受教育等级和年龄与收入等级概率。我们可以推断,在这两个自变量中,education_num起着更重要的作用,因为等高线图主要是垂直的,遵循x轴刻度标记(至少达到一个点)。

    ICE

    部分依赖图(PDP)和个体条件期望图(ICE)说明了一个或多个输入变量与黑盒模型的预测结果之间的关系。它们都基于可视化,模型不可知的技术。ICE图可以更深入地探索个体差异并识别模型输入之间的子组和相互作用

    另一方面,ICE图使得可以深入到单个观察的水平。它们可以帮助探索个体差异,并确定模型输入之间的子组和交互。可以将每个ICE曲线视为一种模拟,显示如果改变特定观察的一个特征,模型预测会发生什么。为避免可视化过载,ICE图一次只显示一个模型变量。

    可以将每个ICE曲线视为一种模拟,显示如果您改变特定观察的一个特征,模型预测会发生什么。如图9所示,通过在曲线变量的唯一值上复制个体观察并对每个重复进行评分,获得一个观察的ICE曲线。

    下图中的PD图结果基本上是平坦的,给人的印象是X1与模型的预测之间没有关系。

    当我们观察ICE图时,它们呈现出一幅截然不同的图:这种关系对于一次观察非常正面,但对另一次观察则非常负面。因此,与PD图告诉我们的情况相反,ICE图显示X1实际上与目标有关;。基本上,ICE图分离PD功能(毕竟是平均值)以揭示相互作用和个体差异。

    当对大数据集分析时,则可能需要进行一些调整。例如,可以对选定的变量进行分箱,也可以对数据集进行采样或分组。这些技术可以更快地提供实际图的合理近似值。

    如果想进一步了解PD和ICE图,Ray Wright写了一篇很好的论文,展示了PD和ICE图如何用于比较和获得机器学习模型的洞察力,特别是所谓的“黑盒”算法,如随机森林,神经网络和梯度增强。在他的论文中,他还讨论了PD图的局限性,并提供了有关如何为大数据生成可缩放图的建议。https://www.sas.com/content/dam/SAS/support/en/sas-global-forum-proceedings/2018/1950-2018.pdf

    LIME

    局部可解释不可知模型(LIME)是一种算法,它提供了一种新颖的技术,以可解释和可信任的方式解释任何预测模型的结果。它的工作原理是围绕想要解释的预测在本地训练可解释的模型。这个工作发表于2016年KDD的论文。工具学习地址。

    流程

    • 训练模型,模型(记作 ff)可以是LR、NN、Wide and deep、C4.5 Decision tree、Random forest、GBDT等任意模型。

    • 训练结束后我们需要解析模型,先选择一个待解析的样本,样本通过模型计算可以得到一个prediction(包含预测的label以及预测为1的probability),这时我们在这个样本的附近选择新的样本并用模型计算出多个prediction,这样样本组合新的样本集。

    • 然后使用新的可解析的特征和prediction作为label来训练新的简单模型(例如LR),然后使用简单模型的权重作为这些特征的重要性作为输出。

    通俗来说

    就是选择一个样本以及样本附近的点,然后训练一个简单模型来拟合,虽然简单模型不能在完整数据集上有效,但至少在这个点附近都是有效的,这个简单模型的特征是人类可解析的,而训练出的权重也可以表示特征重要性。

    论文中算法描述:

    为了更好地理解LIME的工作原理,让我们考虑两种不同类型的可解释性:

    • 全局可解释性:全局解释有助于我们理解由训练的响应函数建模的整个条件分布,但全局解释可以是近似的或基于平均值。

    • 局部可解释性:局部解释促进对单个数据点或分布的小范围的理解,例如一组输入记录及其相应的预测。由于小范围的条件分布很可能是线性的,因此局部解释可能比全局解释更准确。LIME旨在提供局部可解释性,因此对于特定决策或结果最为准确。

    我们希望解释器与模型无关,并且在局部可靠。局部可靠的解释捕获要解释的实例邻域中的分类器行为。为了学习局部解释,LIME使用可解释的模型近似分类器围绕特定实例的决策边界。LIME与模型无关,这意味着它将模型视为黑盒子,并且不对模型行为做出任何假设。这使得LIME适用于任何预测模型。

    LIME的核心在于三个方面:

    • 这里不对模型整体提供解释,而是局部对每一个样本单独进行解释

    • 即使机器学习模型训练过程会产生一些抽象的特征,但是解释基于当前输入数据的变量特征

    • 通过局部建立简单模型进行预测来对大多数重要特征进行解释

    LIME作用在单个样本上。

    首先,我们取出一个样本,并(permute)重复这个数据同时增加一些微小扰动,这样就得到了一个新的数据集,数据集中包含相似的样本,都基于取出来的那个样本。对于这个新数据集中的每一个样本,我们可以计算它跟取出的样本之间的相似性,即在permutation中它被调整了多大,所有的统计距离、相似性矩阵都可以用在这里,比如用指定宽度的指数内核将欧式距离转化为相似度。

    下一步,使用最初训练的复杂模型,在新数据上进行预测。正因为新数据样本间的细微差别,我们可以跟踪那些微小扰动对预测结果的影响。

    最后,我们在新数据上训练出一个简单模型(通常是线性模型),并使用最重要的特征进行预测。最重要的特征有不同的决定方法,在指定加入模型解释中的特征数量(通常在5到10附近)的前提下,可以

    • 选择在使用复杂模型进行预测时回归拟合上具有最高权重的特征

    • 运用正向选择,选择可以提高复杂模型的预测的回归拟合的变量

    • 在复杂的机器学习模型预测的基础上,选择正则化的收缩率最小的lasso预测拟合的特征

    • 使用不多于我们已经选择了的特征的节点数量来构建决策树

    ## 创建LIME解释器
    explainer = lime.lime_tabular.LimeTabularExplainer(X_train ,feature_names = features_name, class_names=['0','1'], categorical_features=data_cat_features, 
    categorical_names=cat_columns, kernel_width=3)
    predict_fn_xgb = lambda x: xgb.predict_proba(x).astype(float)
    exp = explainer.explain_instance(X_test[2], predict_fn_xgb, num_features=6)
    exp.show_in_notebook(show_all=False)

    上图给我们解释了对于一个样本的预测结果,是哪些特征决定样本被分类到类别0,哪些特征决定样本被分类到类别1,且具体列出样本在这些特征的数值大小。很直观和明确的解释为什么模型做这个决定。

    SHAP

    Shaply值由美国洛杉矶加州大学教授罗伊德·夏普利(Lloyd Shapley)提出,用于解决合作博弈的贡献和收益分配问题。N人合作中,单个成员的贡献不一样,收益分配也应该不一样。理想的分配方式是:贡献=收益;

    贡献和收益分配是否有可以量化的方法呢?

    Shapley方法就是这样一种方法:Shapley值:单个成员所得与自己的贡献相等。

    基于Shap值的模型解释是一种和模型无关的方法。如上图,模型预测和Shap值解释是两个并行流程,Shap对模型预测的结果进行解释。NIPS 论文地址:A Unified Approach to Interpreting Model Predictions,也可以参考这篇博客:One Feature Attribution Method to (Supposedly) Rule Them All: Shapley Values。

    原理:一个特征的shapley value是该特征在所有的特征序列中的平均边际贡献。

    优点:

    • 解决了多重共线性问题;

    • 不仅考虑单个变量的影响,而且考虑变量组的影响,变量之间可能存在协同效应;

    缺点:计算效率低。

    适用范围:

    • 计算个体的特征shapley value;

    • 所有个体的每个特征的shapley value的绝对值求和或求平均即为整体的特征重要性;

    Shap方法的两大特性

    • 特征归因(收益)一致性:

      定义

    • 模型改变(A->B),特征x的贡献不递减(增加或者保持现状),则归因(收益)也不递减;

      特点

    • 特征作用越大(小),重要度越高(低),和模型变化无关;

      全局特征一致性

    • mean(|Tree SHAP|): Shap值;

    • Gain : 特征用于划分时所带来的训练损失减益的平均值;

    • Split Count: 根据特征用于划分的次数计算重要性;

    • Permutation: 将特征的值随机排列,用排列前后的模型误差来计算重要性;

      局部样本(Fever=yes,cough=yes的样本)一致性

    • Saabas[5] : 树创建完成后,根据样本预测值,将父节点和子节点value的差异,作为父节点的特征重要性;

    • Tree SHAP : 基于Shap值矩阵(样本数*特征数),计算出Fever和Cough的重要性;

    • 特征归因(收益)可加性:

      解释性方法如果具有特征归因可加性,特征重要性和模型预测值可以通过特征贡献的线性组合来表示。简单模型最好的解释是它本身;复杂模型,直接进行解释并不容易,需要通过代理模型来解释。接下来引入代理模型(解释模型)来描述特征归因可加性。

    树模型Shap值的解

    • N为全体特征集合,S为N的一个排列子集(顺序相关)

    • 求和第一项:排列数

    • 求和第二项:对于任意子集S,特征i的贡献

    • 特征i的shap值可以理解为i的贡献归因

    详细内容参考论文。

    用Shap值识别特征交叉

    Shap方法计算两两特征交叉影响:

    通俗理解:交叉影响=两个人合作贡献增益,减去各自单干的贡献;

    单个特征的贡献

    Shap方法计算单个特征的贡献(剔除交叉影响):

    通俗理解:个人影响=个人合作贡献,减去其它N-1个人的贡献;下面还是以收入水平数据集进行案例分析:
    row_to_show = 5
    data_for_prediction = X_test.iloc[row_to_show]  # use 5 row of data here. Could use multiple rows if desired
    data_for_prediction_array = data_for_prediction.values.reshape(1, -1)

    # 计算model的shap值
    explainer = shap.TreeExplainer(model)
    # 计算样本数据的shap值
    shap_values = explainer.shap_values(data_for_prediction)

    shap.initjs()
    shap.force_plot(explainer.expected_value[1], shap_values[1], data_for_prediction)

    图形解释

    • Base value :模型在数据集上的输出均值:-0.1524

    • Output value:模型在单个样本的输出值:0.68

    • 起正向作用的特征:marital_status2、occupation3

    • 起负向作用的特征:capital_gain、education_num

    特征解释

    • 解释Output value(单个样本)和Base value(全体样本Shap平均值)的差异,以及差异是由哪些特征造成的

    • 红色是起正向作用的特征,蓝色是起负向作用的特征

    shap_values_b = explainer.shap_values(X_test)
    shap.force_plot(explainer.expected_value[0], shap_values_b[0], X_test, link="logit")

    特征解释

    • 解释Output value和Base value的差异,以及差异是由哪些特征造成的

    Summary Plots:

    shap_values = explainer.shap_values(X_test)
    shap.summary_plot(shap_values[1], X_test)


    图形解释

    • 每个点是一个样本(人),图片中包含所有样本

    • X轴:样本按Shap值排序-

    • Y轴:特征按Shap值排序

    • 颜色:特征的数值越大,越红

    特征解释

    • martial_status2这个特征最重要,且值越大,收入会相对更高,到达一定峰值,会明显下降

    • 年龄也是影响结果的重要特征,年龄小收入普遍低,但年龄到达一定程度,并不会增加收入,存在年龄小,收入高的人群。

    • 收入水平和capital_gain大致呈正相关。

    shap.summary_plot(shap_values[1],X_test, plot_type="bar")

    上图是特征重要性图谱,由上向下重要性依次减弱。

    shap_values = explainer.shap_values(df)
    shap.dependence_plot('age', shap_values[1], df, interaction_index="capital_gain")

    图形解释:

    • X轴:age

    • Y轴(左):一个样本的age对应的Shap值

    • 颜色:capital_gain越大越红

    特征解释:

    • 排除所有特征的影响,描述age和capital_gain的关系。

    • 年龄大的人更趋向于有大的资本收益,小部分年轻人有大的资本收益。


    RETAIN

    概述

    论文使用称为RETAIN的建模策略解决了这个限制,这是一种两级神经网络顺序数据的注意模型,提供对预测结果的详细解释保持与RNN相当的预测精度。为此,RETAIN依赖于关注机制被建模以表示在遭遇期间医生的行为。一个区别RETAIN的功能(参见图1)是利用注意力生成来利用序列信息机制,同时学习可解释的表示。并模仿医生的行为,RETAIN以相反的时间顺序检查患者的过去访问,从而促进更稳定的注意后代。因此,RETAIN会识别最有意义的访问次数并量化访问量有助于预测的功能。

    模型使用两套权重,一套是visit-level attention ,另外一套是variable-level attention。使用两个RNN网络分别产生。

    Step1:使用线性embedding
    Step2:产生visit-level attention。其中输入RNN中的数据采用时间逆序输入。对于稀疏的attention,使用Sparsemax而不是Softmax。
    Step3:产生variable-levelattention,其中输入RNN中的数据采用时间逆序输入。
    Step4:根据以上两步生成的attentionweight,生成context vector。Ci表示病人第i次visit。
    Step5:根据Context Vector生成预测结果。

    LRP

    逐层相关性传播(LRP)是一种通过在神经网络中运行反向传递来识别重要像素的方法。向后传递是保守的相关再分配过程,其中对较高层贡献最大的神经元从其获得最大相关性。LRP程序如下图所示。

    该方法可以在大多数编程语言中容易地实现并且集成到现有的神经网络框架中。当应用于深度ReLU网络时,LRP可以被理解为预测的深度泰勒分解。

    这里有如何实现LRP用于解释深度模型的代码教程,有兴趣可以动手实现,用于解释自己的深度模型。

    参考文献

    • Interpretable Machine Learning

      https://christophm.github.io/interpretable-ml-book/pdp.html

    • Partial dependence ——集成树的可解析性

      https://zhuanlan.zhihu.com/p/40356430

    • Machine Learning for Insights Challenge

      https://zhuanlan.zhihu.com/p/45898896

    • https://yyqing.me/post/2018/2018-09-25-kaggle-model-insights

    • http://rstudio-pubs-static.s3.amazonaws.com/283647_c3ab1ccee95a403ebe3d276599a85ab8.html

    • 《通向人类可理解、可解释的人工智能》

    • https://github.com/lopusz/awesome-interpretable-machine-learning

    • https://github.com/jphall663/awesome-machine-learning-interpretability

    • https://github.com/Henrilin28/awesome-Interpretable-ML

    • http://xiangruix.com/2018/07/31/lime/

    • https://www.jianshu.com/p/b52efa66154e

    • https://zhuanlan.zhihu.com/p/32891505

    • https://suensummit.github.io/intro-lime/#1

    • https://www.oreilly.com/learning/introduction-to-local-interpretable-model-agnostic-explanations-lime

    • https://github.com/slundberg/shap

    • http://km.oa.com/group/22630/articles/show/380452?kmref=search&from_page=1&no=1

    感谢 zizhewang(汪子哲) 同学协助整理本文,汇总对机器学习模型可解释性相关资料。

    展开全文
  • linux centos 中的挂载是什么意思? Linux系统里是没有盘符的,所有的命令及我们Windows中的盘符都是用目录的形式进行管理,把每一个分区和某一个目录对应。那么,我们对这个目录的操作就是对这个分区的操作,这样就实现...

    linux centos 中的挂载是什么意思?

    Linux系统里是没有盘符的,所有的命令及我们Windows中的盘符都是用目录的形式进行管理,把每一个分区和某一个目录对应。那么,我们对这个目录的操作就是对这个分区的操作,这样就实现了硬件管理手段和软件目录管理手段的统一,这个比如D盘分区和linux系统中根目录/test一一绑定的过程就叫做Linux系统中的挂载。


    那么,如何在linux centos系统中挂载硬盘呢?
    linux centos 挂载的详细操作步骤:

    首先远程连接linux服务器,一般可以使用专用的linux连接工具,个人喜好可以按自己选择远程工具,本人推荐常用下载putty工具。


    2. 查看linux 系统服务器上的 磁盘 情况 fdisk -l


    查看结果: 该服务器上有  三块磁盘  一个40G系统盘 另外另个磁盘  即为   个人磁盘    也就是我们需要挂载的磁盘


    3.  linux centos 磁盘分区命令    倘若我们挂载  /dev/xvdc1    10G 磁盘,那么我们可以先  格式化分区   输入  fdisk /dev/xvdc1  


    依次输入:   n    p    1   二次回车   w   即可。

    1. Command (m for help):n  
    2. Command action  
    3.      e    extended                  //输入e为创建扩展分区  
    4.      p    primary partition (1-4)      //输入p为创建逻辑分区  
    5. p  
    6. Partion number(1-4):1      //在这里输入l,就进入划分逻辑分区阶段了;  
    7. First cylinder (51-125, default 51):   //注:这个就是分区的Start 值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费;  
    8. Using default value 51  
    9. Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10000M ;  
    10.   
    11. Command (m for help): w                     //最后输入w回车保存。 

    4.   linux centos 格式化磁盘命令   #mkfs.ext4 /dev/xvdc1

    5.   linux centos 创建目录命令   #mkdir /mydisk         用于  映射  你需要挂载的 磁盘,  挂载成功后,每次你只需要  访问  该目录   即是可通过#cd /mydisk    访问  对应的磁盘分区    。

    6.    linux centos 挂载磁盘命令   #mount /dev/xvdc1 /mydisk   意思是将服务器上  /dev/xvdc1绑定到   你所创建的目录  mydisk文件目录上。

    7.     linux centos 配置挂载开机启动 ,关键步骤

    echo "/dev/sdb1              /data                  ext4    defaults        0 0" >> /etc/fstab


    该命令及其重要,因为挂载磁盘操作挂载成功后,重启服务器后会丢失挂载,以至于挂载失效,即要写入开启挂载启动项。

    该命令中,ext4 是  对应  你的格式化磁盘的  类型格式,如  我这边的磁盘  格式化时  用了   ext4  格式进行格式。

    8.  重启linux服务器命令  shutdown -r now



    展开全文
  • 因子分析在SPSS中的操作过程及结果解读

    万次阅读 多人点赞 2019-01-14 16:28:27
    笔者在做该项研究时在网络上查阅了大量资料,都写得不够十分完整,所以该篇文章将因子分析从前到后做一个通俗易懂的解释,全文并不涉及非常晦涩的公式原理。 一.因子分析是什么: 1.因子分析: 因子分析模型中,假定...

    因子分析在SPSS中的操作过程及结果解读

    笔者在做该项研究时在网络上查阅了大量资料,都写得比较专业,所以该篇文章将因子分析从前到后做一个通俗易懂的解释,全文并不涉及非常晦涩的公式原理。

    一.因子分析是什么:

    1.因子分析:

    因子分析模型中,假定每个原始变量由两部分组成:共同因子唯一因子共同因子是各个原始变量所共有的因子,解释变量之间的相关关系唯一因子顾名思义是每个原始变量所特有的因子,表示该变量不能被共同因子解释的部分。
    (帮助解读:举个例子,现在一个excel表有10个变量,因子分析可以将这10个变量通过某种算法变为3个,4个,5个等等因子,而每个因子都能表达一种涵义,从而达到了降维的效果,方便接下来的数据分析)

    2.因子分析与主成分分析的区别:

    主成分分析是试图寻找原有变量的一个线性组合。这个线性组合方差越大,那么该组合所携带的信息就越多。也就是说,主成分分析就是将原始数据的主要成分放大
    因子分析,它是假设原有变量的背后存在着一个个隐藏的因子,这个因子可以可以包括原有变量中的一个或者几个,因子分析并不是原有变量的线性组合。
    (帮助解读:主成分分析降维凸显变量中起主导作用的变量,因子分析寻找变量背后可以概括变量特征的因子)

    ---------------------------算法及原理就不介绍了,比较秃头-----------------------------

    二.因子分析怎么做(在spss中):

    1.数据准备:

    下图数据是一份某城市的空气质量数据,一共6个变量,分别是:二氧化硫、二氧化氮、可吸入颗粒物、一氧化碳、臭氧、细颗粒物。在SPSS中打开数据如下:
    图1

    2.操作步骤:

    1)打开因子分析工具:

    在这里插入图片描述

    2)选择要进行因子分析的变量:

    在这里插入图片描述

    3)设置因子分析模型:(可以按照以下截图设置模型,一般来说足够)

    a.描述:这里要说一下KMO和Bartlett的球形度检验,
    KMO检验统计量是用于比较变量间简单相关系数和偏相关系数的指标。主要应用于多元统计的因子分析。KMO统计量是取值在0和1之间。Kaiser给出了常用的kmo度量标准: 0.9以上表示非常适合;0.8表示适合;0.7表示一般;0.6表示不太适合;0.5以下表示极不适合。KMO统计量是取值在0和1之间。当所有变量间的简单相关系数平方和远远大于偏相关系数平方和时,KMO值接近1.KMO值越接近于1,意味着变量间的相关性越强,原有变量越适合作因子分析;当所有变量间的简单相关系数平方和接近0时,KMO值接近0.KMO值越接近于0,意味着变量间的相关性越弱,原有变量越不适合作因子分析。
    Bartlett’s球形检验用于检验相关阵中各变量间的相关性,是否为单位阵,即检验各个变量是否各自独立。如果变量间彼此独立,则无法从中提取公因子,也就无法应用因子分析法。Bartlett球形检验判断如果相关阵是单位阵,则各变量独立,因子分析法无效。由SPSS检验结果显示Sig.<0.05(即p值<0.05)时,说明各变量间具有相关性,因子分析有效

    在这里插入图片描述
    b.抽取:一般来说方法我们都选择主成分方法,但是在python中进行因子分析时用的不是这个方法。
    在这里插入图片描述
    c.旋转:旋转的作用是为了方便最后看什么变量属于哪个因子。
    在这里插入图片描述d.得分
    在这里插入图片描述
    e.选项
    在这里插入图片描述
    到此模型设置完毕,点击确定即可在SPSS窗口中看到分析结果。

    三.因子分析结果解读:

    主要看以下几部分的结果。

    1.KMO和Bartlett的检验结果:

    首先是KMO的值为0.733,大于阈值0.5,所以说明了变量之间是存在相关性的,符合要求;然后是Bartlett球形检验的结果,在这里只需要看Sig.这一项,其值为0.000,所以小于0.05。那么也就是说,这份数据是可以进行因子分析的。
    在这里插入图片描述

    2.公因子方差:

    公因子方差表的意思就是,每一个变量都可以用公因子表示,而公因子究竟能表达多少呢,其表达的大小就是公因子方差表中的“提取”,“提取”的值越大说明变量可以被公因子表达的越好,一般大于0.5即可以说是可以被表达,但是更好的是要求大于0.7才足以说明变量能被公因子表的很合理。在本例中可以看到,“提取”的值都是大于0.7的,所以变量可以被表达的很不错。
    在这里插入图片描述

    3.解释的总方差和碎石图:

    简单地说,解释地总方差就是看因子对于变量解释的贡献率(可以理解为究竟需要多少因子才能把变量表达为100%)。这张表只需要看图中红框的一列,表示的就是贡献率,蓝框则代表四个因子就可以将变量表达到了91.151%,说明表达的还是不错的,我觉得一般都要表达到90%以上才可以,否则就要调整因子数据。再看碎石图,也确实就是四个因子之后折线就变得平缓了。
    在这里插入图片描述
    在这里插入图片描述

    4.旋转成分矩阵:

    这一张表是用来看哪些变量可以包含在哪些因子里,一列一列地看:第一列,最大的值为0.917和0.772,分别对应的是细颗粒物和可吸入颗粒物,因此我们可以把因子归结为颗粒物。第二列,最大值为0.95对应着二氧化硫,因此我们可以把因子归结为硫化物。第三列,最大值为0.962,对应着臭氧,因此可以把因子归结为臭氧。第四列,最大值为0.754和0.571,分别对应着二氧化氮和一氧化碳,因子归结为什么这个我也不清楚,可能要请教一下环工环科的同学们,此处我选择滑稽…
    在这里插入图片描述

    四.总结:

    因子分析还是非常好用的一种降维方式的,在SPSS中进行操作十分简单方便,结果一目了然。喜好机器学习的同学们自然也知道,这么好的方法怎么能少得了python呢,没错python也可以做因子分析,代码量也并不是很大,但是,python做因子分析时会有一些功能需要自己根据算法写(头皮发麻),比如说KMO检验。喜欢本文的话请点赞或留言哦,接下来还会有一些数据分析和机器学习方面的知识与大家分享~

    展开全文
  • URL是什么意思 ? URL介绍

    万次阅读 多人点赞 2020-01-09 20:14:18
    例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。 注意,Windows 主机不区分 URL 大小写,但是,Unix/Linux 主机区分大小写。 扫二维码关注微信公众号,获取技术干货

    前言

    Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。

    URL

    URL是对互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址。URL它具有全球唯一性,正确的URL应该是可以通过浏览器打开此网页的,但如果您访问外网,会提示网页无法打开,这并不能说明这个URL是错误的。只不过在国内不能访问而已。

    下面以浏览一组网页来说URL,如下图:

    在这里插入图片描述

    https://blog.csdn.net/chen1415886044
    

    以上是我CSDN博客的URL地址。访问百度网站时,你的浏览器上就会显示http://www.baidu.com,如下图:

    在这里插入图片描述
    URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。

    URL的一般语法格式为:

    protocol :// hostname[:port] / path / [;parameters][?query]#fragment
    

    格式说明:

    protocol(协议)
    指定使用的传输协议,最常用的HTTP协议,它是目前WWW中应用最广的协议。

    下面列出protocol属性常见的名称:

    http 通过 HTTP 访问该资源。 格式 HTTP://
    https 通过安全的 HTTPS 访问该资源。 格式 HTTPS://
    ftp 通过 FTP访问资源。格式 FTP://
    

    一般来说,https开头的URL要比http开头的更安全,因为这样的URL传输信息是采用了加密技术。

    打开支付宝网页,如下图:
    在这里插入图片描述如果https是网银服务,以上SSL安全隧道成功建立会要求输入账户信息,账号信息是在安全隧道里传输,所有传输的内容都经过加密,所以不会泄密!

    hostname(主机名)

    是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)。

    port(端口号)

    HTTP缺省工作在TCP协议80端口,用户访问网站http:// 打头的都是标准HTTP服务。HTTPS缺省工作在TCP协议443端口。

    path(路径)

    由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

    parameters(参数)

    这是用于指定特殊参数的可选项。

    query(查询)

    可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP。NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

    fragment(信息片断)

    信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

    注意,Windows 主机不区分 URL 大小写,但是,Unix/Linux 主机区分大小写。

    在这里插入图片描述

    扫二维码关注微信公众号,获取技术干货

    展开全文
  • JavaScript 前端开发技术

    千人学习 2018-03-06 12:04:08
    JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的...
  • 很多人在学习深度学习的时候会遇到一个疑惑,那就是深度学习可解释差...下面我们就给大家介绍一下这个词汇的意思。 首先我们给大家解读一下“解释”的含义,其实解释意思就是在观察的基础上进行思考,合理地说明事...
  • 浦发银行 信息科技岗 大数据方向 面经

    万次阅读 多人点赞 2018-08-09 23:00:31
    (我回答研一主要是上课和看论文)接着问我上什么课(我回答了模式识别,最优化方法,矩阵理论等)⑤接下来面试官就总结了一下,大概意思就是:我的专业不对口,虽然我说了我这些东西也做了不少实际的项目和事情,但...
  • 最近在读阿里数据中台的书,因为要在组内做分享,就...文章开篇是一段作者建设数据中台过程的心路历程,下来就是老套路,介绍了国内外大数据发展的历程与大数据的价值探索,这里做简单的介绍。 两个重要的节点需要...
  • 一种解释任何机器学习分类器的预测的技术
  • 车载以太网基础知识介绍(MAC/PHY/MII解释对比)

    万次阅读 多人点赞 2020-05-04 10:58:21
    这里简要介绍其中的MII和RMII,如下图所示。 图1 MII接口 MII共使用了16根线。其中CRS与COL只在半双工模式有效,而车载以太网固定工作在全双工模式下,故应用在汽车环境需要14根线。 图2 RMII接口 RMII:精简版的MII...
  • 文章目录一瞥图形介绍重要概念混淆矩阵延伸出的各个评价指标关键术语 图形介绍 同样的道理,这里我们采用recall来计算模型的好坏,也就是说那些异常的样本我们的检测到了多少,这也是咱们最初的目的!这里通常用混淆...
  • 最全Pycharm教程(13)——Pycharm部署

    万次阅读 多人点赞 2015-12-10 11:00:25
    最全Pycharm教程(1)——定制外观 ... 最全Pycharm教程(4)——有关Python解释器的相关配置  最全Pycharm教程(5)——Python快捷键相关设置  最全Pycharm教程(6)——将Pycharm作为Vim编辑器使用  最全Pyc
  • spark专业术语解释

    千次阅读 2019-09-09 11:03:18
    application:spark应用程序 指用户编写的spark代码,包含了运行在driver端的代码和运行在各个节点上的executor代码 driver:驱动程序 程序中编写的main方法和创建的sparkContext sparkContext spark运行环境,用来和...
  • 本文介绍了卷积神经网络模型的核概念,通道,池化与采样,卷积等等一些概念和CNN的意义。
  • 然后脚本会自动打开刷宝短视频(脚本会显示launch,意思是加载),然后就开始自动更新视频和关注(下中图显示开始第3次薅的状态,下右图显示开始第6次薅的状态,得金币+85) 另外,脚本已经根据客户反馈进行了...
  • BrainFuck——C实现BrainFuck解释

    千次阅读 2016-12-27 18:01:33
    首先介绍一下吊炸天的语言——BrainFuck Brainfuck是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf**k,甚至被简称为BF 这种语言...
  • Anaconda详细安装及使用教程(带图文)

    万次阅读 多人点赞 2018-08-15 17:48:52
    Anacond的介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要...
  • PyCharm与python解释器安装配置小结

    万次阅读 多人点赞 2018-10-10 20:57:30
    接下来介绍安装过程~ 1、 首先下载PyCharm,有很多途径,可以通过官网下载,也可以在原文博客中找到。 这里分享我使用的PyCharm版本链接: https://pan.baidu.com/s/1lcXBFNnoj4NjuiiF8jUhOQ 提取码:ah6d ...
  • VRF介绍

    万次阅读 2019-03-26 09:34:40
    1. Why VRF?   场景 ... 在区块链场景中,有的框架会用算法随机产生出块节点与验证节点(如Algorand),甚至解决分叉。...对可验证随机函数VRF的简明解释 VRF wiki VRF原文 VRF在区块链中的应用
  • 模型可解释

    千次阅读 多人点赞 2019-03-06 23:27:02
    1. 介绍 纵观机器学习的所有应用,当使用黑盒子模型去进行重要疾病诊断时总是难以让人信服。如果诊断模型的输出是一系列的特殊治疗过程(可能有副作用),比如需要手术,或者不需要治疗,人们总想知道为什么会有这样...
  • 用大白话解释什么是Socket

    万次阅读 多人点赞 2020-05-20 17:17:26
    看了网上很多关于Socket的介绍,看完还是不太理解到底什么是Socket,还是很迷。直到最近在学习计算机网络,我才对Socket有了一个更深地理解。之前一直不理解Socket就是因为没学过计算机网络,所以对于很多概念都很...
  • virtualenv的介绍及基本使用(所有命令解释

    万次阅读 多人点赞 2019-05-17 15:45:24
    virtualenv介绍及基本使用 1.virtualenv介绍 2.安装virtualenv 3.virtualenv运行使用 4.virtualenv其他命令 综合 1.virtualenv介绍 在python开发中,我们可能会遇到一种情况,就是当前...
  • 大数据的75个名词解释

    万次阅读 2017-08-01 14:37:52
    在 DataConomy 上连发两篇文章,扼要而全面地介绍了关于大数据的 75 个核心术语,这不仅是大数据初学者很好的入门资料,对于高阶从业人员也可以起到查漏补缺的作用。本文分为上篇(25 个术语)和下篇(50 个术语)。...
  • 深度学习是一个正在快速发展的领域,总是出现很多新的时髦的概念,笔者在这里对里面经常出现的一些概念进行解释,力求通俗易懂。如果能对各位读者带来帮助,我将深感欣慰! 梯度消失:神经网络相当于多层复合函数,...
  • 这个完了之后,意思也就是说,你先序列化个对象到文件了。这个对象是带静态变量的static。 现在修改flyPig类里面的AGE的值,给改成26吧。 然后,看下图里面的运行代码和执行结果。 可以看到,刚刚序列化...
  • YOLOv5相关基础概念通俗解释

    千次阅读 2020-12-02 11:53:57
    IoU IoU(Intersection over Union),即交并比,是目标检测中常见的评价标准,主要是衡量模型生成的bounding box和ground truth box之间的重叠程度,计算公式为: Baseline 基线(Baseline):被用为对比模型表现...
  • PyQt5介绍

    万次阅读 2017-09-13 01:42:53
    PyQt5的介绍这个是翻译的英文版的PyQt5的中文教程。这篇教程的目的是让你开始使用PyQt5组件。这个教程中的例程都已经在Linux中测试过了。关于PyQt5 PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 226,351
精华内容 90,540
关键字:

介绍的意思解释