美文网首页
数据挖掘学习笔记(一)

数据挖掘学习笔记(一)

作者: 陨落的小白 | 来源:发表于2020-11-21 14:02 被阅读0次

    数据挖掘体系介绍

    数据挖掘是什么?

    什么是数据挖掘,简而言之,对数据进行挖掘,从中提取出有效的信息。一般我们会把这种信息通过概念、规则、规律、模式等有组织的方式展示出来,形成所谓的知识。特别是在这个大数据时代,当数据多到一定程度,统计学原理会让一些内在的、不易察觉的规律慢慢放大、展示出来,而数据挖掘,就是希望在这种大数据背景下,以一种更加高效的方式,找到这些潜在的规律。

    光有数据是不够的,只有形成知识,才能应用到实践当中。例如,银行可以获得企业许许多多的财务数据,经营数据,关系数据等等,但是只看这些数据无法帮银行判断,是否向某个企业发放贷款,某个企业违约的可能性有多大。但如果我们通过许多的历史数据,建立并训练出合适的模型,对数据进行组织和使用,那么当一个新的公司来这里请求贷款,银行就可以根据它所提供的数据,放入模型中,在一定程度上作出相应的预测。再比如支付宝上的芝麻信用分,大概是根据你在阿里系相关应用中的使用数据而得到的。大量的数据如何得到最后的一个分数呢,这里面必然有着一个打分的模型。而花呗借呗等产品,也就可以在一定程度上参考你的信用分,决定向你提供多少贷款额度。

    数据挖掘怎么做?

    数据挖掘体系

    当我们去纵览一系列的数据挖掘案例,我们可以尝试把案例中涉及到的各类元素归结到几个大的模块之中去,主要包括“数据库管理模块”、“挖掘前处理模块”、“挖掘操作模块”、“模式评估模块”、“知识输出模块”。

    数据,是我们数据挖掘的起点。显然,只有拥有了足够且有效的数据,我们才可以从中提取到高质量的信息或者知识。因此,有效的组织、管理、使用数据是做好数据挖掘的基本条件和必要前提。这其中就必然涉及到数据库的管理,结构化数据与非结构化数据的处理等等。此外,如何有效维护各类数据库,建立易于使用的数据仓库,如何管理挖掘出来的各种知识,都是“数据库管理模块”所涉及的内容。

    “挖掘前处理模块”,从简单的角度去理解,可以看作是对于即将使用到的数据所作的各种预处理操作,包括数据清理、集成、抽取、转换、归约等等。更加通俗地说,就是在正式进行数据挖掘之前,需要做好的各类准备工作,包括对业务的理解,对数据的洞察,对需求的理解,对问题的建模等等。

    “挖掘操作模块”,就是数据挖掘的实战操作。从某种角度来说,我们可以将其理解为选择合适的方法/模型,对数据进行组织和处理,从中提取出有效的模式或者规则等。其实可以简单看作我们选择模型,选择策略进而使用算法训练模型的过程。比如我们建立一个“决策树”模型以评估是否向某个企业发放贷款,建立一个SVM模型帮助我们选择股票等等,而挖掘操作模块,就是我们怎样去得到这么一个有效的模型。

    “模式评估模块”,就是对于我们得到的模型进行评价。我们的模型是否有效,是否具有好的泛化能力,是否可以处理复杂极端的情况等,都需要通过模式评估模块进行回答。

    “知识输出模块”,可以简单理解为在评估模型之后,对模型进行使用和解释。我们的模型通过了训练与评估,说明这是一个有效的模型,那我们又可以从这个输出的模型中得到什么呢?举个例子,我们建立决策树模型对企业的违约风险进行预测,在得到的模型中,我们便可以总结出哪些指标对于“违约”有着更大的影响,这类指标可能是以往没有提到或者太过注意的,甚至可能是几个常见指标的某种组合。再比如alpha-go在对战李世石的围棋比赛中,下出了一些人类可能难以理解的走法,那相关专业人士是否可以对这些走法进行研究和分析进而得到新的东西呢?这便可以理解为知识的输出模块。

    CRISP-DM模型

    CRISP-DM模型,全称是Cross-Industry Standard Process for Data Mining,即跨行业数据挖掘标准流程。它从商业的角度给出对数据挖掘方法的理解,其流程主要包括:业务理解、数据理解、数据准备、建立模型、模型评价、模型实施。

    业务理解:数据挖掘针对的都是一个具体的问题,提出相应的解决方案。因此在最开始的时候,有必要对业务的目标和需求进行研究和分析,进而将其转化为一个数据挖掘的问题,以及提出初步的计划。

    数据理解:由于业务的行业属性,其数据也具备着相应的特点。因此从数据的收集阶段开始,就有必要去熟悉数据,识别数据的质量问题,发现数据的一些内在属性,甚至提出一定的假设等等。

    前两步基本都是对特定的问题进行深入研究和分析,对数据的理解本质上还是对于问题的理解。

    数据准备:亦可以称之为数据预处理。数据准备阶段包括从未处理的数据中构造出最终数据集的所有活动,所谓最终数据集,可以理解为模型的直接输入部分。该部分的任务主要有数据结构化、特征选择、数据转换、数据清洗等等。

    建立模型:选择和应用不同的模型技术,模型参数被调整到最佳的数值。

    模型评价:正如前文所说,在正式使用模型之前,需要彻底地评估模型,检查构造模型的步骤,确保模型可以完成目标。通常来说,我们使用交叉验证的方法对模型的泛化能力进行评估。

    模型实施:通常,模型的创建不是项目的结束,模型的作用是从数据中找到知识,获得的知识需要便于用户重新组织和展示。根据需求,这个阶段可以产生简单的报告,或是实现一个比较复杂的、可重复的数据挖掘过程。

    数据预处理

    为什么需要数据预处理

    为什么需要数据预处理呢?因为我们最初搜集得到的数据,往往难以直接输入模型,存在着各种各样的问题。

    不完整性:在数据的搜集过程中,很明显我们难以获得所有自己想要的数据。例如我们希望采集一个地方的天气数据,如果某个时间点设备突然出了故障,没有采集到相应的数据,而从头重来一次又成本较高,那我们很有可能就选择这个带有空缺值的数据集。实际的数据搜集过程中,我们往往难以获得所有感兴趣的特征以及相应的数据,亦或者我们只能获得一段时间的合并数据,而很难获得每个时间点的数据。我们搜集到的数据,往往具有这样或者那样的不完整性。

    噪音数据:例如收集问卷的时候,有些人可能填写不太认真,年龄填了“205”;在用设备收集数据的时候,也会由于某些干扰而产生一些明显错误的数据。对于搜集过程中得到的噪音数据,我们必须对其进行处理,才能让我们的数据更有效。

    不一致性:我们的数据来源可能是多个外部数据库,这些数据库在设计时,无论是结构,特征表征还是量纲都可能存在着这样或者那样的不一致,因此需要对这些数据进行整合处理,得到具有一致性的数据集。

    此外,为了数据挖掘的方便,我们有可能还需要进行一些数据转换的操作。当搜集到的数据过多时,我们也需要对其进行归约处理,以缩小数据量,提高挖掘效率。

    总之,没有高质量的数据,就没有高质量的数据挖掘结果。

    数据预处理的多种方法

    数据清理

    数据清理主要有三大任务:处理缺失数据、平滑噪音数据、确认和去除孤立点。

    对于缺失数据,一个完整的处理方法通常包含一下几个步骤:

    1. 识别缺失数据
    2. 检查导致数据缺失的原因
    3. 删除包含缺失值的实例或者使用合理的数值代替缺失值

    当我们面对一个缺失值时,最简单粗暴的方法就是将其对应的实例直接删除。这样不会影响数据整体的真实性。但是这种方法往往不是最好的,特别是缺失值比例较大的时候。

    如果我们想要填补缺失值,那方法还是蛮多的:

    1. 手工填入空缺的值,大概就是根据经验填(一般不采用)
    2. 使用一个全局的常量填补缺失值。虽然简单但是没有意义。
    3. 使用相应特征的平均值填充缺失值。例如某个特征的取值区间是[0,1],就在缺失值里填入0.5。嗯,也挺没道理的。
    4. 使用其他样本该特征取值的平均值或者众数,作为缺失值的替代。这是根据搜集样本的总体情况来对个体进行一个评估。
    5. 使用最可能的值予以填充。例如根据不缺失的样本的数据,我们建立某个特征(带缺失值的特征)相对于其他特征的回归模型,从而对缺失值进行预测。亦或者使用贝叶斯方法、判定树等进行归纳确定。
    6. 多重插补(MI)法。多重插补是一种基于重复模拟的处理缺失值的方法,在面对复杂的缺失值问题时,MI是最常用的方法。它将从一个包含缺失值的数据集中生成一组完整的数据集(通常3~10个)。每个模拟数据集中,缺失的数据使用蒙特卡洛方法填补。此时,标准的统计方法便可以应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及相应的置信区间。

    对于噪音数据,主要有一下几种处理方法:

    1. 分箱从而进行平滑处理
    2. 聚类方法:对样本点进行聚类分析,之后检测出离群点、异常点,然后删除相应的样本,或者进行代替。
    1. 线性回归:对于样本数据进行回归处理,将偏离回归直线较远的样本点删除,或者进行数据的平滑处理。
    1. 人机结合共同检测:由计算机检测出可疑的点,然后由用户确认。
    2. 作出箱形图,观察离群点。

    数据集成

    数据集成是指将多个数据源中的数据结合起来放在一个一致的数据库中。主要包括冗余数据的处理、模式集成并解决数据冲突这两块内容。

    当我们从多个数据源中抽取数据时,容易带来数据的冗余。例如,相同实体的属性在不同的数据源中可能是不同的命名方式,但在抽取过程中我们会把两个都拿进数据库中。再比如有些属性可以从其他属性中导出,如“销售额=单价×销售量”,如果单价是个常数,那销售量和销售额呈线性关系,只留其一就行了。

    有些冗余数据,需要我们进行人工查看,例如由于命名方式不同带来的冗余。而另一些冗余,则可以通过相关性分析(如计算属性之间的相关系数)检测到,之后再进行处理。

    从不同的数据源中提取数据时,也很容易出现数据冲突的问题。常见的冲突类型主要有以下几种:

    1. 数据类型冲突:例如性别这一属性,我们可以使用Male、Female这种字符串表示,也可以使用M、F这种字符表示,还可以使用0、1这种整数表示
    2. 数据标签冲突:主要存在同名异义、异名同义的问题。例如“学生成绩”和“分数”,其可能表达相同的事物,也可能表达不同的事物。
    3. 度量单位冲突:例如对于学生成绩,有百分制,有五分制,甚至有字符表示(优秀、良好、及格…),在处理过程中也需要注意
    4. 概念不清:例如最近交易额这一数据,不同数据源的“最近”可能是不一致的,前一天?前一周?前一个月?都是有可能的。

    对于这些数据冲突的情况,我们首先需要识别冲突,之后再设计相应的数据结构,标签等,对数据进行统一性转换以解决冲突。

    数据转换

    数据转换主要包括数据的规范化处理、属性的构造、数据归约、数据离散化等内容。

    数据规范化

    一般我们也可以称之为数据的标准化。其主要目的是用于消除不同特征数据之间的量纲影响等,对数据的范围进行限定以方便挖掘。

    min-max规范化:对于任一特征A中的数值数据,其转换方法为
    v'=\frac{v-min_{A}}{max_{A}-min_A}(new\_max_{A}-new\_min_{A})+new\_min_{A}

    这种方法对原始数据进行了线性变换,将其范围从(min,max)转换到(new\_min,new\_max),同时保持了原始数据值之间的关系。一般为了方便,我们会将其转换到0-1之间。

    但是,当有了新的输入且落在原始数据区之外,该方法将面临越界错误。同时,该方法受到孤立点的影响较大。

    z-score规范化:对于任一特征A中的数值数据,其转换方法为

    v'=\frac{v-\bar{v_{A}}}{\sigma_{A}}

    即减去均值除以方差。当特征的最大值和最小值未知,或者孤立点左右了min-max方法时,该方法将是一个不错的选择。

    0-1规范化:又称为小数定标规范化,即通过移动属性的小数点位置进行规范化,将其数值移动到0-1之间。

    v'=\frac{v}{10^j}

    其中j是特征最大值的整数部分的数字个数,例如最大是125时,整数部分有3个数,则转换后数据变为\frac{125}{10^3}=0.125 。显然,这种方法也会受到最大值的影响。

    属性构造

    属性构造是指由给定的属性构造并增添新的属性,以帮助提高精度和对高维数据结构的理解。如定义属性“销售额”=单价×销售量。如果不同的样本单价和销售额不完全相同,那销售额将会是一个新的有意义的属性。

    数据归约

    数据归约是指在可能获得相同或者相似结果的前提下,对数据的容量进行有效的缩减。数据规约的主要目的是减少待处理数据的数量,倘若数据过多,那么数据挖掘的时间效率将会变低。

    数据归约有多种方法,例如数据立方体的构建、通过主成分分析等手段降维、使用编码机制压缩数据集、用较小的数据替代原始数据进行数值压缩等等。

    数据离散化

    数据离散化简单理解为对数据进行分组,以方便进一步处理。常用的离散化方法有分箱、直方图分析、聚类分析、自然分割等等。

    分箱

    分箱是一种常见的离散化技术。一般使用箱的深度表示箱子里的数据个数,使用箱的宽度表示每个箱子的取值区间。我们可以使用相同宽度或者相同深度进行分箱处理。

    举个例子,我们的数据集是\{1,1,1,1,2,4,5,6,7,9,9,9\},如果按照相同宽度进行分割,那么我们设定每个箱子的取值范围分别为[1,3],[4,6],[7,9]…这样,我们就可以把数据分为\{1,1,1,1,2\},\{4,5,6\},\{7,9,9,9\}这三组。如果按照相同的深度进行分割,设定每个箱子深度为4,就可以分为\{1,1,1,1\},\{2,4,5,6\},\{7,9,9,9\}这三组,如果设定箱子深度为6,就可以分为\{1,1,1,1,2,4\},\{5,6,7,9,9,9\}这两组。

    之前说过,分箱可以对孤立数据、噪音数据等进行平滑处理,其主要的方式就是赋予每个箱子里的数据相同的值。实际上,离散化也是如此,通过分箱后的平滑处理,我们将大量的数据分为较少的组,之后赋予“组”这一新的样本具有意义的特征取值,从而实现了离散化。

    一般平滑箱内存储数据值的方式有三种,分别是按箱平均值平滑,按箱内中值平滑以及按箱边界值平滑。对于上面的例子,如按相同宽度分为\{1,1,1,1,2\},\{4,5,6\},\{7,9,9,9\},如果按照平均值平滑处理,那三个箱子的取值分别为1(取整),5,8(取整);如果按照中值平滑,那三个箱子里数据的取值分别为1,5,9;如果按照边界值平滑,那对于第一个箱子,里面数据的取值则仍为\{1,1,1,1,2\}

    不过考虑到我们希望对数据进行离散化处理,一个箱子往往代表一个新的“样本”,因此其特征的取值应该具有唯一性。所以更常用的方法是使用平均值或者中值进行平滑。对于边界值平滑,我们往往将箱子中的最大和最小值作为边界值,之后按照箱中每个元素距离边界值的远近,将其赋为边界值。例如对于\{1,2,3,4,5,6\},其边界值为1和6,而2,3离1较近,所以2,3全部赋为1;4,5离6较近,所以4,5全部赋为6。因此,按照边界值平滑后的箱内数据为\{1,1,1,6,6,6\}。一般我们使用这种方法对于噪音数据或者孤立点进行平滑处理。

    直方图方法

    直方图方法就是根据数据的频率分布直方图,将其进行分组。类似于分箱方法,可以理解为综合宽度和深度的分箱方法。

    聚类方法

    聚类也是一种常用的离散化手段。将数据按照“类内最大相似度,类间最小相似度”的原则进行聚类,利用每一个类的中心点代表该类包含的所有对象,从而实现了数据的离散化。同时,聚类还可以识别出数据中的噪音点、孤立点。

    按照自然分类进行数据分割

    一般我们使用3-4-5法则对数字型数据进行分类,将数据分为若干个“自然”的区间。

    1. 如果在所有数字的最高位覆盖 3, 6, 7或9个不同的值,则将数据分成3段。
    2. 如果在所有数字的最高位覆盖 2, 4, 8个不同的值,则将数据分成4 段。
    3. 如果在所有数字的最高位覆盖 1, 5, 10个不同的值,则将数据分成 5 段。

    举个例子,如果数据有:101、110、203、222、305、315,其中最高位包含三个不同的值1,2,3,则可以分成[100,200),[200,300),[300,400)这三段。

    如果数据有:101、110、103、422、405、415、400,最高位包含2个值1和4,则将其分成[100,150),[150,200),[400,450),[450,500)这四段。

    如果数据有:101、210、203、322、305、415、500,最高位包含1、2、3、4、5这五个数字,则分成[100,200),[200,300),[300,400),[400,500),[500,600)这五段。

    相关文章

      网友评论

          本文标题:数据挖掘学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/gezsiktx.html