精华内容
下载资源
问答
  • 数据挖掘面试 150 道题(附答案)

    万次阅读 多人点赞 2019-09-21 13:50:38
    1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A) A. 关联规则发现 B. 聚类 C. 分类 D. 自然语言处理 2. 以下两种描述分别对应哪两种对分类算法的评价标准...

     

    单选题

    1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A)

    A. 关联规则发现

    B. 聚类

    C. 分类

    D. 自然语言处理


    2. 以下两种描述分别对应哪两种对分类算法的评价标准? (A)

    (a) 警察抓小偷,描述警察抓的人中有多少个是小偷的标准。

    (b) 描述有多少比例的小偷给警察抓了的标准。

    A. Precision, Recall 准确率和召回率

    B. Recall, Precision

    C. Precision, ROC

    D. Recall, ROC


    3. 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C)

    A. 频繁模式挖掘

    B. 分类和预测

    C. 数据预处理

    D. 数据流挖掘


    4. 当不知道数据所带标签时,可以使用哪种技术促使带同类标签的数据与带其他标签的数据相分离?(B)

    A. 分类

    B. 聚类

    C. 关联分析

    D. 隐马尔可夫链


    5. 什么是 KDD? (A)

    A. 数据挖掘与知识发现

    B. 领域知识发现

    C. 文档知识发现

    D. 动态知识发现


    6. 使用交互式的和可视化的技术,对数据进行探索属于数据挖掘的哪一类任务?(A)

    A. 探索性数据分析

    B. 建模描述

    C. 预测建模

    D. 寻找模式和规则


    7. 为数据的总体分布建模;把多维空间划分成组等问题属于数据挖掘的哪一类任务?(B)

    A. 探索性数据分析

    B. 建模描述

    C. 预测建模

    D. 寻找模式和规则


    8. 建立一个模型,通过这个模型根据已知的变量值来预测其他某个变量值属于数据挖掘的哪一类任务?(C)

    A. 根据内容检索

    B. 建模描述

    C. 预测建模

    D. 寻找模式和规则


    9. 用户有一种感兴趣的模式并且希望在数据集中找到相似的模式,属于数据挖掘哪一类任务?(A)

    A. 根据内容检索

    B. 建模描述

    C. 预测建模

    D. 寻找模式和规则


    11. 下面哪种不属于数据预处理的方法? (D)

    A 变量代换

    B 离散化

    C 聚集

    D 估计遗漏值


    12. 假设 12 个销售价格记录组已经排序如下:5, 10, 11, 13, 15,35, 50, 55, 72, 92, 204, 215 使用如下每种方法将它们划分成四个箱。等频(等深)划分时,15 在第几个箱子内? (B)

    A 第一个

    B 第二个

    C 第三个

    D 第四个


    13. 上题中,等宽划分时(宽度为 50),15 又在哪个箱子里? (A)

    A 第一个

    B 第二个

    C 第三个

    D 第四个


    14. 下面哪个不属于数据的属性类型:(D)

    A 标称

    B 序数

    C 区间

    D 相异


    15. 在上题中,属于定量的属性类型是:(C)

    A 标称

    B 序数

    C 区间

    D 相异


    16. 只有非零值才重要的二元属性被称作:(C)

    A 计数属性

    B 离散属性

    C 非对称的二元属性

    D 对称属性


    17. 以下哪种方法不属于特征选择的标准方法: (D)

    A 嵌入

    B 过滤

    C 包装

    D 抽样


    18. 下面不属于创建新属性的相关方法的是: (B)

    A 特征提取

    B 特征修改

    C 映射数据到新的空间

    D 特征构造


    19. 考虑值集 {1、2、3、4、5、90},其截断均值(p=20%)是 (C) ?

    A 2

    B 3

    C 3.5

    D 5


    20. 下面哪个属于映射数据到新的空间的方法? (A)

    A 傅立叶变换

    B 特征加权

    C 渐进抽样

    D 维归约


    21. 熵是为消除不确定性所需要获得的信息量,投掷均匀正六面体骰子的熵是: (B)

    A 1 比特

    B 2.6 比特

    C 3.2 比特

    D 3.8 比特


    22. 假设属性 income 的最大最小值分别是 12000 元和 98000 元。利用最大最小规范化的方法将属性的值映射到 0 至 1 的范围内。对属性 income 的 73600 元将被转化为:(D)

    A 0.821

    B 1.224

    C 1.458

    D 0.716


    23. 假定用于分析的数据包含属性 age。数据元组中 age 的值如下(按递增序):13,15,16,16,19,20,20,21,22,22,25,25,25,30,33,33,35,35,36,40,45,46,52,70, 问题:使用按箱平均值平滑方法对上述数据进行平滑,箱的深度为 3。第二个箱子值为:(A)

    A 18.3

    B 22.6

    C 26.8

    D 27.9


    24. 考虑值集 {12, 24, 33, 2, 4, 55, 68, 26},其四分位数极差是:(A)

    A 31

    B 24

    C 55

    D 3


    25. 一所大学内的各年纪人数分别为:一年级 200 人,二年级 160 人,三年级 130 人,四年级 110 人。则年级属性的众数是: (A)

    A 一年级

    B 二年级

    C 三年级

    D 四年级


    26. 下列哪个不是专门用于可视化时间空间数据的技术: (B)

    A 等高线图

    B 饼图

    C 曲面图

    D 矢量场图


    27. 在抽样方法中,当合适的样本容量很难确定时,可以使用的抽样方法是: (D)

    A 有放回的简单随机抽样

    B 无放回的简单随机抽样

    C 分层抽样

    D 渐进抽样


    28. 数据仓库是随着时间变化的, 下面的描述不正确的是 (C)

    A. 数据仓库随时间的变化不断增加新的数据内容;

    B. 捕捉到的新数据会覆盖原来的快照;

    C. 数据仓库随事件变化不断删去旧的数据内容;

    D. 数据仓库中包含大量的综合数据, 这些综合数据会随着时间的变化不断地进行重新综合.


    29. 关于基本数据的元数据是指: (D)

    A. 基本元数据与数据源, 数据仓库, 数据集市和应用程序等结构相关的信息;

    B. 基本元数据包括与企业相关的管理方面的数据和信息;

    C. 基本元数据包括日志文件和简历执行处理的时序调度信息;

    D. 基本元数据包括关于装载和更新处理, 分析处理以及管理方面的信息.


    30. 下面关于数据粒度的描述不正确的是: (C)

    A. 粒度是指数据仓库小数据单元的详细程度和级别;

    B. 数据越详细, 粒度就越小, 级别也就越高;

    C. 数据综合度越高, 粒度也就越大, 级别也就越高;

    D. 粒度的具体划分将直接影响数据仓库中的数据量以及查询质量.


    31. 有关数据仓库的开发特点, 不正确的描述是: (A)

    A. 数据仓库开发要从数据出发;

    B. 数据仓库使用的需求在开发出去就要明确;

    C. 数据仓库的开发是一个不断循环的过程, 是启发式的开发;

    D. 在数据仓库环境中, 并不存在操作型环境中所固定的和较确切的处理流, 数据仓库中数据分析和处理更灵活, 且没有固定的模式


    32. 在有关数据仓库测试, 下列说法不正确的是: (D)

    A. 在完成数据仓库的实施过程中, 需要对数据仓库进行各种测试. 测试工作中要包括单元测试和系统测试.

    B. 当数据仓库的每个单独组件完成后, 就需要对他们进行单元测试.

    C. 系统的集成测试需要对数据仓库的所有组件进行大量的功能测试和回归测试.

    D. 在测试之前没必要制定详细的测试计划.


    33. OLAP 技术的核心是: (D)

    A. 在线性;

    B. 对用户的快速响应;

    C. 互操作性.

    D. 多维分析


    34. 关于 OLAP 的特性, 下面正确的是: (D)

    (1) 快速性 (2) 可分析性 (3) 多维性 (4) 信息性 (5) 共享性

    A. (1) (2) (3)

    B. (2) (3) (4)

    C. (1) (2) (3) (4)

    D. (1) (2) (3) (4) (5)


    35. 关于 OLAP 和 OLTP 的区别描述, 不正确的是:(C)

    A. OLAP 主要是关于如何理解聚集的大量不同的数据. 它与 OTAP 应用程序不同.

    B. 与 OLAP 应用程序不同, OLTP 应用程序包含大量相对简单的事务.

    C. OLAP 的特点在于事务量大, 但事务内容比较简单且重复率高.

    D. OLAP 是以数据仓库为基础的, 但其最终数据来源与 OLTP 一样均来自底层的数据库系统, 两者面对的用户是相同的.


    36. OLAM 技术一般简称为” 数据联机分析挖掘”, 下面说法正确的是:(D)

    A. OLAP 和 OLAM 都基于客户机 / 服务器模式, 只有后者有与用户的交互性;

    B. 由于 OLAM 的立方体和用于 OLAP 的立方体有本质的区别.

    C. 基于 WEB 的 OLAM 是 WEB 技术与 OLAM 技术的结合.

    D. OLAM 服务器通过用户图形借口接收用户的分析指令, 在元数据的知道下, 对超级立方体作一定的操作.


    37. 关于 OLAP 和 OLTP 的说法, 下列不正确的是:(A)

    A. OLAP 事务量大, 但事务内容比较简单且重复率高.

    B. OLAP 的最终数据来源与 OLTP 不一样.

    C. OLTP 面对的是决策人员和高层管理人员.

    D. OLTP 以应用为核心, 是应用驱动的.


    38. 设 X={1,2,3} 是频繁项集,则可由 X 产生__(C)__个关联规则。

    A、4

    B、5

    C、6

    D、7


    40. 概念分层图是__(B)__图。

    A、无向无环

    B、有向无环

    C、有向有环

    D、无向有环


    41. 频繁项集、频繁闭项集、最大频繁项集之间的关系是: (C)

    A、频繁项集 频繁闭项集 = 最大频繁项集

    B、频繁项集 = 频繁闭项集 最大频繁项集

    C、频繁项集 频繁闭项集 最大频繁项集

    D、频繁项集 = 频繁闭项集 = 最大频繁项集


    42. 考虑下面的频繁 3 - 项集的集合:{1,2,3},{1,2,4},{1,2,5},{1,3,4},{1,3,5},{2,3,4},{2,3,5},{3,4,5} 假定数据集中只有 5 个项,采用 合并策略,由候选产生过程得到 4 - 项集不包含(C)

    A、1,2,3,4

    B、1,2,3,5

    C、1,2,4,5

    D、1,3,4,5


    43. 下面选项中 t 不是 s 的子序列的是 (C)

    A、s=<{2,4},{3,5,6},{8}> t=<{2},{3,6},{8}>

    B、s=<{2,4},{3,5,6},{8}> t=<{2},{8}>

    C、s=<{1,2},{3,4}> t=<{1},{2}>

    D、s=<{2,4},{2,4}> t=<{2},{4}>


    44. 在图集合中发现一组公共子结构,这样的任务称为 (B)

    A、频繁子集挖掘

    B、频繁子图挖掘

    C、频繁数据项挖掘

    D、频繁模式挖掘


    45. 下列度量不具有反演性的是 (D)

    A、系数

    B、几率

    C、Cohen 度量

    D、兴趣因子


    46. 下列__(A)__不是将主观信息加入到模式发现任务中的方法。

    A、与同一时期其他数据对比

    B、可视化

    C、基于模板的方法

    D、主观兴趣度量


    47. 下面购物篮能够提取的 3 - 项集的最大数量是多少(C)

    ID 购买项

    1 牛奶,啤酒,尿布

    2 面包,黄油,牛奶

    3 牛奶,尿布,饼干

    4 面包,黄油,饼干

    5 啤酒,饼干,尿布

    6 牛奶,尿布,面包,黄油

    7 面包,黄油,尿布

    8 啤酒,尿布

    9 牛奶,尿布,面包,黄油

    10 啤酒,饼干

    A、1

    B、2

    C、3

    D、4


    48. 以下哪些算法是分类算法,(B)

    A. DBSCAN

    B. C4.5

    C. K-Mean

    D. EM


    49. 以下哪些分类方法可以较好地避免样本的不平衡问题, (A)

    A,KNN

    B,SVM

    C,Bayes

    D,神经网络


    50. 决策树中不包含一下哪种结点, (C)

    A, 根结点(root node)

    B, 内部结点(internal node)

    C, 外部结点(external node)

    D, 叶结点(leaf node)


    51. 不纯性度量中 Gini 计算公式为(其中 c 是类的个数) (A)

    A,

    B,

    C,

    D, 


    53. 以下哪项关于决策树的说法是错误的 (C)

    A. 冗余属性不会对决策树的准确率造成不利的影响

    B. 子树可能在决策树中重复多次

    C. 决策树算法对于噪声的干扰非常敏感

    D. 寻找最佳决策树是 NP 完全问题


    54. 在基于规则分类器的中,依据规则质量的某种度量对规则排序,保证每一个测试记录都是由覆盖它的 “最好的” 规格来分类,这种方案称为 (B)

    A. 基于类的排序方案

    B. 基于规则的排序方案

    C. 基于度量的排序方案

    D. 基于规格的排序方案。


    55. 以下哪些算法是基于规则的分类器 (A)

    A. C4.5

    B. KNN

    C. Naive Bayes

    D. ANN


    56. 如果规则集 R 中不存在两条规则被同一条记录触发,则称规则集 R 中的规则为(C);

    A. 无序规则

    B. 穷举规则

    C. 互斥规则

    D.有序规则


    57. 如果对属性值的任一组合,R 中都存在一条规则加以覆盖,则称规则集 R 中的规则为 (B)

    A. 无序规则

    B. 穷举规则

    C. 互斥规则

    D. 有序规则


    58. 如果规则集中的规则按照优先级降序排列,则称规则集是 (D)

    A, 无序规则

    B,穷举规则

    C, 互斥规则

    D,有序规则


    59. 如果允许一条记录触发多条分类规则,把每条被触发规则的后件看作是对相应类的一次投票,然后计票确定测试记录的类标号,称为(A)

    A. 无序规则

    B. 穷举规则

    C. 互斥规则

    D. 有序规则


    60. 考虑两队之间的足球比赛:队 0 和队 1。假设 65% 的比赛队 0 胜出,剩余的比赛队 1 获胜。队 0 获胜的比赛中只有 30% 是在队 1 的主场,而队 1 取胜的比赛中 75% 是主场获胜。如果下一场比赛在队 1 的主场进行队 1 获胜的概率为 (C)

    A. 0.75

    B. 0.35

    C,0.4678

    D, 0.5738


    61. 以下关于人工神经网络(ANN)的描述错误的有 (A)

    A,神经网络对训练数据中的噪声非常鲁棒

    B,可以处理冗余特征

    C,训练 ANN 是一个很耗时的过程

    D,至少含有一个隐藏层的多层神经网络


    62. 通过聚集多个分类器的预测来提高分类准确率的技术称为 (A)

    A, 组合 (ensemble)

    B, 聚集 (aggregate)

    C,合并 (combination)

    D,投票 (voting)


    63. 简单地将数据对象集划分成不重叠的子集,使得每个数据对象恰在一个子集中,这种聚类类型称作( B )

    A、层次聚类

    B、划分聚类

    C、非互斥聚类

    D、模糊聚类


    64. 在基本 K 均值算法里,当邻近度函数采用( A )的时候,合适的质心是簇中各点的中位数。

    A、曼哈顿距离

    B、平方欧几里德距离

    C、余弦距离

    D、Bregman 散度


    65.( C )是一个观测值,它与其他观测值的差别如此之大,以至于怀疑它是由不同的机制产生的。

    A、边界点

    B、质心

    C、离群点

    D、核心点


    66. BIRCH 是一种( B )。

    A、分类器

    B、聚类算法

    C、关联分析算法

    D、特征选择算法


    67. 检测一元正态分布中的离群点,属于异常检测中的基于( A )的离群点检测。

    A、统计方法

    B、邻近度

    C、密度

    D、聚类技术


    68.( C )将两个簇的邻近度定义为不同簇的所有点对的平均逐对邻近度,它是一种凝聚层次聚类技术。

    A、MIN(单链)

    B、MAX(全链)

    C、组平均

    D、Ward 方法


    69.( D )将两个簇的邻近度定义为两个簇合并时导致的平方误差的增量,它是一种凝聚层次聚类技术。

    A、MIN(单链)

    B、MAX(全链)

    C、组平均

    D、Ward 方法


    70. DBSCAN 在最坏情况下的时间复杂度是( B )。

    A、O(m)

    B、O(m2)

    C、O(log m)

    D、O(m*log m)


    71. 在基于图的簇评估度量表里面,如果簇度量为 proximity(Ci , C),簇权值为 mi ,那么它的类型是( C )。

    A、基于图的凝聚度

    B、基于原型的凝聚度

    C、基于原型的分离度

    D、基于图的凝聚度和分离度


    72. 关于 K 均值和 DBSCAN 的比较,以下说法不正确的是( A )。

    A、K 均值丢弃被它识别为噪声的对象,而 DBSCAN 一般聚类所有对象。

    B、K 均值使用簇的基于原型的概念,而 DBSCAN 使用基于密度的概念。

    C、K 均值很难处理非球形的簇和不同大小的簇,DBSCAN 可以处理不同大小和不同形状的簇。

    D、K 均值可以发现不是明显分离的簇,即便簇有重叠也可以发现,但是 DBSCAN 会合并有重叠的簇。


    73. 以下是哪一个聚类算法的算法流程:①构造 k-最近邻图。②使用多层图划分算法划分图。③repeat:合并关于相对互连性和相对接近性而言,最好地保持簇的自相似性的簇。④until:不再有可以合并的簇。( C )。

    A、MST

    B、OPOSSUM

    C、Chameleon

    D、Jarvis-Patrick(JP)


    74. 考虑这么一种情况:一个对象碰巧与另一个对象相对接近,但属于不同的类,因为这两个对象一般不会共享许多近邻,所以应该选择( D )的相似度计算方法。

    A、平方欧几里德距离

    B、余弦距离

    C、直接相似度

    D、共享最近邻


    75. 以下属于可伸缩聚类算法的是( A )。

    A、CURE

    B、DENCLUE

    C、CLIQUE

    D、OPOSSUM


    76. 以下哪个聚类算法不是属于基于原型的聚类( D )。

    A、模糊 c 均值

    B、EM 算法

    C、SOM

    D、CLIQUE


    77. 关于混合模型聚类算法的优缺点,下面说法正确的是( B )。

    A、当簇只包含少量数据点,或者数据点近似协线性时,混合模型也能很好地处理。

    B、混合模型比 K 均值或模糊 c 均值更一般,因为它可以使用各种类型的分布。

    C、混合模型很难发现不同大小和椭球形状的簇。

    D、混合模型在有噪声和离群点时不会存在问题。


    78. 以下哪个聚类算法不属于基于网格的聚类算法( D )。

    A、STING

    B、WaveCluster

    C、MAFIA

    D、BIRCH


    79. 一个对象的离群点得分是该对象周围密度的逆。这是基于( C )的离群点定义。

    A.概率

    B、邻近度

    C、密度

    D、聚类


    80. 下面关于 Jarvis-Patrick(JP)聚类算法的说法不正确的是( D )。

    A、JP 聚类擅长处理噪声和离群点,并且能够处理不同大小、形状和密度的簇。

    B、JP 算法对高维数据效果良好,尤其擅长发现强相关对象的紧致簇。

    C、JP 聚类是基于 SNN 相似度的概念。

    D、JP 聚类的基本时间复杂度为 O(m)。

     

    多选题

    1. 通过数据挖掘过程所推倒出的关系和摘要经常被称为:(A B)

    A. 模型

    B. 模式

    C. 模范

    D. 模具


    2 寻找数据集中的关系是为了寻找精确、方便并且有价值地总结了数据的某一特征的表示,这个过程包括了以下哪些步骤? (A B C D)

    A. 决定要使用的表示的特征和结构

    B. 决定如何量化和比较不同表示拟合数据的好坏

    C. 选择一个算法过程使评分函数最优

    D. 决定用什么样的数据管理原则以高效地实现算法。


    3. 数据挖掘的预测建模任务主要包括哪几大类问题? (A B)

    A. 分类

    B. 回归

    C. 模式发现

    D. 模式匹配


    4. 数据挖掘算法的组件包括:(A B C D)

    A. 模型或模型结构

    B. 评分函数

    C. 优化和搜索方法

    D. 数据管理策略


    5. 以下哪些学科和数据挖掘有密切联系?(A D)

    A. 统计

    B. 计算机组成原理

    C. 矿产挖掘

    D. 人工智能


    6. 在现实世界的数据中,元组在某些属性上缺少值是常有的。描述处理该问题的各种方法有: (ABCDE)

    A 忽略元组

    B 使用属性的平均值填充空缺值

    C 使用一个全局常量填充空缺值

    D 使用与给定元组属同一类的所有样本的平均值

    E 使用最可能的值填充空缺值


    7. 下面哪些属于可视化高维数据技术 (ABCE)

    A 矩阵

    B 平行坐标系

    C 星形坐标

    D 散布图

    E Chernoff 脸


    8. 对于数据挖掘中的原始数据,存在的问题有: (ABCDE)

    A 不一致

    B 重复

    C 不完整

    D 含噪声

    E 维度高


    9. 下列属于不同的有序数据的有:(ABCE)

    A 时序数据

    B 序列数据

    C 时间序列数据

    D 事务数据

    E 空间数据


    10. 下面属于数据集的一般特性的有:(B C D)

    A 连续性

    B 维度

    C 稀疏性

    D 分辨率

    E 相异性


    11. 下面属于维归约常用的线性代数技术的有: (A C)

    A 主成分分析

    B 特征提取

    C 奇异值分解

    D 特征加权

    E 离散化


    12. 下面列出的条目中,哪些是数据仓库的基本特征: (ACD)

    A. 数据仓库是面向主题的

    B. 数据仓库的数据是集成的

    C. 数据仓库的数据是相对稳定的

    D. 数据仓库的数据是反映历史变化的

    E. 数据仓库是面向事务的


    13. 以下各项均是针对数据仓库的不同说法,你认为正确的有(BCDE )。

    A.数据仓库就是数据库

    B.数据仓库是一切商业智能系统的基础

    C.数据仓库是面向业务的,支持联机事务处理(OLTP)

    D.数据仓库支持决策而非事务处理

    E.数据仓库的主要目标就是帮助分析,做长期性的战略制定


    14. 数据仓库在技术上的工作过程是: (ABCD)

    A. 数据的抽取

    B. 存储和管理

    C. 数据的表现

    D. 数据仓库设计

    E. 数据的表现


    15. 联机分析处理包括以下哪些基本分析功能? (BCD)

    A. 聚类

    B. 切片

    C. 转轴

    D. 切块

    E. 分类


    16. 利用 Apriori 算法计算频繁项集可以有效降低计算频繁集的时间复杂度。在以下的购物篮中产生支持度不小于 3 的候选 3 - 项集,在候选 2 - 项集中需要剪枝的是(BD)

    ID 项集

    1 面包、牛奶

    2 面包、尿布、啤酒、鸡蛋

    3 牛奶、尿布、啤酒、可乐

    4 面包、牛奶、尿布、啤酒

    5 面包、牛奶、尿布、可乐

    A、啤酒、尿布

    B、啤酒、面包

    C、面包、尿布

    D、啤酒、牛奶


    17. 下表是一个购物篮,假定支持度阈值为 40%,其中(A D)是频繁闭项集。

    TID 项

    1 abc

    2 abcd

    3 bce

    4 acde

    5 de

    A、abc

    B、ad

    C、cd

    D、de


    18. Apriori 算法的计算复杂度受(ABCD)影响。

    A、支持度阀值

    B、项数(维度)

    C、事务数

    D、事务平均宽度


    19. 非频繁模式__(AD)__

    A、其支持度小于阈值

    B、都是不让人感兴趣的

    C、包含负模式和负相关模式

    D、对异常数据项敏感


    20. 以下属于分类器评价或比较尺度的有: (ACD)

    A, 预测准确度

    B, 召回率

    C, 模型描述的简洁度

    D, 计算复杂度


    21. 在评价不平衡类问题分类的度量方法有如下几种,(ABCD)

    A. F1 度量

    B. 召回率(recall)

    C. 精度(precision)

    D. 真正率(ture positive rate,TPR)


    22. 贝叶斯信念网络 (BBN) 有如下哪些特点, (AB)

    A, 构造网络费时费力

    B, 对模型的过分问题非常鲁棒

    C, 贝叶斯网络不适合处理不完整的数据

    D, 网络结构确定后,添加变量相当麻烦


    23. 如下哪些不是最近邻分类器的特点, (C)

    A, 它使用具体的训练实例进行预测,不必维护源自数据的模型

    B, 分类一个测试样例开销很大

    C, 最近邻分类器基于全局信息进行预测

    D, 可以生产任意形状的决策边界


    24. 如下那些不是基于规则分类器的特点,(AC)

    A, 规则集的表达能力远不如决策树好

    B, 基于规则的分类器都对属性空间进行直线划分,并将类指派到每个划分

    C, 无法被用来产生更易于解释的描述性模型

    D, 非常适合处理类分布不平衡的数据集


    25. 以下属于聚类算法的是( ABD )。

    A、K 均值

    B、DBSCAN

    C、Apriori

    D、Jarvis-Patrick(JP)


    26.( CD )都属于簇有效性的监督度量。

    A、轮廓系数

    B、共性分类相关系数

    C、熵

    D、F 度量


    27. 簇有效性的面向相似性的度量包括( BC )。

    A、精度

    B、Rand 统计量

    C、Jaccard 系数

    D、召回率


    28.( ABCD )这些数据特性都是对聚类分析具有很强影响的。

    A、高维性

    B、规模

    C、稀疏性

    D、噪声和离群点


    29. 在聚类分析当中,( AD )等技术可以处理任意形状的簇。

    A、MIN(单链)

    B、MAX(全链)

    C、组平均

    D、Chameleon


    30. ( AB )都属于分裂的层次聚类算法。

    A、二分 K 均值

    B、MST

    C、Chameleon

    D、组平均

     

    判断题

    1. 数据挖掘的主要任务是从数据中发现潜在的规则,从而能更好的完成描述数据、预测数据等任务。 (对)

    2. 数据挖掘的目标不在于数据采集策略,而在于对于已经存在的数据进行模式的发掘。(对)3. 图挖掘技术在社会网络分析中扮演了重要的角色。(对)

    4. 模式为对数据集的全局性总结,它对整个测量空间的每一点做出描述;模型则对变量变化空间的一个有限区域做出描述。(错)

    5. 寻找模式和规则主要是对数据进行干扰,使其符合某种规则以及模式。(错)

    6. 离群点可以是合法的数据对象或者值。    (对)

    7. 离散属性总是具有有限个值。        (错)

    8. 噪声和伪像是数据错误这一相同表述的两种叫法。     (错)

    9. 用于分类的离散化方法之间的根本区别在于是否使用类信息。   (对)

    10. 特征提取技术并不依赖于特定的领域。      (错)

    11. 序列数据没有时间戳。      (对)

    12. 定量属性可以是整数值或者是连续值。     (对)

    13. 可视化技术对于分析的数据类型通常不是专用性的。    (错)

    14. DSS 主要是基于数据仓库. 联机数据分析和数据挖掘技术的应用。(对)

    15. OLAP 技术侧重于把数据库中的数据进行分析、转换成辅助决策信息,是继数据库技术发展之后迅猛发展起来的一种新技术。 (对)

    16. 商业智能系统与一般交易系统之间在系统设计上的主要区别在于:后者把结构强加于商务之上,一旦系统设计完毕,其程序和规则不会轻易改变;而前者则是一个学习型系统,能自动适应商务不断变化的要求。 (对)

    17. 数据仓库中间层 OLAP 服务器只能采用关系型 OLAP (错)

    18.数据仓库系统的组成部分包括数据仓库,仓库管理,数据抽取,分析工具等四个部分. (错)

    19. Web 数据挖掘是通过数据库仲的一些属性来预测另一个属性, 它在验证用户提出的假设过程中提取信息. (错)

    21. 关联规则挖掘过程是发现满足最小支持度的所有项集代表的规则。(错)

    22. 利用先验原理可以帮助减少频繁项集产生时需要探查的候选项个数(对)。

    23. 先验原理可以表述为:如果一个项集是频繁的,那包含它的所有项集也是频繁的。(错)

    24. 如果规则 不满足置信度阈值,则形如 的规则一定也不满足置信度阈值,其中 是 X 的子集。(对)

    25. 具有较高的支持度的项集具有较高的置信度。(错)

    26. 聚类(clustering)是这样的过程:它找出描述并区分数据类或概念的模型 (或函数),以便能够使用模型预测类标记未知的对象类。 (错)

    27. 分类和回归都可用于预测,分类的输出是离散的类别值,而回归的输出是连续数值。(对)

    28. 对于 SVM 分类算法,待分样本集中的大部分样本不是支持向量,移去或者减少这些样本对分类结果没有影响。 (对)

    29. Bayes 法是一种在已知后验概率与类条件概率的情况下的模式分类方法,待分样本的分类结果取决于各类域中样本的全体。 (错)

    30. 分类模型的误差大致分为两种:训练误差(training error)和泛化误差(generalization error). (对)

    31. 在决策树中,随着树中结点数变得太大,即使模型的训练误差还在继续减低,但是检验误差开始增大,这是出现了模型拟合不足的问题。 (错)

    32. SVM 是这样一个分类器,他寻找具有最小边缘的超平面,因此它也经常被称为最小边缘分类器(minimal margin classifier) (错)

    33. 在聚类分析当中,簇内的相似性越大,簇间的差别越大,聚类的效果就越差。(错)

    34. 聚类分析可以看作是一种非监督的分类。(对)

    35. K 均值是一种产生划分聚类的基于密度的聚类算法,簇的个数由算法自动地确定。(错)

    36. 给定由两次运行 K 均值产生的两个不同的簇集,误差的平方和最大的那个应该被视为较优。(错)

    37. 基于邻近度的离群点检测方法不能处理具有不同密度区域的数据集。(对)

    38. 如果一个对象不强属于任何簇,那么该对象是基于聚类的离群点。(对)

    39. 从点作为个体簇开始,每一步合并两个最接近的簇,这是一种分裂的层次聚类方法。(错)40. DBSCAN 是相对抗噪声的,并且能够处理任意形状和大小的簇。(对)

    展开全文
  • 一、可视化方法条形图饼图线图(型图)气泡图直方图核密度估计(KDE)图线面图网络图散点图树状图小提琴图方形图三维图二、交互式工具Ipython、Ipython notebookPlotly三、Python IDE类型PyCharm,指定了基于Java ...

    一、可视化方法

    条形图

    饼图

    箱线图(箱型图)

    气泡图

    直方图

    核密度估计(KDE)图

    线面图

    网络图

    散点图

    树状图

    小提琴图

    方形图

    三维图

    二、交互式工具

    Ipython、Ipython notebook

    Plotly

    三、Python IDE类型

    PyCharm,指定了基于Java Swing的用户界面

    PyDev,基于SWT的用户界面(适用Eclipse)

    IEP(Interactive Editor for Pyhton),交互式编辑器

    Enthought中的Canopy:以PyQt为基础

    Continuum Analytics中Spyder的Anaconda发行版:以PyQt为基础

    四、交互式可视化软件包

    D3.js

    Bokeh

    VisPy

    Wakari

    Ashiba

    五、统计与数据挖掘算法

    1)分类问题

    logistic回归

    决策树:ID3、C4.5、CART---分类

    SVM支持向量机---监督学习、统计分类、回归分析

    boosting方法:AdaBoost

    KNN(K-邻近算法)

    贝叶斯分类器、朴素贝叶斯

    自举汇聚法(bootstrap aggregating)(bagging方法)

    随机森林

    2)其他问题

    HMM-隐马尔可夫模型

    Viterbi-维特比算法

    k-means(K-均值)---聚类算法

    主成分分析(PCA)

    最大期望(EM)算法

    PageRank

    LDA主题模型

    六、深度学习

    CNN卷积神经网络

    RNN循环神经网络

    七、图模型/网络模型展示

    igraph

    NetworkX

    Graph-tool

    Bio---生物信息学

    展开全文
  • 天津大学《数据分析与数据挖掘》公开课–学习笔记 1.1 数据分析与数据挖掘 数据分析是指采用适当的统计分析方法对收集到的数据进行分析、概括和总结,对数据进行恰当的描述,提取出有用的信息的过程。对决策进行辅助...

    天津大学《数据分析与数据挖掘》公开课--学习笔记

    网址:《数据分析与数据挖掘》–天津大学公开课
    链接: https://b23.tv/PJkU28

    1.1 数据分析与数据挖掘

    数据分析是指采用适当的统计分析方法对收集到的数据进行分析、概括和总结,对数据进行恰当的描述,提取出有用的信息的过程。对决策进行辅助,提供数据的根据,利用表格和列表进行展示。
    数据挖掘是指在大量的数据中进行挖掘知识。

    1.1.3 知识发现(KDD)的过程

    在这里插入图片描述

    1.1.4 区别

    在这里插入图片描述

    1.1.5 联系

    在这里插入图片描述

    1.2 分析和挖掘的数据类型

    1.2.1 数据库数据

    关系数据库
    SQL
    数据库 比较流行的有:MySQL, Oracle, SqlServer

    1.2.2 数据仓库数据

    数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。
    数据仓库 比较流行的有:AWS Redshift, Greenplum, Hive等

    1.2.3 事务数据

    数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
    一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:

    为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
    当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
    当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。

    但在现实情况下,失败的风险很高。在一个数据库事务的执行过程中,有可能会遇上事务操作失败、数据库系统/操作系统失败,甚至是存储介质失败等情况。这便需要DBMS对一个执行失败的事务执行恢复操作,将其数据库状态恢复到一致状态(数据的一致性得到保证的状态)。为了实现将数据库状态恢复到一致状态的功能,DBMS通常需要维护事务日志以追踪事务中所有影响数据库数据的操作。

    1.2.4 数据矩阵

    1.2.5 图和网状结构数据

    例如社交数据,电商数据,搜索引擎
    网页排名算法PageRank

    1.3 数据分析与数据挖掘方法

    1.3.1 频繁模式

    关联与相关性
    信用卡分析、购物车分析

    1.3.2 分类与回归

    1.3.3 聚类分析

    聚类:

    1.3.4 离群点分析

    离群点:
    信用卡异常消费

    1.4 数据分析与数据挖掘使用技术

    在这里插入图片描述

    1.4.1 统计学方法

    1.4.2 机器学习

    监督学习
    无监督学习
    半监督学习

    1.4.3 数据库与数据仓库

    1.5 应用场景及存在的问题

    商务智能、信息识别、搜索引擎

    2.1 数据的属性

    2.1.1 数据对象

    2.1.2 属性

    在这里插入图片描述

    2.1.3 属性类型

    2.2 数据的基本统计描述

    在这里插入图片描述

    2.2.1 中心趋势度量

    截尾均指:
    加权算数平均数:

    2.2.2 数据的分散度量

    极差:
    方差:

    2.2.3 数据的图形显示

    1、箱图
    用来描述最大值、最小值、下四位数、中位数和上四位数的五数概括

    2.饼图

    3、频率直方图

    4、散点图

    2.3 数据的相似性和相异性

    2.3.1 数据矩阵和相异矩阵

    近邻性度量

    2.3.2 数值属性的相异性

    1、欧几里得距离
    2、曼哈顿距离

    2.3.3 序数属性的近邻性度量

    2.3.4 余弦相似性

    余弦相似度

    3.1 数据存在的问题

    数据不一致
    数据缺失
    噪声数据
    缺失值

    3.2 数据清理

    3.2.1 空缺值处理

    3.2.2 噪声处理

    3.3 数据集成

    1、实体识别问题
    2、冗余问题
    数值数据:相关系数及协方差
    相关性分析
    卡方检验

    3.4 数据规约

    数据标准化
    数据立方体

    3.5 数据变换与数据离散化

    数据变换:将数据变换成适合数据挖掘的形式

    3.5.1 数据泛化

    3.5.2 数据规范化

    3.5.3 数据变换:属性构造

    3.5.4 离散化

    分箱法

    4.1 数据仓库的基本概念

    4.1.1 数据仓库定义和特征

    定义:数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

    特征:集成的、时变性、非易失的、

    4.1.2 数据仓库体系结构

    在这里插入图片描述

    4.1.3 数据模型

    4.1.4 粒度

    4.2 数据仓库设计

    面向主题的、集成的、不可更新的
    自顶向下,逐步细化

    4.2.1 概念模型设计

    多维数据模型、
    星型模型
    雪花模型
    在这里插入图片描述

    事实星座模型

    4.2.2 逻辑模型设计

    核心基础
    在这里插入图片描述

    4.3 数据仓库实现

    SQL实现工具
    实例

    4.4 联机分析处理

    4.4.1 OLAP简介

    联机分析处理(OLAP)系统是数据仓库系统最主要的应用,专门设计用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持,可以根据分析人员的要求快速、灵活地进行大数据量的复杂查询处理,并且以一种直观而易懂的形式将查询结果提供给决策人员,以便他们准确掌握企业(公司)的经营状况,了解对象的需求,制定正确的方案。

    数据层。实现对企业操作数据的抽取、转换、清洗和汇总,形成信息数据,并存储在企业级的中心信息数据库中。

    应用层。通过联机分析处理,甚至是数据挖掘等应用处理,实现对信息数据的分析。

    表现层。通过前台分析工具,将查询报表、统计分析、多维联机分析和数据发掘的结论展现在用户面前。
    ROLAP、MOLAP、HOLAP

    4.4.2 OLAP与OLTP区别

    OLTP与OLAP的介绍

    数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 
    

    OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
    OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。
    在这里插入图片描述

    4.4.3 典型OLAP操作

    切片
    切块
    上卷
    下钻
    旋转

    4.5 元数据模型

    4.5.1 元数据内容

    元数据库

    4.5.2 元数据类型

    静态元数据
    动态元数据

    4.5.3 元数据的作用

    元数据
    在这里插入图片描述

    5.1 回归分析

    回归分析:

    一元线性回归

    多元线性回归

    多项式回归

    5.1.1 回归分析的步骤

    在这里插入图片描述

    5.2 一元线性回归

    5.2.1 回归方程

    在这里插入图片描述

    5.2.2 求解及模型检验

    最小二乘法
    拟合优度检验
    显著性检验

    5.3 多元线性回归

    5.3.1 回归方程

    方程
    在这里插入图片描述

    5.4 多项式回归

    5.4.1 回归方程

    方程
    在这里插入图片描述

    5.4.2 最小二乘法

    5.4.3 拟合优度检验

    5.4.4 显著性检验

    6.1 频繁模式概述

    6.1.1 相关概念

    购物车分析、牛奶面包组合
    频繁相集

    6.1.2 关联规则

    关联规则公式
    最小支持度
    置信度
    最小置信度
    强关联规则

    6.1.3 先验原理

    6.2 Apriori算法

    6.2.1 关联规则挖掘的方法

    穷举法

    6.2.2 Apriori算法

    Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策。比如在常见的超市购物数据集,或者电商的网购数据集中,如果我们找到了频繁出现的数据集,那么对于超市,我们可以优化产品的位置摆放,对于电商,我们可以优化商品所在的仓库位置,达到节约成本,增加经济效益的目的。
    在这里插入图片描述
    第一步:连接
    第二步:剪枝
    第三步:计算支持度
    本文基于该样例的数据编写Python代码实现Apriori算法。代码需要注意如下两点:
    由于Apriori算法假定项集中的项是按字典序排序的,而集合本身是无序的,所以我们在必要时需要进行set和list的转换;
    由于要使用字典(support_data)记录项集的支持度,需要用项集作为key,而可变集合无法作为字典的key,因此在合适时机应将项集转为固定集合frozenset。

    // An highlighted block
    """
    # Python 2.7
    # Filename: apriori.py
    # Author: llhthinker
    # Email: hangliu56[AT]gmail[DOT]com
    # Blog: http://www.cnblogs.com/llhthinker/p/6719779.html
    # Date: 2017-04-16
    """
    
    
    def load_data_set():
        """
        Load a sample data set (From Data Mining: Concepts and Techniques, 3th Edition)
        Returns: 
            A data set: A list of transactions. Each transaction contains several items.
        """
        data_set = [['l1', 'l2', 'l5'], ['l2', 'l4'], ['l2', 'l3'],
                ['l1', 'l2', 'l4'], ['l1', 'l3'], ['l2', 'l3'],
                ['l1', 'l3'], ['l1', 'l2', 'l3', 'l5'], ['l1', 'l2', 'l3']]
        return data_set
    
    
    def create_C1(data_set):
        """
        Create frequent candidate 1-itemset C1 by scaning data set.
        Args:
            data_set: A list of transactions. Each transaction contains several items.
        Returns:
            C1: A set which contains all frequent candidate 1-itemsets
        """
        C1 = set()
        for t in data_set:
            for item in t:
                item_set = frozenset([item])
                C1.add(item_set)
        return C1
    
    
    def is_apriori(Ck_item, Lksub1):
        """
        Judge whether a frequent candidate k-itemset satisfy Apriori property.
        Args:
            Ck_item: a frequent candidate k-itemset in Ck which contains all frequent
                     candidate k-itemsets.
            Lksub1: Lk-1, a set which contains all frequent candidate (k-1)-itemsets.
        Returns:
            True: satisfying Apriori property.
            False: Not satisfying Apriori property.
        """
        for item in Ck_item:
            sub_Ck = Ck_item - frozenset([item])
            if sub_Ck not in Lksub1:
                return False
        return True
    
    
    def create_Ck(Lksub1, k):
        """
        Create Ck, a set which contains all all frequent candidate k-itemsets
        by Lk-1's own connection operation.
        Args:
            Lksub1: Lk-1, a set which contains all frequent candidate (k-1)-itemsets.
            k: the item number of a frequent itemset.
        Return:
            Ck: a set which contains all all frequent candidate k-itemsets.
        """
        Ck = set()
        len_Lksub1 = len(Lksub1)
        list_Lksub1 = list(Lksub1)
        for i in range(len_Lksub1):
            for j in range(1, len_Lksub1):
                l1 = list(list_Lksub1[i])
                l2 = list(list_Lksub1[j])
                l1.sort()
                l2.sort()
                if l1[0:k-2] == l2[0:k-2]:
                    Ck_item = list_Lksub1[i] | list_Lksub1[j]
                    # pruning
                    if is_apriori(Ck_item, Lksub1):
                        Ck.add(Ck_item)
        return Ck
    
    
    def generate_Lk_by_Ck(data_set, Ck, min_support, support_data):
        """
        Generate Lk by executing a delete policy from Ck.
        Args:
            data_set: A list of transactions. Each transaction contains several items.
            Ck: A set which contains all all frequent candidate k-itemsets.
            min_support: The minimum support.
            support_data: A dictionary. The key is frequent itemset and the value is support.
        Returns:
            Lk: A set which contains all all frequent k-itemsets.
        """
        Lk = set()
        item_count = {}
        for t in data_set:
            for item in Ck:
                if item.issubset(t):
                    if item not in item_count:
                        item_count[item] = 1
                    else:
                        item_count[item] += 1
        t_num = float(len(data_set))
        for item in item_count:
            if (item_count[item] / t_num) >= min_support:
                Lk.add(item)
                support_data[item] = item_count[item] / t_num
        return Lk
    
    
    def generate_L(data_set, k, min_support):
        """
        Generate all frequent itemsets.
        Args:
            data_set: A list of transactions. Each transaction contains several items.
            k: Maximum number of items for all frequent itemsets.
            min_support: The minimum support.
        Returns:
            L: The list of Lk.
            support_data: A dictionary. The key is frequent itemset and the value is support.
        """
        support_data = {}
        C1 = create_C1(data_set)
        L1 = generate_Lk_by_Ck(data_set, C1, min_support, support_data)
        Lksub1 = L1.copy()
        L = []
        L.append(Lksub1)
        for i in range(2, k+1):
            Ci = create_Ck(Lksub1, i)
            Li = generate_Lk_by_Ck(data_set, Ci, min_support, support_data)
            Lksub1 = Li.copy()
            L.append(Lksub1)
        return L, support_data
    
    
    def generate_big_rules(L, support_data, min_conf):
        """
        Generate big rules from frequent itemsets.
        Args:
            L: The list of Lk.
            support_data: A dictionary. The key is frequent itemset and the value is support.
            min_conf: Minimal confidence.
        Returns:
            big_rule_list: A list which contains all big rules. Each big rule is represented
                           as a 3-tuple.
        """
        big_rule_list = []
        sub_set_list = []
        for i in range(0, len(L)):
            for freq_set in L[i]:
                for sub_set in sub_set_list:
                    if sub_set.issubset(freq_set):
                        conf = support_data[freq_set] / support_data[freq_set - sub_set]
                        big_rule = (freq_set - sub_set, sub_set, conf)
                        if conf >= min_conf and big_rule not in big_rule_list:
                            # print freq_set-sub_set, " => ", sub_set, "conf: ", conf
                            big_rule_list.append(big_rule)
                sub_set_list.append(freq_set)
        return big_rule_list
    
    
    if __name__ == "__main__":
        """
        Test
        """
        data_set = load_data_set()
        L, support_data = generate_L(data_set, k=3, min_support=0.2)
        big_rules_list = generate_big_rules(L, support_data, min_conf=0.7)
        for Lk in L:
            print "="*50
            print "frequent " + str(len(list(Lk)[0])) + "-itemsets\t\tsupport"
            print "="*50
            for freq_set in Lk:
                print freq_set, support_data[freq_set]
        print
        print "Big Rules"
        for item in big_rules_list:
            print item[0], "=>", item[1], "conf: ", item[2]
    

    6.3 FP-growth算法

    FP-growth(Frequent Pattern Tree, 频繁模式树),是韩家炜老师提出的挖掘频繁项集的方法,是将数据集存储在一个特定的称作FP树的结构之后发现频繁项集或频繁项对,即常在一块出现的元素项的集合FP树。
    FP-growth算法比Apriori算法效率更高,在整个算法执行过程中,只需遍历数据集2次,就能够完成频繁模式发现,其发现频繁项集的基本过程如下:
    (1)构建FP树
    (2)从FP树中挖掘频繁项集

    6.3.1 FP-growth算法步骤

    在这里插入图片描述
    FP-growth的一般流程如下:
    1:先扫描一遍数据集,得到频繁项为1的项目集,定义最小支持度(项目出现最少次数),删除那些小于最小支持度的项目,然后将原始数据集中的条目按项目集中降序进行排列。
    2:第二次扫描,创建项头表(从上往下降序),以及FP树。
    3:对于每个项目(可以按照从下往上的顺序)找到其条件模式基(CPB,conditional patten base),递归调用树结构,删除小于最小支持度的项。如果最终呈现单一路径的树结构,则直接列举所有组合;非单一路径的则继续调用树结构,直到形成单一路径即可。

    6.3.2 FP-growth算法代码

    1. FP树的类定义
    // An highlighted block
    class treeNode:
        def __init__(self, nameValue, numOccur, parentNode):
            self.name = nameValue #节点名字
            self.count = numOccur #节点计数值
            self.nodeLink = None #用于链接相似的元素项
            self.parent = parentNode      #needs to be updated
            self.children = {} #子节点
    
        def inc(self, numOccur):
            '''
            对count变量增加给定值
            '''
            self.count += numOccur
    
        def disp(self, ind=1):
            '''
            将树以文本形式展示
            '''
            print ('  '*ind, self.name, ' ', self.count)
            for child in self.children.values():
                child.disp(ind+1)
    

    2、FP树构建函数

    // An highlighted block
    def createTree(dataSet, minSup=1):
        '''
        创建FP'''
        headerTable = {}
        #第一次扫描数据集
        for trans in dataSet:#计算item出现频数
            for item in trans:
                headerTable[item] = headerTable.get(item, 0) + dataSet[trans]
        headerTable = {k:v for k,v in headerTable.items() if v >= minSup}
        freqItemSet = set(headerTable.keys())
        #print ('freqItemSet: ',freqItemSet)
        if len(freqItemSet) == 0: return None, None  #如果没有元素项满足要求,则退出
        for k in headerTable:
            headerTable[k] = [headerTable[k], None] #初始化headerTable
        #print ('headerTable: ',headerTable)
        #第二次扫描数据集
        retTree = treeNode('Null Set', 1, None) #创建树
        for tranSet, count in dataSet.items():  
            localD = {}
            for item in tranSet:  #put transaction items in order
                if item in freqItemSet:
                    localD[item] = headerTable[item][0]
            if len(localD) > 0:
                orderedItems = [v[0] for v in sorted(localD.items(), key=lambda p: p[1], reverse=True)]
                updateTree(orderedItems, retTree, headerTable, count)#将排序后的item集合填充的树中
        return retTree, headerTable #返回树型结构和头指针表
    
    def updateTree(items, inTree, headerTable, count):
        if items[0] in inTree.children:#检查第一个元素项是否作为子节点存在
            inTree.children[items[0]].inc(count) #存在,更新计数
        else:   #不存在,创建一个新的treeNode,将其作为一个新的子节点加入其中
            inTree.children[items[0]] = treeNode(items[0], count, inTree)
            if headerTable[items[0]][1] == None: #更新头指针表
                headerTable[items[0]][1] = inTree.children[items[0]]
            else:
                updateHeader(headerTable[items[0]][1], inTree.children[items[0]])
        if len(items) > 1:#不断迭代调用自身,每次调用都会删掉列表中的第一个元素
            updateTree(items[1::], inTree.children[items[0]], headerTable, count)
    
    def updateHeader(nodeToTest, targetNode):
        '''
        this version does not use recursion
        Do not use recursion to traverse a linked list!
        更新头指针表,确保节点链接指向树中该元素项的每一个实例
        '''
        while (nodeToTest.nodeLink != None):    
            nodeToTest = nodeToTest.nodeLink
        nodeToTest.nodeLink = targetNode
    

    3、抽取条件模式基

    // An highlighted block
    def ascendTree(leafNode, prefixPath): #迭代上溯整棵树
        if leafNode.parent != None:
            prefixPath.append(leafNode.name)
            ascendTree(leafNode.parent, prefixPath)
    
    def findPrefixPath(basePat, treeNode): #treeNode comes from header table
        condPats = {}
        while treeNode != None:
            prefixPath = []
            ascendTree(treeNode, prefixPath)
            if len(prefixPath) > 1: 
                condPats[frozenset(prefixPath[1:])] = treeNode.count
            treeNode = treeNode.nodeLink
        return condPats
    

    4、递归查找频繁项集

    // An highlighted block
    def mineTree(inTree, headerTable, minSup, preFix, freqItemList):
        bigL = [v[0] for v in sorted(headerTable.items(), key=lambda p: p[1][0])]# 1.排序头指针表
        for basePat in bigL:  #从头指针表的底端开始
            newFreqSet = preFix.copy()
            newFreqSet.add(basePat)
            print ('finalFrequent Item: ',newFreqSet)    #添加的频繁项列表
            freqItemList.append(newFreqSet)
            condPattBases = findPrefixPath(basePat, headerTable[basePat][1])
            print ('condPattBases :',basePat, condPattBases)
            # 2.从条件模式基创建条件FP树
            myCondTree, myHead = createTree(condPattBases, minSup)
    #         print ('head from conditional tree: ', myHead)
            if myHead != None: # 3.挖掘条件FPprint ('conditional tree for: ',newFreqSet)
                myCondTree.disp(1)            
                mineTree(myCondTree, myHead, minSup, newFreqSet, freqItemList)
    

    链接: https://blog.csdn.net/baixiangxue/article/details/80335469

    6.4 压缩频繁项集

    6.4.1 挖掘闭模式

    6.4.2 枝剪的策略

    6.5 关联模式评估

    6.5.1 支持度与置信度框架

    6.5.2 相关性分析

    1、提升度
    2、杠杆度
    3、皮尔森相关系数
    4、IS度量
    5、确信度

    6.5.3 模式评估度量

    1、全置信度
    2、极大置信度
    3、Kulczynski度量

    7.1 分类概述

    分类:

    分类与预测:

    7.2 决策树

    决策树是一种常见的机器学习算法,它的思想十分朴素,类似于我们平时利用选择做决策的过程。 父节点和子节点是相对的,说白了子节点由父节点根据某一规则分裂而来,然后子节点作为新的父亲节点继续分裂,直至不能分裂为止。而根节点是没有父节点的节点,即初始分裂节点,叶子节点是没有子节点的节点,如下图所示:
    在这里插入图片描述
    链接: https://blog.csdn.net/jiaoyangwm/article/details/79525237

    7.2.1 决策树上

    结构
    显然,决策树在逻辑上以树的形式存在,包含根节点、内部结点和叶节点。

    • 根节点:包含数据集中的所有数据的集合
    • 内部节点:每个内部节点为一个判断条件,并且包含数据集中满足从根节点到该节点所有条件的数据的集合。根据内部结点的判断条件测试结果,内部节点对应的数据的集合别分到两个或多个子节点中。
    • 叶节点:叶节点为最终的类别,被包含在该叶节点的数据属于该类别。
      简而言之,决策树是一个利用树的模型进行决策的多分类模型,简单有效,易于理解。
      伪代码
      决策树算法的伪代码(参照了python语法)如下图所示:
    // An highlighted block
    # D = {(x1,y1)(x2,y2)......(xm,yn)} 是数据集
    # A = {a1、a2、a3.} 是划分节点的属性集
    # 节点node有两个主要属性:content代表该节点需要分类的训练集,type代表叶节点的决策类型
    def generateTree(D,A):
        newNode = 空 #生成新的节点
        # 如果当前数据集都为一个种类,则设为一个叶节点并返回
        if D 中数据皆属于类别 C:
            newNode.content = D
            newNode.type = C
            return  
        # 如果已经没有属性了或者数据集在剩余属性中表现相同(属性无法区分)
        if A = 空集 or D中数据在A中取值相同:
            newNode.content = D
            newNode.type = D中最多的类
            return
        #从A中选取最优的属性a
        a=selectBestPorperty(A)
        #为a的每一个取值生成一个节点,递归进行处理
        for a的每一个取值 res[i]:
            生成新的分支节点 node[i]
            D[i] = D中取值为res[i]的数据
            node[i].content = D[i]
            if node[i].content == null:
                node[i].type = D中最多的类
            else:
                generateTree(D[i],A - {a})
        return        
    

    7.2.2 决策树中

    ID3算法

    7.2.3 决策树下

    C4.5算法

    7.3 朴素贝叶斯分类

    贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

    链接: https://blog.csdn.net/weixin_43857827/article/details/103119020?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

    链接: https://blog.csdn.net/qq_17073497/article/details/81076250

    7.4 惰性学习法

    惰性学习方法也叫消极学习方法,这种学习方法在最开始的时候不会根据已有的样本创建目标函数,只是简单的把训练用的样本储存好,后期需要对新进入的样本进行判断的时候才开始分析新进入样本与已存在的训练样本之间的关系,并据此确定新实例(新进入样本)的目标函数值.

    7.4.1 惰性学习法的概念

    消极学习的典型算法KNN,KNN不会根据训练集主动学习或者拟合出一个函数来对新进入的样本进行判断,而是单纯的记住训练集中所有的样本,并没有像上边决策树那样先对训练集数据进行训练得出一套规则,所以它实际上没有所谓的"训练"过程,而是在需要进行预测的时候从自己的训练集样本中查找与新进入样本最相似的样本,即寻找最近邻来获得预测结果

    7.4.2 K近邻算法

    KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

    K近邻算法详解: https://blog.csdn.net/wangmumu321/article/details/78576916

    k-近邻算法梳理(从原理到示例): https://blog.csdn.net/kun_csdn/article/details/88919091

    7.5 神经网络

    深度学习500问: https://github.com/runningreader/DeepLearning-500-questions

    7.5.1 神经网络基本概念

    神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术。
      本文以一种简单的,循序的方式讲解神经网络。适合对神经网络了解不多的同学。本文对阅读没有一定的前提要求,但是懂一些机器学习基础会更好地帮助理解本文。
      神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。

    神经网络——最易懂最清晰的一篇文章: https://blog.csdn.net/illikang/article/details/82019945

    7.5.2 BP神经网络算法

    1、后向传播
    2、算法步骤

    神经网络之BP算法(图说神经网络+BP算法理论推导+例子运用+代码): https://blog.csdn.net/weixin_39441762/article/details/80446692.

    7.6 分类模型的评估

    评估分类是判断预测值时否很好的与实际标记值相匹配。正确的鉴别出正样本(True Positives)或者负样本(True Negatives)都是True。同理,错误的判断正样本(False Positive,即一类错误)或者负样本(False Negative,即二类错误)。
      注意:True和False是对于评价预测结果而言,也就是评价预测结果是正确的(True)还是错误的(False)。而Positive和Negative则是样本分类的标记。

    分类模型评估: https://www.jianshu.com/p/e8b688f796d8

    7.6.1 准确率

    在这里插入图片描述

    7.6.2 召回率

    在这里插入图片描述

    7.6.3 灵敏度、特效率

    在这里插入图片描述

    7.6.4 F值

    在这里插入图片描述

    7.6.5 交叉验证

    8.1 聚类概述

    1、聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术。

    在数据科学中,我们可以使用聚类分析从我们的数据中获得一些有价值的见解。

    2、聚类的目标
    使同一类对象的相似度尽可能地大;不同类对象之间的相似度尽可能地小。

    3、聚类和分类的区别
    聚类技术通常又被称为无监督学习,因为与监督学习不同,在聚类中那些表示数据类别的分类或者分组信息是没有的。
    Clustering (聚类),简单地说就是把相似的东西分到一组,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起。因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了,因此 clustering 通常并不需要使用训练数据进行学习,这在Machine Learning中被称作unsupervised learning (无监督学习)。
    Classification (分类),对于一个classifier,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做supervised learning (监督学习)。

    8.2 基于划分的聚类

    8.2.1 K均值算法

    在这里插入图片描述

    8.2.2 K-中心点(PAM)算法

    在这里插入图片描述

    8.3 基于层次的聚类

    层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法。

    在这里插入图片描述

    // An highlighted block
    import  numpy as np
    import matplotlib.pyplot as plt
    
    '''
    AGNES层次聚类,采用自底向上聚合策略的算法。先将数据集的每个样本看做一个初始的聚类簇,然后算法运行的每一步中找出距离最近的两个
    类簇进行合并,该过程不断重复,直至达到预设的聚类簇的个数。
    '''
    #计算两个向量之间的欧式距离
    def calDist(X1 , X2 ):
        sum = 0
        for x1 , x2 in zip(X1 , X2):
            sum += (x1 - x2) ** 2
        return sum ** 0.5
    def updateClusterDis(dataset,distance,sets,cluster_i):
        i=0
        while i<len(sets):
            dis = []
            for e in sets[i]:
                for ele in sets[cluster_i]:
                    dis.append(calDist(dataset[e],dataset[ele]))
            distance[i,cluster_i]=max(dis)
            distance[cluster_i,i]=max(dis)
            i+=1
        #将每个簇和自身距离设为无穷大
        distance[np.diag_indices_from(distance)] = float('inf')
        return distance
    def agens(dataset,k):
    #初始化聚类簇:让每一个点都代表,一个类簇
        sets=[]
        for i in range(0,len(dataset)):
            sets.append({i})
    #初始化类簇间距离的矩阵
        delta = np.array(dataset[0] - dataset)
        for e in dataset[1:, :]:
            delta = np.vstack((delta, (e - dataset)))
        distance = np.sqrt(np.sum(np.square(delta), axis=1))
        distance = np.reshape(distance, (len(dataset), len(dataset)))
        distance[np.diag_indices_from(distance)]=float('inf')
    ####################################################
        while len(sets)>k:
            locations=np.argwhere(distance==np.min(distance))
            #将集合合并,删除被合并的集合
            locations=locations[locations[:,0]<locations[:,1]]
            cluster_i=locations[0,0]
            cluster_j=locations[0,1]
            for e in sets[cluster_j]:
                sets[cluster_i].add(e)
            del sets[cluster_j]
            #删除被合并的簇,distance矩阵对应的行和列,并更新距离矩阵
            distance=np.delete(distance,cluster_j,axis=0)#删除对应列
            distance=np.delete(distance,cluster_j,axis=1)#删除对应行
            distance=updateClusterDis(dataset,distance,sets,cluster_i)
        print(sets)
        return sets
    
    

    8.4 基于网格的聚类

    将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。
    特点:处理速度很快,通常这是与目标数据库中记录的个数无关的,只与把数据空间分为多少个单元有关。
    算法:STING算法、CLIQUE算法、WAVE-CLUSTER算法
    1) STING:统计信息网格
      STING是一种基于网格的多分辨率的聚类技术,它将输入对象的空间区域划分成矩形单元,空间可以用分层和递归方法进行划分。这种多层矩形单元对应不同的分辨率,并且形成了一个层次结构:每个高层单元被划分成低一层的单元。关于每个网格单元的属性的统计信息(如均值,最大值和最小值)被作为统计参数预先计算和存储。对于查询处理和其他数据分析任务,这些统计参数是有效的。
      STING算法:
      (1) 针对不同的分辨率,通常有多个级别的矩形单元。
      (2) 这些单元形成了一个层次结构,高层的每个单元被划分成多个底一层的单元。
      (3) 关于每个网格单元属性的统计信息(例如平均值,max,min)被预先计算和存储,这些统计信息用于回答查询。(统计信息是进行查询使用的)
      网格中常用的参数:
      (1) count 网格中对象数目
      (2) mean网格中所有值的平均值
      (3) stdev网格中属性值的标准偏差
      (4) min 网格中属性值的最小值
      (5) max 网格中属性值的最大值
      (6) distribution 网格中属性值符合的分布类型。如正态分布,均匀分布
      STING聚类的层次结构:
      注意:当数据加载到数据库时。最底层的单元参数直接由数据计算,若分布类型知道,可以用户直接指定。而较高层的单元的分布类型可以基于它对应的低层单元多数的分布类型,用一个阈值过滤过程的合取来计算,若底层分布类型彼此不同,那么高层分布类型为none
      STING查询算法步骤:
      (1) 从一个层次开始
      (2) 对于这一个层次的每个单元格,我们计算查询相关的属性值。
      (3) 从计算的属性值以及约束条件下,我们将每一个单元格标记成相关或者不想关。(不相关的单元格不再考虑,下一个较低层的处理就只检查剩余的相关单元)
      (4) 如果这一层是底层,那么转(6),否则转(5)
      (5) 我们由层次结构转到下一层,依照步骤2进行
      (6) 查询结果得到满足,转到步骤8,否则(7)
      (7) 恢复数据到相关的单元格进一步处理以得到满意的结果,转到步骤(8)
      (8) 停止
      到这儿,STING算法应该基本就差不多了,其核心思想就是:根据属性的相关统计信息进行划分网格,而且网格是分层次的,下一层是上一层的继续划分。在一个网格内的数据点即为一个簇。
      同时,STING聚类算法有一个性质:如果粒度趋向于0(即朝向非常底层的数据),则聚类结果趋向于DBSCAN聚类结果。即使用计数count和大小信息,使用STING可以近似的识别稠密的簇。
      STING算法的优点:
     (1) 基于网格的计算是独立于查询的,因为存储在每个单元的统计信息提供了单元中数据汇总信息,不依赖于查询。
     (2) 网格结构有利于增量更新和并行处理。
     (3) 效率高。STING扫描数据库一次开计算单元的统计信息,因此产生聚类的时间复杂度为O(n),在层次结构建立之后,查询处理时间为)O(g),其中g为最底层网格单元的数目,通常远远小于n。
     缺点:
     (1) 由于STING采用了一种多分辨率的方法来进行聚类分析,因此STING的聚类质量取决于网格结构的最底层的粒度。如果最底层的粒度很细,则处理的代价会显著增加。然而如果粒度太粗,聚类质量难以得到保证。
     (2) STING在构建一个父亲单元时没有考虑到子女单元和其他相邻单元之间的联系。所有的簇边界不是水平的,就是竖直的,没有斜的分界线。降低了聚类质量。

    9.1 离群点定义和类型

    离群点:离群点是指一个时间序列中,远离序列的一般水平的极端大值和极端小值。
    链接: https://blog.csdn.net/qq_19446965/article/details/89395190.

    离群点是一个数据对象,它显著不同于其他数据对象,好像它是被不同的机制产生的一样。有时也称非离群点为“正常数据”,离群点为“异常数据”。

    离群点不同于噪声数据。噪声是被观测变量的随机误差或方差。一般而言,噪声在数据分析(包括离群点分析)中不是令人感兴趣的。如在信用卡欺诈检测,顾客的购买行为可以用一个随机变量建模。一位顾客可能会产生某些看上去像“随机误差”或“方差”的噪声交易,如买一份较丰盛的午餐,或比通常多要了一杯咖啡。这种交易不应该视为离群点,否则信用卡公司将因验证太多的交易而付出沉重代价。因此,与许多其他数据分析和数据挖掘任务一样,应该在离群点检测前就删除噪声。

    离群点检测是有趣的,因为怀疑产生它们的机制不同于产生其他数据的机制。因此,在离群点检测时,重要的是搞清楚为什么检测到的离群点被某种其他机制产生。通常,在其余数据上做各种假设,并且证明检测到的离群点显著违反了这些假设。

    9.2 离群点检测

    9.2.1 离群点的类型

    一般而言,离群点可以分成三类:全局离群点、情境(或条件)离群点和集体离群点。
    全局离群点
    在给定的数据集中,一个数据对象是全局离群点,如果它显著的偏离数据集中的其他对象。全局离群点是最简单的一类离群点,大部分的离群点检测方法都旨在找出全局离群点。
    情境离群点
    在给定的数据集中,一个数据对象是情境离群点,如果关于对象的特定情境,它显著的偏离其他对象。情境离群点又称为条件离群点,因为它们条件的依赖于选定的情境。一般地,在情境离群点检测中,所考虑数据对象的属性划分成两组:
    Ÿ 情境属性:数据对象的情境属性定义对象的情境。一般为静态属性变量,如信用卡欺诈检测中,不同年龄、不同地区的人消费情况是不同的,先按照静态属性将人群大致分类,再检测每一类的离群点,会得到更好的结果。
    Ÿ 行为属性:定义对象的特征,并用来评估对象关于它所处的情境是否为离群点。在上述例子中,行为属性可以是消费金额,消费频率等
    情境离群点分析为用户提供了灵活性,因为用户可以在不同情境下考察离群点,这在许多应用中都是非常期望的。
    集体离群点
    给定一个数据集,数据对象的一个子集形成集体离群点,如果这些对象作为整体显著的偏离整个数据集。如一家供应链公司,每天处理数以千计的订单和出货。如果一个订单的出货延误,则可能不是离群点,因为统计表明延误时常发生。然而,如果有一天有100个订单延误,则必须注意。这100个订单整体来看,形成一个离群点,尽管如果单个考虑,它们每个或许都不是离群点。你可能需要更详细地整个考察这些订单,搞清楚出货问题。
    与全局和情境离群点检测不同,在集体离群点检测中,不仅必须考虑个体对象的行为,而且还要考虑对象组群的行为。因此,为了检测集体离群点,需要关于对象之间联系的背景知识,如对象之间的距离或相似性测量方法。

    9.2.2 离群点检测方法

    统计学方法
    离群点检测的统计学方法对数据的正常性做假定。假定数据集中的正常对象由一个随机过程(生成模型)产生。因此,正常对象出现在该随机模型的高概率区域中,而低概率区域中的对象是离群点。
    离群点检测的统计学方法的一般思想是:学习一个拟合给定数据集的生成模型,然后识别该模型低概率区域中的对象,把它们作为离群点。有许多不同方法来学习生成模型,一般而言,根据如何指定和如何学习模型,离群点检测的统计学方法可以划分成两个主要类型:参数方法和非参数方法。
    参数方法假定正常的数据对象被一个以为参数的参数分布产生。该参数分布的概率密度函数给出对象被该分布产生的概率。该值越小,越可能是离群点。
    非参数方法并不假定先验统计模型,而是试图从输入数据确定模型。非参数方法的例子包括直方图和核密度估计。

    参数方法
    1、基于正态分布的一元离群点检测
    假定数据集由一个正态分布产生,然后,可以由输入数据学习正态分布的参数,并把低概率的点识别为离群点。
    在正态分布的假定下,区域包含99.7%的数据,包含95.4%的数据,包含68.3%的数据。视具体情况而定,将其区域外的数据视为离群点。
    这种直截了当的统计学离群点检测方法也可以用于可视化。例如盒图方法使用五数概况绘制一元输入数据:最小的非离群点值(Min)、第一个四分位数(Q1)、中位数(Q2)、第三个四分位数(Q3)和最大的非离群点值(Max)。
    四分位数极差(IQR)定义为Q3-Q1。比Q1小1.5倍的IQR或者比Q3大1.5倍的IQR的任何对象都视为离群点,因为Q1-1.5IQR和Q3+1.5IQR之间的区域包含了99.3%的对象。

    2、多元离群点检测

    (1)使用马哈拉诺比斯距离检测多元离群点。
    对于一个多元数据集,设为均值向量。对于数据集中的对象,从到的马哈拉诺比斯(Mahalanobis)距离为
    其中S是协方差矩阵。
    是一元数据,可以对它进行离群点检测。如果被确定为离群点,则也被视为离群点。
    (2)使用统计量的多元离群点检测。
    在正态分布的假设下,统计量可以用来捕获多元离群点。对于对象,统计量是
    其中,是在第维上的值,是所有对象在第维上的均值,而是维度。如果对象的统计量很大,则该对象是离群点。

    (3)使用混合参数分布
    在许多情况下,数据是由正态分布产生的假定很有效。然而,当实际数据很复杂时,这种假定过于简单。在这种情况下,假定数据是被混合参数分布产生的。
    混合参数分布中用期望最大化(EM)算法来估计参数。具体情况比较复杂,可以参考韩家炜的《数据挖掘:概念与技术》一书。

    非参数方法
    在离群点检测的非参数方法中,“正常数据”的模型从输入数据学习,而不是假定一个先验。通常,非参数方法对数据做较少假定,因而在更多情况下都可以使用。
    使用直方图检测离群点
    包括如下两步:

    步骤1:构造直方图。尽管非参数方法并不假定任何先验统计模型,但是通常确实要求用户提供参数,以便由数据学习。如指定直方图的类型(等宽或等深的)和其他参数(如直方图中的箱数或每个箱的大小)。与参数方法不同,这些参数并不指定数据分布的类型(如高斯分布)。

    步骤2:检测离群点。为了确定一个对象是否是离群点,可以对照直方图检验它。在最简单的方法中,如果该对象落入直方图的一个箱中,则该对象被看做是正常的,否则被认为是离群点。
    对于更复杂的方法,可以使用直方图赋予每个对象一个离群点得分。一般可以令对象的离群点得分为该对象落入的箱的容积的倒数。得分越高,表明是离群点的概率越大。

    使用直方图作为离群点检测的非参数模型的一个缺点是,很难选择一个合适的箱尺寸。一方面,如箱尺寸太小,则由很多正常对象都会落入空的或稀疏箱,因而被误识别为离群点。这将导致很高的假正例率或低精度。相反,如果箱尺寸太大,则离群点对象可能渗入某些频繁的箱中,这将导致很高的假负例率或召回率。为了解决这些问题,使用核密度估计来估计数据的概率密度分布。具体参考韩家炜的《数据挖掘:概念与技术》。

    基于邻近性的方法
    给定特征空间中的对象集,可以使用距离度量来量化对象间的相似性。基于邻近性的方法假定:离群点对象与它最近邻的邻近性显著偏离数据集中其他对象与它们近邻之间的邻近性。

    基于聚类的方法
    基于聚类的方法通过考察对象与簇之间的关系检测离群点。直观地,离群点是一个对象,它属于小的偏远簇,或不属于任何簇。
    这导致三种基于聚类的离群点检测的一般方法。考虑一个对象。
    l 该对象属于某个簇吗?如果不,则它被识别为离群点。
    l 该对象与最近的簇之间的距离很远吗?如果是,则它是离群点。
    l 该对象是小簇或稀疏簇的一部分吗?如果是,则该簇中的所有对象都是离群点。

    展开全文
  • 数据挖掘实践

    千次阅读 2021-05-26 12:59:44
    数据挖掘课程实验 一、背景描述 《数据挖掘》课程实践要求 从Kaggle上进行实践 网址:https://www.kaggle.com/datasets 要求: 在竞赛、数据集这2个栏目中,找到一个项目进行实践。 独立完成。 实践报告要求: a) ...

    数据挖掘课程实验

    一、背景描述

    《数据挖掘》课程实践要求

    从Kaggle上进行实践
    网址:https://www.kaggle.com/datasets
    要求:

    1. 在竞赛、数据集这2个栏目中,找到一个项目进行实践。
    2. 独立完成。
    3. 实践报告要求:
      a) 描述背景,目标、问题,方案,算法及比较,数据集(预处理等全流程),结果及调试,展示及结果分析。
      b) 算法分析。流程图。
      c) 源码和数据集(打包)、软件执行的录屏。
    4. 评分依据:选题难度、完成情况、工作量

    越来越多的客户退出信用卡业务,这让银行经理感到不安。如果有人能预测谁会被淘汰,他们会很感激这样他们就能主动去找客户,为他们提供更好的服务,让客户的决定朝相反的方向发展。

    我从一个网址为https://leaps.analyttica.com/home的网站获得了这个数据集。我一直使用这个方法来获取数据集,并相应地对其进行处理,以产生富有成效的结果。该网站解释了如何解决特定的业务问题。

    现在,这个数据集包含了10000多个客户,包括他们的年龄、工资、婚姻状况、信用卡限额、信用卡类别等。它有将近18个功能。各个特征的介绍如下:

    CLIENTNUM:客户的编号,是客户的唯一标识。

    Attrition_Flag:数据的标签,包括流失的客户和不流失的客户。非数值类型。

    Customer_Age:客户的年龄。

    Gender:客户的性别。M代表男性,F代表女性。非数值类型。

    Dependent_count:家属的人数。

    Education_Level:客户受教育的程度。非数值类型。

    Marital_Status:婚姻的状况。非数值类型。

    Income_Category:客户一年的收入类别。非数值类型。

    Card_Category:客户持有卡片的种类。非数值类型。

    Months_on_book:客户与银行交互的频率。

    Total_Relationship_Count:客户总共持有银行产品的数量。

    Months_Inactive_12_mon:过去12个月没有与银行进行交互的月份数。

    Contacts_Count_12_mon:过去12个月与银行进行交互的数量。

    Credit_Limit:信用卡的信用额度。

    Total_Revolving_Bal:信用卡上的循环余额总额。

    Avg_Open_To_Buy:过去12个月开放购买的信贷额度。

    Total_Amt_Chng_Q4_Q1:第4季度和第1季度相比的交易金额的变化。

    Total_Trans_Amt:过去12个月的交易总额。

    Total_Trans_Ct:过去12个月的交易总数。

    Total_Ct_Chng_Q4_Q1:第4季度和第1季度相比的交易数量的变化。

    Avg_Utilization_Ratio:平均卡片利用率。

    Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_1:朴素贝叶斯

    Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_2:朴素贝叶斯

    (由银行已知,最后两个特征可以去掉。)

    二、实验目的

    1.提高预测流失客户的性能

    在这个商业问题上,我们的首要任务是找出那些正在流失的客户。即使我们预测不流失的客户是流失的,这也不会损害我们的业务。但将流失客户预测为非流失客户就可以了。所以召回(TP/TP+FN)需要更高。

    到目前为止,我已经成功召回了62%的产品。需要更好的。

    2.最有影响力的因素

    我们希望深入的探索性数据分析,可以帮助我们可视化流失客户和非流失客户之间的区别。

    3.不同分类算法的比较及可视化

    运用不同的分类模型进行分类预测,并将其模型对数据集进行预测,分析比较并可视化各模型的性能。

    三、实验问题

    通过分析银行客户的数据集,深入挖掘出数据的特征,以及每个特征的重要程度、各个特征之间的联系。对客户数据集构建一个性能良好的分类模型,以便于银行对未来客户进行预测,预测他们是流失客户亦或是不流失的客户,并及时的联系沟通,有效地防止银行客户地流失。

    四、实验方案

    1.总体方案

    使用python算法可有效地对数据进行分析、挖掘。首先通过DataFrame读取从kaggle上下载的数据集。然后进行数据的预处理,检测是否存在缺失值、将字符串类型转为机器可以处理的类型、划分数据集。然后构建分类模型,使用sklearn库里的经典的分类模型,其中包括:随机森林、感知器、逻辑回归、SVM、决策树、KNN、GBDT、朴素贝叶斯,对训练集进行模型地训练,再使用模型对测试集进行测试。

    此外,我还使用深度神经网络DNN的方法,对数据集进行训练及测试。

    测试的结果由精确率、召回率、准确率、F1值、ROC曲线等指标进行判定。我还对每个模型进行了可视化,使用PDPBOX工具包,对数据集进行探索性数据分析和可解释性分析,绘制了:

    1.特征的重要性图

    2.特征之间的散点图

    3.构建模型前后的pdp图(部分依赖图),描述不同特征的流失客户与不流失客户的比例。

    4.特征之间两两交互的影响图

    5.通过可视化随机森林中的一棵决策树,分析模型建立的过程

    6.ICE图,可视化出特征变化时,模型预测结果概率的变化。(比如性别由女性变男性时,模型预测结果是如何变化的。)

    7.二维的PDP图,描述构建模型后,表达特征之间的交互关系。

    8.使用eli5,绘制Permutation
    Importance图。对测试集中某一列数据打乱,再将我们打乱的数据集在模型上预测。打乱后是否会导致模型预测精度大幅度下降。

    最后,我还进行了使用SHAP值(SHAP所做的是量化每个特征对模型所做预测的贡献。)进行可视化分析,绘制出:

    1.各个特征的数值大小和各特征的SHAP值关系图,反映数据中的某个特征对模型预测的结果是起到正向贡献还是负向贡献。

    2.对于单个客户,使用shap.force_plot()绘制出该客户的各个特征对模型预测的贡献。

    3.使用summary plot()对测试集所有样本进行聚类,按照相似性聚类展示、按照预测结果概率从到小展示,按照测试集原本样本顺序、按照某个特征分别展示。挖掘数据间的共同点。

    4.使用dependence_plot()展示某个特征从小变大时对预测结果的shap值。比较特征变化对模型的影响。

    5.绘制出决策图。决策图反映了每个测试样本在每一个特征下的决策路径。分类每个样本的决策过程。

    当然,还需对各个分类算法进行了横向比较,分析出比较可行的分类模型。

    2.流程图

    实验流程图如下:

    在这里插入图片描述

    五、实验过程

    1.数据预处理

    1.1读取数据集:

    总的数据集为:10127*23,各个特征所代表的含义已在前面给出,第二列为数据集的标签。

    1.2生成数据探索性分析EDA报告:

    在这里插入图片描述

    在该报告中可以查看数据集每个特征的分布状况、值的类型、以及特征之间的相关性:

    在这里插入图片描述
    在这里插入图片描述

    1.3数据清洗

    缺失值检查:用isnull().sum()判断数据集是否存在缺失值,同时统计缺失值的个数。

    在这里插入图片描述

    可以看到并无缺失值。

    1.4去除无效特征

    分析数据集可知,数据特征中的CLIENTNUM(客户的编号)以及数据集中的最后两列(朴素贝叶斯)是对分类模型的构建起不到作用,可以删掉,使得数据集维数降低。

    在这里插入图片描述

    1.5数据集格式转换

    分析数据集可知,数据集中存在非数值类型的特征,它们并不能直接输入模型进行训练,故需要转换格式。

    标签的转换:

    在这里插入图片描述

    可以得到标签只有两类,故属于二分类的问题。

    使用数值0表示‘Attrited Customer’,即流失的客户;使用1表示‘Existing
    Customer’即不流失的客户。

    性别的转换:

    从数据集中可知,Gender特征中M代表男性,F代表女性,是非数值类型。需要进行转换处理。

    使用数值0代表‘F’,即女性;使用数值1代表‘M’,即男性。

    婚姻状况的转换:

    从数据集中可知,Marital_Status特征中分为4类。‘Unknown’代表未知其婚姻的状况,‘Single’代表单身状态,‘Divorced’代表离异状态,‘Married’代表已婚状态。

    使用数值0代表‘Unknown’,数值1代表‘Single’,数值2代表‘Divorced’,数值3代表‘Married’。如下图所示:

    在这里插入图片描述

    学历的转换:

    从数据集中可知,Education_Level特征中分为7类。'College’代表大学学历,'Doctorate’代表博士学历,'Graduate’代表毕业水平,'High
    School’代表高中学历,'Post-Graduate’代表提前毕业水平,'Uneducated’代表未接受教育,'Unknown’代表未知学历。

    按照教育水平从高到低排序,使用数值1代表’Unknown’,使用数值2代表’Uneducated’,使用数值3代表’High
    School’,使用数值4代表’College’,使用数值5代表’Graduate’,使用数值6代表’Post-Graduate’,使用数值7代表’Doctorate’。
    如下图:

    在这里插入图片描述

    收入的转换:

    从数据集中可知,Income_Category特征中分为6类。’$120K
    +‘代表年薪大于$120K,’$40K - $60K’代表年薪位于$40K - $60K,’$60K -
    $80K’代表年薪位于$60K - $80K,’$80K - $120K’代表年薪位于$80K -
    $120K,'Less than $40K’代表年薪小于$40K,'Unknown’代表其年薪未知。

    按照收入从高到低排序,使用数值6代表’$120K +’,使用数值5代表’$80K -
    $120K’,使用数值6代表’$60K - $80K’,使用数值3代表’$40K -
    $60K’,使用数值2代表’Less than $40K’,使用数值1代表’Unknown’。如下图:

    在这里插入图片描述

    银行卡种类的转换:

    从数据集中可知,Card_Category特征可分为4类,'Blue’代表蓝卡,'Gold’代表金卡,'Platinum’代表铂金卡,'Silver’代表银卡。

    按照银行卡等级排序,使用数值4代表’Platinum’,使用数值3代表’Gold’,使用数值2代表’Silver’,使用数值1代表’Blue’。如下图:

    在这里插入图片描述

    到目前为止,我们已经把特征为字符串型的值转换为数值型,查看数据如下:

    在这里插入图片描述

    可以得到,标签’Attrition_Flag’是object类型,并不是int型,不难通过模型进行处理,需要把它转为int型。转换如下:

    在这里插入图片描述

    至此,我们已经完成了数据集的预处理。

    2.探索性分析及其可视化

    对于数据预处理好的数据集,我们可以保存下来,方便后面进行模型的构建。

    数据集的特征的分布:

    在这里插入图片描述

    在这里插入图片描述

    可以看到数据集中男女性别的比例,以及客户年龄段的分布曲线。

    绘制热力图:

    对于多维特征的数据集,由于不方便直接得出这些特征之间的关联性,我们可以绘制出热力图,如下图所示:
    在这里插入图片描述

    若两特征相交的值越接近1,则这两个特征呈正相关;反之,越接近-1,这两个特征呈负相关。由上图分析可知,’Avg_Open_To_Buy’和’
    Credit_Limit’这两个特征呈正相关。

    单列特征与标签的关系:

    我们选取’ Customer_Age’特征,绘制柱形图,探索它与标签的关系,如下图所示:

    在这里插入图片描述

    可以看到,1表示不流失的客户,0表示流失的客户。客户年龄的不同,它们的标签的比例也不同。

    在这里插入图片描述

    同样地,不同教育水平的客户,它们的标签也不同,从下图中可以看到,处于大学毕业的客户是银行的主要客户,其流失的概率也较小。

    **绘制箱形图:**表示数据的统计分布

    我们使用箱型图来观察数值波动较大的某些特征。

    在这里插入图片描述

    上图表示了不同标签的过去12个月的总交易额和银行卡可用额度的箱型图,5条线从上至下分别表示了最大值、上中位数、中位数、下中位数、最小值。

    绘制小提琴图:反映特征各个数值的分布数量。

    同样地,我们对上述两个特征使用小提琴图,如下图:

    在这里插入图片描述

    它反映了数据分布的同时,绘制出来各个区间的数量。

    绘制散点图:

    使用散点图,刻画出,不同年龄,不同的总交易额的情况下,流失客户和不流失客户的分布。如下图:

    在这里插入图片描述

    从图中可以看到,各个年龄段中,总交易量很大时,基本上都是不流失的客户;而流失的客户基本处于总交易额较少、年龄较大的区间。

    接下来我会使用PDPBOX工具包,对数据集进行进一步地探索性数据分析:

    使用pdpbox绘制不同性别下,客户属于不流失客户的比例(先验概率统计):

    在这里插入图片描述

    可以看到,数据集中女性有5358个样本,其中属于不流失客户的比例为:0.826。而男性有4769个样本,其中属于不流失客户的比例为:0.854。这说明男性较女性而言,更不容易成为流失的客户。

    同样地,不同年龄段的客户,其属于不流失客户的比例绘制如下:

    在这里插入图片描述

    可以分析出,客户的年龄段处于[53,56)时,更容易成为流失客户,银行应该对他们进行沟通联系。

    描述两列特征之间的关系:

    我使用了客户的年龄和过去12个月的总交易额这两列特征,绘制出关系图如下:

    在这里插入图片描述

    其中,颜色越深,说明该区域的客户越属于不流失的客户;圆圈越大,说明该区域的客户越多。由图分析可知,总交易额越少的客户,颜色越浅,满足前述的条件。

    至此,我们从多维度的可视化完成了构建模型前的数据探索性分析。

    3.构建分类模型

    总体方案:先将数据集划分为训练集和测试集,再从sklearn库中导入分类模型,其中包括:随机森林、感知器、逻辑回归、SVM、决策树、KNN、GBDT、朴素贝叶斯。

    除此之外,我还构建了深度神经网络模型,对数据集进行分类预测。

    对每一个模型,绘制出其特征重要性图、混淆矩阵图、ROC曲线、精确率、准确率、召回率、F1值,来评估模型的好坏。

    除此之外,我还会对模型进行可解释性分析。通过绘制pdp图(部分依赖图)、ICE图、绘制Permutation
    Importance图、shap值分析图、可视化决策树已经绘制模型的决策图。

    划分数据集:

    在这里插入图片描述

    在这里插入图片描述

    随机森林分类模型:

    在这里插入图片描述

    直接导入sklearn库中的随机森林进行模型的构建,绘制出混淆矩阵、ROC曲线如下图所示:

    在这里插入图片描述

    评估指标:

    在这里插入图片描述

    可以看到模型的分类还是很准确的。

    ROC曲线:

    在这里插入图片描述

    可以看到,ROC曲线很接近左上角,说明模型效果很好。通过计算得出,曲线包围的面积是0.9836,很接近1.0,很好地反映了模型预测的效果。

    此外,随机森林是由多颗决策树构成的,如何展示某棵决策树的决策过程,以了解模型的构建呢?我绘制出第50棵决策树如下图所示:

    在这里插入图片描述

    有该树可以得出,每个节点越近蓝色,说明模型预测它越属于不流失的客户;越接近黄色,说明模型预测它越可能属于流失的客户。同时,决策树越深,其基尼指数越小,纯度越高。

    在随机森林模型构建过程中,会使用不同的数据集,以及会使用部分特征,而不是全部特征,我将第50棵决策树所用到的特征以及特征的重要程度绘制如下:

    在这里插入图片描述

    需要注意,这只是第50棵树的特征的重要性,而不是全部的随机森林模型的特征的重要性。

    对此,我绘制出全部的随机森林模型的特征的重要性,如下图:

    在这里插入图片描述

    从图看出,过去12个月的总交易量和总交易额这两个特征最重要,而银行卡的种类这个特征对应构建模型并不重要。

    4.可解释性分析及其可视化

    我以随机森林分类模型为基础,进行模型的可解释性分析以及可视化。

    绘制Permutation Importance图:

    在构建好随机森林分类模型后,使用eli5,绘制Permutation
    Importance图,对测试集中某一列数据打乱,再将我们打乱的数据集在模型上预测。打乱后是否会导致模型预测精度大幅度下降。

    如果大幅度下降,就说这些列特征对模型比较重要。如果没有大幅度下降,甚至更高,这些列可能有噪声,或者列对模型没有作用。Permutation
    Importance图如下:

    在这里插入图片描述

    分析可知,绿色的特征对随机森林模型而言很重要,而浅红色的特征对该模型的预测起到负向作用。可以看到,’Months_on_book’、’Income_Category’、’Education_Level’对模型的预测起到了负向贡献。

    绘制pdp图:

    在构建模型前,我们绘制了不同年龄段的客户,属于哪个标签的概率的pdp图,这属于先验图。构建随机森林模型后,我考虑了模型的因素,再次画出不同年龄段的pdp图如下图:

    在这里插入图片描述

    可以观察到不同年龄段下模型预测的准确性,这是考虑了模型的因素。之前分析出客户的年龄段处于[53,56)时,更容易成为流失客户,而在这个年龄段中,模型预测的准确性高达0.99。

    绘制ICE图:

    将测试集每一个样本在某一个特征变化时候的预测结果显示出来。

    对于性别而言,如下图:

    在这里插入图片描述

    特征由女性变成男性,每一个样本预测为不流失客户的概率会变大,这也符合之前的分析。若线条趋向负数,则说明预测为不流失客户的概率变小。

    对于年龄特征而言:

    在这里插入图片描述

    年龄越大,每一个样本预测为不流失客户的概率会变小,起到负向贡献。

    对比总交易额的pdp图和ICE图:

    在这里插入图片描述

    在这里插入图片描述

    有两图可知:当总交易额在2500附近时,模型预测结果准确度降低,会突然起到负向作用。

    绘制二维PDP图:

    如果同时考虑两个特征的pdp图,我绘制了二维的pdp图如下图所示:

    在这里插入图片描述

    从图中可以看出,当总交易额在[3600,4400]区间,年龄小于26岁时,模型预测客户为不流失的客户的概率最高;而当总交易额在7800左右时,模型预测客户为不流失客户的概率仅为0.6左右。

    **使用Shap值进行分析:**打破模型的黑箱子

    SHAP所做的是量化每个特征对模型所做预测的贡献。

    对测试集所有样本,预测为需要联系和不需要联系的客户各自的平均概率,如下:

    在这里插入图片描述

    从shap值的角度进行分析,可知:对某个样本而言,在模型预测下,它被期望预测为流失客户的概率是0.1588,而被期望预测为不流失客户的概率为0.8412。

    那么,每个样本都有自己的shap值,可视化shap值使其更直观,如下:

    在这里插入图片描述

    它反映了特征的重要程度,对于某个特征,计算测试集每个客户的该特征shap值之和,shap值越高,特征越重要。

    至此,已经用过三种构建特征重要度的方法了。使用weight,PermutationImportance和shap这三种方式衡量特征重要度。

    深入探讨各个特征的数值大小和各特征的SHAP值关系图:

    summary
    plot为每个样本绘制其每个特征的shap值,每一行代表一个特征,横坐标为shap值。一个点代表一个样本,颜色表示特征值(红色高,蓝色低)。每一行表示一个特征,红色表示该特征的值较高的数据点,蓝色表示该特征较低的数据点。越往右边是正向贡献,越往左边是负向贡献。

    在这里插入图片描述

    模型两两特征的shap值可视化:

    在这里插入图片描述

    红色表示该特征的值较高的数据点,蓝色表示该特征较低的数据点。越往右边是正向贡献,越往左边是负向贡献。

    这些都是整个测试集的特征的shap值进行交互的结果,那么若我们想观察单个客户的情况,如下:

    先选出测试集的某个客户:

    在这里插入图片描述

    这里选择5909号客户,绘制他每个特征的shap值:
    在这里插入图片描述

    绘制force plot图:

    计算该客户的各个特征对需要和不需要联系的客户两个预测结果的shap值的影响:

    在这里插入图片描述

    红色:有正向贡献的特征,蓝色,负向贡献的特征。红条越大,表示shap越大。红条减去蓝条:是base
    value平均结果到最终预测结果之间的差距。可以看到,5909号客户的真实标签是True,模型预测为不流失客户的概率是0.94。

    绘制summary plot图:

    将大量样本的每个特征进行集成分析:

    这里选择60个样本,将测试集样本的force plot旋转九十度并拼接在一起,形成summary
    plot图。可以在下拉菜单选择按照相似性聚类展示、按照预测结果概率从到小展示、按照测试集原本样本顺序、按照某个特征分别展示。如下图所示:

    按照相似性聚类展示:

    在这里插入图片描述

    按照预测结果概率从到小展示:

    在这里插入图片描述

    可以分析相似的客户都具有哪些特征,比如他们是不是都是因为总交易量是多少而被识别为不流失的客户。

    绘制DEPENDENCE PLOT图:

    展示某个特征从小变大时对预测结果的shap值,比如当年龄变化时,预测结果的shap值如何变化,如下图:

    在这里插入图片描述

    可以看到,当年龄增大时,模型预测结果的shap值会逐渐减小。

    再比如总交易额变化时,模型预测结果的shap值的变化如下:

    在这里插入图片描述

    其中,蓝点代表女性,红点代表男性。

    绘制决策图:

    决策图可以展示测试集所有数据的决策过程:

    在这里插入图片描述

    决策图由下往上的特征是按照特征重要程度排序的,决策时先从最底端的’Card_Category’特征开始进行决策,由下往上进行决策,受不同的影响,有些样本被预测为流失客户,即蓝色的路径;有些被预测为不流失客户,即红色的路径。

    对上图进行聚类,以便找出异常值路径:

    在这里插入图片描述

    可以看到,样本的蓝色路径被分配到左边,若左边存在着红色路径,则该红色路径就是模型预测错误的样本。

    我们也可以展示单个客户的决策图:

    在这里插入图片描述

    可以看到,该客户索引号为80,在原始数据集X中的索引号为1100,被模型预测为不流失客户。

    模型预测错误的客户的分析:

    首先找出所以预测错误的客户:

    在这里插入图片描述

    取出第一个客户进行分析,如下图:

    在这里插入图片描述

    4142号客户的真实标签是False,即他属于流失客户,但是模型预测他属于不流失的客户的概率为0.56。

    在决策图中显示测试集中模型预测错误的样本,用点划线绘制如下图:

    在这里插入图片描述

    至此,已经将随机森林模型进行了可解释性分析及其可视化,接下来要进行不同分类模型的横向比较。

    5.分类模型的比较

    在上述的实验过程中,我们构建了随机森林模型,但是这不一定是最优的,需要进行横向比较各种模型的指标性能。

    感知器:(Perceptron)

    使用训练集对它进行训练,该模型的性能如下:

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    逻辑回归:(LogisticRegression)

    使用训练集对它进行训练,该模型的性能如下:

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    ROC曲线及其包围的面积:

    在这里插入图片描述

    包围的面积是:0.884

    SVM:(SVC)

    使用训练集对它进行训练,并且使用核函数‘rbf’,该模型的性能如下:

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    决策树:(DecisionTreeClassifier)

    使用训练集对它进行训练,该模型的性能如下:

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    ROC曲线及其包围的面积:

    在这里插入图片描述

    包围的面积:0.864

    KNN:(KNeighborsClassifier)

    使用训练集对它进行训练,该模型的性能如下:

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    ROC曲线及其包围的面积:

    在这里插入图片描述

    包围的面积:0.897

    GBDT:(GradientBoostingClassifier)

    使用训练集对它进行训练,该模型的性能如下:

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    ROC曲线及其包围的面积:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-25HWIOjk-1622005167541)(media/0c26fe307bf7e8e85050a171be198968.png)]

    朴素贝叶斯:(MultinomialNB)

    使用训练集对它进行训练,该模型的性能如下:

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    ROC曲线及其包围的面积:

    在这里插入图片描述

    深度神经网络(DNN):

    使用20个节点,2个隐藏层,学习率为0.01,Epoch为100,Batch的大小为200,并且使用sigmoid()作为激活函数,使用pytorch对测试集构建深度神经网络模型。

    混淆矩阵:

    在这里插入图片描述

    指标:

    在这里插入图片描述

    以上是我使用随机森林、感知器、逻辑回归、SVM、决策树、KNN、GBDT、朴素贝叶斯、DNN等分类模型构建的分类器。

    六、实验结果分析

    构建好以上的模型后,我将进行分类模型的横向比较。

    ’ Attrited_Customer’:

    对于标签为流失客户’ Attrited_Customer’的样本,各个分类模型的指标如下图:

    在这里插入图片描述

    绘制柱形图进行直观比较:

    在这里插入图片描述

    分析:对于精确率prediction而言,随机森林、决策树、感知器、SVM都很高,其中感知器、SVM的精确率达到了100%,而朴素贝叶斯模型的精确率最低。

    对于召回率recall而言,随机森林、决策树都很高,而感知器的召回率最低,几乎为0。

    对于准确率而言,随机森林、决策树、SVM都很高,而朴素贝叶斯的准确率最低。

    对于F1值而言,随机森林、决策树都很高,而朴素贝叶斯和DNN很低。

    综上,对于标签为流失客户’
    Attrited_Customer’的样本,随机森林、决策树模型效果都很好,其中,随机森林效果最好,各项指标都大于95%。

    ‘Existing_Customer’:

    在这里插入图片描述

    绘制柱形图进行直观比较:

    在这里插入图片描述

    分析:对于精确率prediction而言,随机森林、决策树、SVM都很高,其中随机森林模型的精确率达到了100%,而感知器模型的精确率最低。

    对于召回率recall而言,随机森林、感知器、SVM、决策树都很高,而朴素贝叶斯的召回率最低,几乎为0。

    对于准确率accuracy而言,随机森林、决策树都很高,而朴素贝叶斯的准确率最低。

    对于F1值而言,随机森林、决策树、SVM都很高,而朴素贝叶斯很低。

    综上,对于标签为流失客户’ Existing
    Customer’的样本,随机森林、决策树、SVM模型效果都很好,其中,随机森林效果最好,各项指标都大于99%。

    取出单个准确率进行比较:

    在这里插入图片描述

    可以看到还是决策树和随机森林模型的效果最好,其中以随机森林为最好。由此可以得到,该数据集适合用树形结构的模型进行分类预测。

    七、实验总结

    综上所述,本次实验我使用银行提供的数据集,首先进行了数据的预处理,构建起一套分类模型,准确预测客户是否属于流失客户,以帮助银行及时与客户进行沟通联系。通过构建随机森林模型,我使用pdp、ICE等图将分类模型这个黑箱子进行可视化,分别进行了探索性分析和构建模型后的可解释性分析,从三个角度分析了最具有影响力的特征因素。最后,通过不同分类算法模型的构建、比较,得出了随机森林模型这个性能优秀的模型,真正地提高了预测流失客户的性能。

    展开全文
  • 数据挖掘:数据处理

    2021-03-20 12:04:37
    数据挖掘:数据处理 最近学校开了数据建模课程,根据学习内容做个小结。 数据清洗包括以下几个步骤: 1、熟悉数据,核对数据口径(必要时查阅相关资料以加深对数据的理解)。 2、探索性数据分析EDA 目的:熟悉数据集...
  • 数据挖掘训练题

    千次阅读 2015-12-15 09:28:03
    数据挖掘练习题,单选、多选和判断题三种类型!
  • 原标题:干货|8个优秀的数据挖掘工具使用python的开发人员都少不了数据挖掘工具,因为一般来说,能否充分利用数据,取决于是否有合适的工具来清理、准备、合并并正确分析。今天小编介绍8个优秀的数据挖掘工具,感...
  • python有强大的第三方库,广泛用于数据分析,数据挖掘、机器学习等领域,下面小编整理了python数据挖掘的一些常用库,希望对各位小伙伴学习python数据挖掘有所帮助。1. Numpy能够提供数组支持,进行矢量运算,并且...
  • 机器学习和数据挖掘

    2020-10-27 21:08:00
    数据分析,或者说数据挖掘,目的是从大数据中寻找到有趣模式和知识。 数据挖掘,使用到了多种技术,包括统计学,模式识别,可视化,机器学习等等。今天我们来探究一下在数据挖掘领域,有哪些算法可以使用。 女士...
  • 分箱的方法:有4种:等深分箱法、等宽分箱法...统一权重,也成等深分箱法,将数据集按记录行数分箱,每具有相同的记录数,每记录数称为箱子的深度。这是最简单的一种分箱方法。 统一区间,也称等宽分箱法,使...
  • 线图(型图) 气泡图 直方图 核密度估计(KDE)图 线面图 网络图 散点图 树状图 小提琴图 方形图 三维图 二、交互式工具 Ipython、Ipython notebook Plotly 三、Python IDE...
  • 数据挖掘——数据预处理

    千次阅读 2018-07-24 21:27:14
    1.1 数据挖掘中使用的数据的原则 尽可能赋予属性名和属性值明确的含义; 去除惟一属性; 去除重复性; 合理选择关联字段。 1.2 常见的数据预处理方法 数据清洗:数据清洗的目的不只是要消除错误、冗余和数据...
  • 二手车数据挖掘- 数据分析

    千次阅读 2020-03-23 01:05:51
    Datawhale 零基础入门数据挖掘-Task2 数据分析 二、 EDA-数据探索性分析 Tip:此部分为零基础入门数据挖掘的 Task2 EDA-数据探索性分析 部分,带你来了解数据,熟悉数据,和数据做朋友,欢迎大家后续多多交流。 赛题...
  • 数据挖掘:数据清洗——数据噪声处理

    千次阅读 多人点赞 2020-02-19 14:43:42
    数据挖掘:数据预处理——数据噪声处理 一、什么是数据噪声? 数据噪声(Noise):数据集中的干扰数据(对场景描述不准确的数据),即测量变量中的随机误差或方差。 二、噪声数据与离群点的区别 观测量(Measurement) ...
  • 数据挖掘学习

    2019-10-01 19:59:29
    数据挖掘大部分的价值在于利用数据挖掘技术改善预测模型。 知识发现KD输出的是规则数据挖掘DM输出的是模型 共同点两种方法输入的都是学习集(learning sets)目的都是尽可能多的自动化数据挖掘过程只能半自动化,...
  • 1.某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?A.关联规则发现B.聚类C.分类D.自然语言处理2.以下两种描述分别对应哪两种对分类算法的评价标准?(a)警察抓小偷,...
  • 数据挖掘基础

    2019-09-23 16:43:22
    这里写自定义目录标题数据挖掘定义数据挖掘基本任务功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居...
  • 数据挖掘

    2013-11-26 00:04:00
    1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A) A. 关联规则发现 B. 聚类 C. 分类 D. 自然语言处理 2. 以下两种描述分别对应哪两种对分类算法的评价标准...
  • 数据挖掘笔试题

    千次阅读 2017-08-18 17:18:41
    1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A) A. 关联规则发现 B. 聚类 C. 分类 D. 自然语言处理 2. 以下两种描述分别对应哪两种对分类算法的评价标准? ...
  • 数据仓库与数据挖掘复习题目

    千次阅读 2019-05-22 09:07:22
    期末考试题型 ...1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A) A. 关联规则发现 B. 聚类 C. 分类 D. 自然语言处理 2. 以下两种描述分别对应...
  • 数据挖掘_task2数据探索分析EDA1.前言2.内容介绍2.1 读取数据并查看大体信息2.1.1读取数据2.1.2 查看数据信息2.1.2.1 数据集的概况2.1.2.2 判断数据缺失和异常2.1.2.3 预测值的分布2.1.2.4 特征值的分布2.1.2.5 特征...
  • 数据挖掘第三版课后习题

    千次阅读 2021-03-10 09:30:12
    该文为数据挖掘概念与技术第三版课后习题的答案,部分参考了第二版的英文答案,由于个人水平有限,如若存在纰漏,请在评论区批评指正。另外,由于本次编辑格式较乱,可在资源下载区下载PDF版本以便参考。 第一章 ...
  • 数据挖掘笔记(二)

    2017-03-06 09:27:54
    数据挖掘笔记(二)
  • 数据挖掘150道笔试题

    2019-08-08 19:43:18
    本文为转载文章,转载了数据挖掘方面的150道题目。
  • 数据挖掘试题(150道) (1)

    万次阅读 多人点赞 2019-06-22 22:46:59
    1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A) A. 关联规则发现 B. 聚类 C. 分类 D. 自然语言处理 关联规则!也有很多其他的叫法,如:购物篮规则、啤酒...
  • 数据挖掘:数据清洗——异常值处理 一、离群点是什么? 离群点,是一个数据对象,它显著不同于其他数据对象,与其他数据分布有较为显著的不同。有时也称非离群点为“正常数据”,离群点为“异常数据”。 离群点跟...
  • 零基础入门数据挖掘 - 二手车交易价格预测。 链接:零基础入门数据挖掘 - 二手车交易价格预测 EDA目标 EDA的价值主要在于熟悉数据集,了解数据集,对数据集进行验证,来确定所获得的数据集可以用于接下来...

空空如也

空空如也

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

数据挖掘箱的深度