在数据分析中,模型是非常有用和有效的工具和数据分析应用的场景,在建立模型的过程中,数据挖掘很多时候能够起到非常显著的作用。伴随着计算机科学的发展,模型也越来越向智能化和自动化发展。对数据分析而言,了解数据挖掘背后的思想,可以有助于建立更具稳定性的模型和更高效的模型。
数据挖掘前世今生
数据模型很多时候就是一个类似Y=f(X)的函数,这个函数贯穿了模型从构思到建立,从调试再到最后落地应用的全部过程。
Y=f(X)建立之路
对模型而言,其中的规则和参数,最初是通过经验判断人为给出的。伴随着统计方法和技术的发展,在模型的建立过程中,也引入了统计分析的过程。更进一步地,随着计算机科学的发展,建模的过程,也被交给了机器来完成,因此数据挖掘也被用到了模型的建立中。
数据挖掘,是从大量数据中,挖掘出有价值信息的过程。在有的地方,数据挖掘也被成为是数据探矿,正如数据挖掘的英文data mining一样,从数据中挖掘有价值的知识,正如在矿山中采集钻石一般,不断去芜存精,不断发掘数据新的价值。数据挖掘是通过对数据不断的学习,从中发掘规律和信息的过程,因此也被称为统计学习或者是机器学习。对数据挖掘而言,其应用范围广泛,除了建模,在人工智能领域也有使用。
回到模型中,从经验判断到数据挖掘,建立模型的计算特征发生了极大的改变。
计算特征的发展
首先数据的维度开始从少变多,最初只有几个维度,到现在有上百个维度。数据的体量,即记录的条数也从少量到海量,从过去了百条规模到了现在亿条规模。伴随着数据获取的难度下降,数据的维度和记录数量会越来越多。在这种情况下,数据的处理过程也越来越复杂,从过去简单的几次加减计算得到结果,到了现在必须要经历上亿次的复杂运算。同时,伴随着计算性能的提升,对于从数据中提取信息而言,也从渐渐深入,过去只能发现一眼看出的浅表信息,如今可以不断去挖掘隐含的知识。
数据挖掘的基本思想
数据挖掘的别名机器学习和统计学习一样,数据挖掘的实质是通过计算机的计算能力在一堆数据中发掘出规律并加以利用的过程。因此对数据挖掘而言,就需要经历规则学习、规则验证和规则使用的过程。
数据挖掘的基本思想
规则学习又称为模型训练,在这个步骤中,有一个数据集将作为训练集。按照相关的算法和输出规则的要求,从训练集中筛选出需要使用的变量,并根据这些变量生成相关的规则。有的时候,是将过去已经发生的数据作为训练集,在对比已知的结果和输入的变量的过程中,以尽可能降低输出误差的原则,拟合出相应的模型。
当产生了规则后,就需要验证规则的效果和准确度,这个时候就需要引入验证集。验证集和训练集具有相同的格式,既包含了已知的结果也包含了输入的变量。与训练集不同的是,对验证集的应用是直接将规则应用于验证集中,去产生出相应的输出结果,并用输出的结果去对比实际情况,以来确定模型是否有效。如果有效的话,就可以在实际的场景中应用。如果效果不理想,则回头去调整模型
测试集是将模型在实际的场景中使用,是直接应用模型的步骤。在测试集中,只包含输入变量却没有像其他两个数据一样存在的已知结果。正因为结果未知,就需要用测试集通过模型去产生的输出的结果。这个输出结果,将在为结果产生以后进行验证,只要有效,模型就会一直使用下去。
数据挖掘的流程
数据挖掘与数据分析的流程相似,都是从数据中发现知识的过程,只不过由于数据体量和维度的原因,数据挖掘在计算上最大。
数据挖掘的流程
对数据挖掘而言,首先是进行数据获取,数据获取的来源很多,有系统中自行记录的数据,对这种数据只要导出即可,同时也有外来数据,比如网页爬取得数据,或者是购买的数据,这些数据需要按照分析系统的需求进行导入。
在完成了数据获取步骤后,就需要进行数据处理,数据处理即是处理数据中的缺失值,错误值以及异常值,按照相关的规则进行修正或者删除,同时在数据处理中也需要根据变脸之间的关系,产生出一系列的衍生变量。总而言之,数据处理的结果是可以进行分析的数据,所有数据在进行分析以前都需要完成数据处理的步骤。
如果数据在分布上存在较极端的情况,就需要经历数据平衡的不走。例如对于要输出的原始变量而言,存在及其少量的一种类别以及及其大量的另一种类别,就像有大量的0和少量的1一样,在这种情况下,就需要对数据进行平衡,通过复制1或者削减0的形式生成平衡数据集。
当完成数据平衡后,将会把数据处理的结果分出一部分作为验证集使用,如果数据平衡性好,那么剩下的部分作为训练集,如果平衡性不好,那么平衡数据集就会作为训练集使用。当有了训练集后,就按照相关的算法对训练集进行学习,从而产生出相关的规则和参数。当有了规则以后,就将产生的规则用在验证集中,通过对比已知结果和输出结果之间的误差情况,来判断是否通过。如果通过则在后面再测试集中使用,如果未通过,就通过数据平衡、参数调整,以及变量选择等手段重新调整规则,并再次进行验证,直到通过验证。
对于验证集验证的步骤而言,在无监督学习中没有这个步骤,当缠上规则后,就直接用于测试集。
数据挖掘周而复始
数据挖掘是一个周而复始的过程,在生成规则的过程中,不断地对模型进行调整,从而提升精度。同时也将多批次的历史数据引入到数据挖掘的过程中,进行多次的验证,从而在时间上保证模型的稳定性。
数据挖掘的模式
在数据挖掘中,对于规则的获取,存在三种方式,分别是监督学习,无监督学习和半监督学习,这三种方式都是通过从数据的统计学习来制定规则。
在一个数据挖掘问题中,变量可以分为自变量和因变量,规则是以自变量为输入,以因变量为输出的结果,由此对数据挖掘问题,就把自变量定义为X,把因变量定义为Y。
获取规则的方式,来源于对数据的统计学习
对于监督学习而言,训练集中包括了自变量X和因变量Y,通过对比X和Y的关系,得除相应的规则,同时再在验证集中,通过输入验证集的自变量X,借助规则得到因变量Y的预测值,再将Y的预测值与实际值进行对比,看是否可以将模型验证通过,如果通过了,就把只包含自变量X的测试集用于规则中,最终输出因变量Y的预测值。在监督学习中,因变量的实际值和预测值的对比,就起到监督的作用,在规则制定中需要尽量引导规则输出的结果向实际值靠拢。
对无监督学习而言,训练集中,就没有包含因变量Y,需要根据模型的目标,通过对自变量X的分析和对比来得出相关的规则,并能够产生合理的输出结果,即Y,在制定规则的过程中,需要有一些人为的原则对规则进行调整。当完成调整后,就可以把只包含自变量X的测试集放到规则中,去产生规则的结果Y。
对比监督学习和无监督学习,最大的区别就是,在制定规则的过程中,是否有Y用于引导规则的生成。监督学习中,有Y存在,生成规则过程中和生成规则时,也会对比Y的预测值和实际值。而在无监督学习中,就没有Y作为对比的标准,相应的规则都直接由X产生。
半监督学习,与监督学习类似,也需要因变量Y参与到规则生成和规则验证中去。但是在训练集只用只有一少部分的对象既有自变量X和因变量Y,还有大部分对象只包含了自变量X。因此在对半监督学习的规则生成中,需要有一些特殊的手段来处理只包含的自变量X的对象后,再生成相关的规则。在后面的验证和测试的流程都与监督学习一致。因而对于半监督学习,最重要的问题就是如何借助少量的因变量Y而产生出可以适用的规则。
数据挖掘的应用场景
数据挖掘应用的场景很多,通常有四种情况被广泛的使用。
数据挖掘的应用场景
首先是聚类分析,就是将不同的对象,根据其变量特征的分布自然地分成不同的类别。此外是分类模型,这是针对已知的类别,构建出分类的模型,通过分类的模型来探求其他未分类对象的类别。第三是预测估计,集根据对象的连续数据因变量,通过围绕已知的维度,构建出预测因变量的模型,从而对因变量未知的对象进行估计。最后是关联分析,即通过探求数据对象之间的相关关系,来发现对象之间的联系,在关联分析中,更多是以对象之间的关系作为输出。
聚类分析
聚类分析是一种无监督学习的数据挖掘方法,其目的是基于对象之间的特征,自然地将变量划分为不同的类别。在聚类分析中,基本的思想就是根据对象不同特征变量,计算变量之间的距离,距离理得越近,就越有可能被划为一类,离得越远,就越有可能被划分到不同的类别中去。
聚类分析基本思想
例如在坐标系中,B距离A的距离远远小于,B到C的距离,因此,AB更容易划分为一类,而BC更容易为不同的类别。通常来说,一个对象距离同类的距离是最近的,都小于其他类别中对象的距离。
在聚类分析中,有两种常用的方法,一种是K-means聚类,一种是层次聚类。
K-means聚类VS层次聚类
在K-means聚类中,是预先规定出要产生多少个类别的数量,再根据类别数量自动聚成相应的类。对K-means而言,首先是随机产生于类别数相同的初始点,然后判断每个点与初始点的距离,每个点选择最近的一个初始点,作为其类别。当类别产生后,在计算各个类别的中心点,然后计算每个点到中心点的距离,并根据距离再次选择类别。当新类别产生后,再次根据中心点重复选择类别的过程,直到中心点的变化不再明显。最终根据中心点产生的类别,就是聚类的结果。正如图中所示,一组对象中需要生成三个类别,各个类别之间都自然聚焦在一起。
在层次聚类中,不需要规定出类别的数量,最终聚类的数量可以根据人为要求进行划分。对层次聚类,首先每个对象都是单独的类别,通过比较两两之间距离,首先把距离最小的两个对象聚成一类。接着把距离次小的聚成一类,然后就是不断重复按距离最小的原则,不断聚成一类的过程,直到所有对象都被聚成一类。在层次聚类中,可以以一张树状图来表示聚类的过程,如果要讲对象分类的话,就可以从根节点触发,按照树状图的分叉情况,划分出不同的类别来。在图中,把一组对象分成了三个类别,可见这三个类别就是构成了树状图最开始的三个分支。
聚类分析的过程,和分桔子其实很很像,人们通常都把特征相同的桔子分成一类,聚类分析中,也是同样的方式。
聚类分析案例
正如在这个例子中,有A-H的8个桔子,对每个桔子而言有提体积和变量两个变量。通过将各个桔子投射到重量和体积构成的坐标系中,可以发现BEF距离很近,ACG距离很近,而DH距离很近。如果聚成3类的话,可以是ACG、BEF,DH各为一类。如果是聚成两类,BEFDH与ACG相对更近,因此可以是ACG为一类,而BEFDH为另外一类
分类模型
分类模型通常是通过监督学习产生的,根据已知的对象的类别和其具体特征特征的数据,通过训练从而产生由特征判断类别的规则。在分类模型中,规则的输出就是具体的类别。
分类模型基本思想
分类模型的规则产生的过程中,类别判别的原则与训练集中各特征变量的分布息息相关,通常就是在对比各个类别下特征变量的互相关系,而划分出相关的规则,这个过程遵循的原则就是尽可能让输出的类别与实际的类别保持一致。
当前,不管在学术研究领域还是业务应用领域都有大量的分类模型,通常来说,决策树和朴素贝叶斯是非常普遍的分类模型算法,这两个算法在一些文献中也被列为十大数据挖掘算法。
决策树VS朴素贝叶斯
决策树的规则生成算法是将对象按照相关的特诊变量进行依次拆分,在拆分中不断迭代条件,最终划分为最终的类别。决策树的划分过程,就像是一个树一样,从根节点触发,依次开支散叶,最终形成分类准则。
在图中,首先就按照年龄进行分支,直接将所有对象分成了三堆,其中年龄在31-40岁的被划定为购买类,另外的两堆对象,还需要继续进行分支。对年龄小于30岁,按照是否为学生进行分支,其中是学生的被判定为购买类,不是学生的被判定为不买类。同样对年龄大于40岁,按照信用等级进行分类,信用等级高的被判定为不买类,信息等级低的被判定为购买类。就这样,任何一个对象,都可以根据条件达成的情况,最终到达购买或者不买的节点,完成分类过程。
朴素贝叶斯的规则生成算法相对决策树而言,就没有这么直观了,其依赖于概率中的贝叶斯公式。由公式P(AB)=P(A/B)×P(B)=P(B/A)×P(A)得来的后验概率公式P(A/B)=P(B/A)×P(A)/P(B),其中A类别,B表示条件即特征变量。P(A/B)表示在特定条件下该类别的概率,P(B/A)表示在特定类别下该条件的分布概率,P(A)表示已知的特定分类的概率,而P(B)表示已知的特定条件的概率。
在算法中,P(B/A)、P(A)、P(B)都通过训练集能够得到,再加上在条件一定时,P(B)是恒定的,同时每个条件互相独立,根据概率公式,P(类别/总条件)是P(类别)和所有P(条件/类别)的乘积。因此在朴素贝叶斯中,最大的P(类别/总条件)对应的类别,就是被划分的类别。
最近这几年,网上总有要远离女司机的段子,在网友心中女司机简直如洪水猛兽一般,这种说法一方面来自于个别事例的传播,另外一方面也来自于女司机在低速驾驶时对他人的困扰造成的误解。其实,对于女司机是不是应该害怕的问题,就可以用分类模型的解决。
用分类模型解决女司机问题
已知道路上的车辆中的分布如下,会发生的事故的概率有0.11,而是安全的概率有0.89,车辆的分布就是对事件的原始分类分布。同时,对发生条件的分布如下,发生事故时,男司机概率为0.9,女司机概率为0.1,在安全情况下时,男司机概率为0.2,女司机概率为0.8。
分类模型案例计算流程
那么根据贝叶斯公式,可以知道,当遇到男司机时,发生事故的概率为0.1,而女司机是0.01,两者的事故的概率都很低。对男女司机而言,其发生事故的概率都低于安全的概率,因此在职考虑性别的情况下,所有司机都是被分为安全类别,尤其是女司机,安全的概率远远大于事故。因此不能简单的通过司机的性别,就做出是否危险的判别,尤其是遇到女司机。
关联分析
关联分析模型常用于揭示事件之间的关系,是通过无监督学习的方式,产生的输出事件之间发生关系的规则。关联分析最开始在零售领域常常用到,比如可以提供买了方便面时很多情况都会买火腿肠的关系,因此在某些情况下,关联分析又被称为购物篮分析。
关联分析基本思想
在购物篮分析中,其核心思想就是对比单个事件发生的概率,和多个事件同时发生的概率的情况,如果同时发生的概率与单独发生的概率相近,则可以考虑发生了一个事件后,很有可能会存在同时发生另外一个事件的情况。
有事件X和事件Y,以及XY同时发生的概率,在购物篮分析中,支持度是XY同时发生的概率,置信度是当X发生了,Y也发生的条件概率。
关联分析算法
如果在规则中,两个事件的支持度和置信度都达到了制定的阈值,则可以认为这两个事件具有强关联的关系。关联分析正是体现了这种强关系。在强关系中,还有提升度来确认这种强关系的力度,提升度是指,当X出现同时出现Y的概率,与Y总体出现的概率之比,即X对Y的置信度与Y发生概率的比值,通常来说提升度都是大于1的,提升度越大,说明强关系力度越大。
在关联分析中,强关系存在两种情况,这种情况具有不同的时间上的考虑,第一种是序列关系,即事情顺次发生,比如购买了A了以后又继续购买B,另外一种是同时关联,即事件同时发生,比如买了A的同时也买了B。
啤酒和尿布是关联分析中的经典案例,尽管最近出现了这个只是编造的案例而已,然而去仍然能体现出关联分析的价值出来。
在啤酒和尿布中发现关联分析的价值
啤酒和尿布,两个看起来不无相关的物品,却可以通过关联分析,找出进行同时销售的机会出来,其背后的原理就是发现了,啤酒和尿布之间的强关联关系。
关联分析案例计算过程
假设有尿布,啤酒,零食,水果和香烟的五种商品,同时也知道了各个商品购买的清单,根据清单可以提取单个产品的频数和其对应的概率,以及产品之间两两组合带来频数和概率。根据支持度和置信度的计算公式,可以得到,每个产品组合的支持度,以及置信度。设置强关联最小支出度阈值以及最小置信度阈值都为0.5时,啤酒对尿布达到了强关联的阈值,因此啤酒对尿布这对组合可以认为具有强关联,因此在购买啤酒时推荐购买尿布,能够增加尿布的销量。
预测估计
预测估计的规则,是用来输出连续的数值,即通过预测估计的规则,模型输出的是系列的数值,这些数值可以进行加减乘除的一系列计算。
预测估计基本思想
预测估计的规则通常以一个公式存在,这个公式可以体现出要输出的因变量Y与特征变量X的关系,最简单的来说,像一条在坐标系反应Y和X关系的直线一样,知道了X是多少的情况,就可以根据线性关系,输出对应的Y。这种思路正式用于生成回归方程,因此有的时候预测估计也被称为是回归。
在预测估计中,首先是对比训练集中要输出的因变量Y和特征变量X的关系,通常来说,X不只有一个,而是有X1,X2,X3,Xn等多个,在这种情况下,通过学习X1到Xn与Y的数学关系,从而产生出能够基于X1到XN预测出Y的规则。如果规则通过验证集的验证,就可以在实习情况中与预测要输出的因变量Y。
预测估计算法
预测估计的输出变量可以是绝对值也可以是相对值,在输出绝对值的情况下,线性回归是常用的模型,即生成一条关于Y与X1到Xn的直线方程,用来预测Y。在输出相对值得情况,逻辑回归是常用的模型。在逻辑回归中,输出的Y是概率,在规则中通过拟合X的直线,产生出一个结果,再将直线输出结果进行指数化转换,最终结果就是的Y,即事件发生概率。
下面是一个用预测估计的模型来预测谁可以得奖的例子,在这个例子中,并不是直接用模型预测得奖的人员,而是通过对过去得奖的人员的数据进行学习,从而得出计算得奖概率的规则,并通过学习到的规则,根据本次所有人的表现的数据,来预测各自的将概率。
用预测估计知道得奖概率
在这个例子中,共有7个变量,其中过去得奖是作为0-1因变量存在,1表示得奖,0表示未得奖。在自变量中有另外6个变量。通过对历史的数据的学习,能够得到logit的计算公式,并根据概率换算的公式,得到概率的公式。
再进一步地,取得当前数据后,根据概率公式,得到每个人为的得奖概率,概率最大的即为最可能得奖的人。
挖掘思维总结
在挖掘思维是与数据挖掘相关,相比前面几种思维而言,挖掘思维似乎要晦涩难懂一些,毕竟数据挖掘涉及的已经不局限于简单的数学,而且还扩充到了计算机科学层面。这里设置挖掘思维,其目的就是在解答,当数据量实在太大时,维度实在太多时,应该如何来处理的问题。
挖掘思维总结
数据挖掘的实质,其实还是为了得到一个模型,产生结果。当数据需要特别复杂的计算过程时,数据挖掘就能够产生作用了。数据挖掘通常通过已知输出的结果的数据中作为训练集产生出模型,再用另外一部分知道已知输出结果的数据作为验证集来验证模型的可信程度,通过验证后,再用到测试集中去取得实际的效果。
数据挖掘分为四种类型,就像前面所述,四种类型分别是聚类分析、分类模型、关联分析和预测估计。聚类分析是将数据对象,根据其特征自然分成不同类别。分类模型是针对已知类别,构建分类模型,探求未分类对象的类别。关联分析是通过数据对象之间的相关关系,发现对象之间的联系。预测估计就是根据已知连续数据对象,构建模型,对未知对象估值。
举一个简单的例子,知道一个班之间学生平时作业的情况,将学生自动分成若干类别,就是聚类分析,这些有可能是学霸型,学渣型,还有可能是偏科型,到底类别怎么样,事前都不知道,要聚类以后才知道。已知一部分学生的类别,而不知道另外一部分学生,就用分类模型的方式得出另外一些学生的类别。知道一些学生挂语文的同时还容易挂哪些学科,就是关联分析。从学生平时作业来预测他们期末考试分数就是预测估计。
R语言作为一种数据分析专业语言,是当今数据科学领域最流行的开源编程语言之一,在数据分析与机器学习领域已经成为一款最重要的工具。精通R语言的数据分析师是企业竞相争抢的高薪人才!
第8期R语言数据分析&机器学习高级实战课程正在火热报名中!扫码送课程详细介绍!