Jimmy那些事儿

数据挖掘_核心思想&基本概念

核心目的

  1. 分类
  2. 预测
  3. 推荐


#核心思想

数据挖掘-DM(Data Mining),贯穿的主要的思想有四个:关联,分类,回归分析和聚类

  1. 前两条是为了寻找差异基因
  2. 后两条是预测差异基因的可能的属性


关联原则

表型的差异往往是和基因间的差异紧密联系的。内在的基因产生了表达的差异,才会导致外在的表型有变化,而外在的表型不同,往往是由于基因表达不同产生的。


分类比较

基因和表型之间有关联性,那我们只要把可区分的表型进行分类,那是不是就能锁定到与表型一样有差异的基因了?分类的关键就是为了形成比较。有了表型的差异,才能够分类,有了表型的分类,才能找出基因型的差异。

  • 我们为啥要把样本分成肿瘤和正常组织呢?就是为了比较肿瘤和正常组织间的差异,找出与表型相关联表达不同的基因。


回归分析

回归的目的是进行预测;

根据自变量预测因变量。


聚类

  • 根据未给定的规则进行划分类别;

通过确定类别的数量来确定如何划分;而分类是根据已知的规则进行分类,类别的数量是确定的。


分类 Vs. 聚类

聚类和分类的最基本区别。

  • 分类:就是根据文本的特征或属性,划分到已有的类别中。也就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。
  • 聚类:就是你不知道数据会分为几类,通过聚类分析将数据或者说用户聚合成几个群体,那就是聚类了。聚类不需要对数据进行训练和学习。

分类属于监督学习,聚类属于无监督学习。常见的分类比如决策树分类算法、贝叶斯分类算法等;聚类的算法最基本的有系统聚类,K-means均值聚类


基本概念


1. 数据挖掘

  • What:在大型数据库中自动地发现有用信息的过程。
    • KDD(Knowledge Discovery in Database):数据库中发现知识;KDD是将未加工的数据转换为有用信息的过程。数据挖掘是KDD中不可缺少的一部分;
  • Why : 发现先前未知的有用的模式; 预测未来观测值;


2. 分类

  • What:通过学习得到一个目标函数,把每个属性集映射到一个预先定义的类标号(分类属性);
    • 适合离散型变量;但并不适合序数类离散型变量;
  • Why :(1)作为解释性工具,区分不同类别中的对象;即用于概括数据,说明哪些特征决定该记录属于哪一个类标号;(2)用于预测未知记录的类标号;
  • How :解决分类的一般步骤

    1. 确定一种学习算法,以此来确定分类模型
    2. 数据集划分为训练集、测试集
      • 训练集(Training):由类标号已知的记录组成;用于拟合模型
      • 测试集(Test):由类标号已知的记录了组成,用于检验模型的泛化能力
    3. 用该学习算法,在训练集中拟合模型
    4. 把分类模型运用到测试集中,用于评估模型的泛化能力;应用混淆矩阵,得出模型预测的准确率、错误率等;
    5. 根据评价情况,选择不同的模型


2.1 数据集的划分

R - createDataPartition() - car包

1
2
3
4
5
6
> set.seed(1234)
> inTrain <- createDataPartition(data$y, p=0.75, time=1, list=FALSE)
> training <- data[inTrain, ] # 将75%的训练样本添加到data
> test <- data[-inTrain, ] # 将25%的测试样本添加到data
> print(table(data$y)) # 输出分割后的数据行
>

>

data$y, 目标变量

p=0.n, 划分为p%的训练数据的百分比;(1-p)%为测试样本的百分比

time=n, 要创建的分区的数目

list=FALSE

2.2 混淆矩阵

  • What:提供了实际的类 vs 预测的类的分布情况,以此来评价模型的泛化能力;
预测-类别1 预测-类别0
实际-类别1 $f_{11}$ $f_{10}$
实际-类别0 $f_{01}$ $f_{00}$

准确率 = ($f{11}$ + $f{00}$) / ($f{11}$+$f{10}$+$f{01}$+$f{01}$)

错误率 = 错误预测数 / 预测总数

R - confusionMatrix()

1
2
3
> logit.pred <- predict(logit, hr_good_test, type="response") # 用predict得出模型的预测值
> confusionMatrix(hr_good_test$left, logit.pred) # 将实际值与预测值组成混淆矩阵
>


2.3 决策树

[what] - 通过一系列关于检验记录属性的问题,解决分类问题;每当一个问题得到答案,后一个问题随之而来,直到得出记录的类标号;

  • 根结点:起始位置
  • 内部结点:包含属性测试条件,用以对记录进行分类
  • 叶结点:终点位置,每个叶结点有一个类标号

[why] - 适用特点

  • 非参数方法,即不需要先验假设
  • 在有噪声情况下也可得出可接受的结果
  • 冗余属性不会对准确率造成不利影响
    • 冗余:即在一个数据集中,一个属性与另一个属性是强相关的,就是冗余的;在两个冗余属性中,如果已经选择其中一个,另一个会被忽律
  • 学习离散值函数的典型代表
  • 当数据太少时,无法做出有统计意义的判决;可设置当样本个数小于某个阈值时停止分裂

[how] - 建立决策树

  1. Hunt算法:将训练记录划分成较纯的子集,以递归方式建立决策树;
    • 若子集D中所有记录属于同一个类,则t是叶结点
    • 若子集D中包含属于多个类的记录,则选择一个属性测试条件,将记录划分成较小的子集
  2. 设置的两个问题
    • 如何为不同类型的属性指定测试条件
    • 需有一个结束条件

[how] - 模型选择-评估

  1. 保持方法

    • 将被标记的原始数据分为训练集、测试集。
    • 在测试集上评估模型的泛化性能
  2. 交叉验证:[what] - 每个记录用于训练的次数相同,并且恰好检验一次;

    • 选择一个子集作为训练集,另一个作为测试集;
    • 交换两个集的角色;
    • 总误差为对各个误差求和;

    二折交叉验证、k折交叉验证

  3. 自助法:[what] - 训练记录采用有放回抽样;即等几率的被重复抽取


2.4 SVM 支持向量机

[what] - 通过寻找最大边缘超平面,来划分数据;

  • [what] - 最大边缘超平面;
    • 可找到这样一个平面,使得所有的方块数据位于这个超平面的一侧,而所有的圆圈数据在另一侧
    • 它们的训练误差为零,但这样的平面有无穷个
    • 平行移动一个和决策边界平行的超平面,直到触到最近的圆圈,两个超平面之间的距离为分类器的边缘;
    • 选择分类器边缘最大的超平面,即最大边缘超平面
  • [why] - 因为边缘较小,决策边界的轻微扰动都可能对分类产生显著的影响;故边缘越大,泛化能力越好;

[why] - 适用特点;可很好地用于高维数据


3. 关联

  • What:用于发现数据集中有意义的联系;并用关联规则或频繁项集的形式表示
  • Why :通过发现有意义的联系来指导行为;

3.1 二元表示

  • What:每行对应一个事务,每列对应一个项;项可以用二元(binary)变量来表示,如果项在事务中出现,值为1,否则为0;
    • 非对称的二元变量:通常认为项在事务中出现比不出现更重要,故项是非对称的(asymmetric);

3.2 项集和支持度计数

项集

  • What:在关联分析中,包含0个或多个项的集合称为项集(itemset);如果一个项集包含k个项,称为k-项集
    • 例如3-项集:{啤酒,尿布,牛奶}

支持度计数

  • What:所有事务中包含该特定项集的事务个数;

3.3 关联规则、支持度与置信度

关联规则

  • What:形如 X$\to$Y的表达式,X和Y是不相交的项集;
  • How :关联规则的强度可以用支持度和置信度来度量;但并不表明一定存在因果关系;

支持度

  • What:支持度计数的百分比形式;所有事务中包含同时包含(X∪Y)的个数/总事务数
  • Why :(1)可以删去无意义的规则;(2)关联规则的有效发现;

置信度

  • What:所有事务中同时包含(X∪Y)的个数 / 所有事务中包含X的个数;也可以看做Y在给定X下的条件概率;
  • Why :度量通过规则进行推理的可靠性;

关联规则的发现:给定事务的集合T,发现支持度 $\ge$ 指定阈值并且置信度 $\ge$ 指定阈值的所有规则


3.4 频繁项集

  • What:满足最小支持度阈值的所有项集;

3.4.1 原始方法

格结构:枚举所有可能的项集;

候选项集:即X

过程:确定格结构中每个候选项集的支持度计数;这就需要候选项集去每一个事务中进行比较,若包含在事务中,则支持度计数增加;

3.4.2 先验原理

  • What:如果一个项集是频繁的,则它所有的子集也一定是频繁的;并且一个项集的支持度$\le$它的子集的支持度
    • {c,d,e}, 它的子集为{c},{d},{e},{cd},{ce},{de}
  • What:如果一个项集是非频繁的,则它的超集也一定是非频繁的;
    • {a,b},它的超集{a,b,c},{a,b,c,d,},{a,b,c,d,e}
  • Why :当发现某个项集是非频繁的时候,可以立刻剪去它的超集,这样使得所需要搜索的空间大大减少;

3.5 规则产生

  • What:在发现的频繁项集中提取所有高置信度的规则,这些规则称为强规则;
  • How :将项集Y划分成两个非空的子集 X 和 Y-X;

3.5.1 基于置信度的剪枝

  • What:如果规则X$\to$ Y-X 不满足置信度阈值,则形如 $X’$ $\to$ Y - $X’$的规则也一定不满足置信度阈值;其中,$X’$是X 的子集;
    • 若{bcd}$\to${a}具有不满足置信度阈值,则可以剪枝掉后件包含a的所有规则:{cd}$\to${ab},{bd}$\to${ac},{bc}$\to${ad},{d}$\to${abc}



4. 聚类

  • What:根据在数据中发现的描述对象及关系的信息,将数据对象分组,使得组内的相似度大于组间相似性;一种非监督学习
  • Why :旨在发现有用的对象组/簇
    • 有效发现最近邻
    • 数据汇总;为数据分析技术(回归、PCA)提供可用的数据集
    • 数据压缩;

4.1 聚类类型

4.1.1 层次/划分聚类

  • 划分聚类:将数据对象集划分成不重叠的子集(簇),使得每个数据对象恰好在一个子集中;
  • 层次聚类:允许簇具有子簇,是一种嵌套的集组,最后形成一棵树;除叶节点(终节点)外,树中每一个节点(簇)都是其子女(子簇)的合并,二树根是包含所有对象的簇;

4.2 簇类型

  • 明显分离的:每个对象到组内每个对象的距离 < 到组间任意对象距离
  • 基于原型的:每个对象到组内原型的距离 < 到组间原型的距离;
    • 原型可以是质心(簇中所有点的平均值
    • 原型可以是中心点(簇中最有代表性的点)
  • 基于图的
  • 基于密度的
  • 共同性质的(概念簇)


4.3 K均值

[what] - 基于原型的、划分的聚类技术;它试图发现用户指定个数K的簇

- K均值:用质心定义原型,质心=一组点的均值
  • K中心点:用中心点定义原型,中心点=一组点中最后代表性的点

[how] - 基本算法

  1. 选择K个初始质心;(K是用户指定的个数)
  2. 每个点指派到最近的质心,并集为一个簇;
  3. 重新计算新的簇的质心
  4. 重复指派和更新质心,直至质心不再发生变化;或者用较弱的条件替代算法-eg:直到仅有1%的点改变簇


4.4 凝聚层次聚类

[what] - 邻近性

  • MIN-单链;不同簇的两个最近点之间的邻近度
  • MAX-全链;不同簇的两个最远点之间的邻近度
  • 组平均;不同簇的所有点对邻近度的平均值

[how] - 从个体点作为簇开始,相继合并最接近的簇;直到只剩下一个簇

  1. 计算邻近度矩阵
  2. 合并最接近的两个簇
  3. 更新邻近矩阵,以反映新的簇与原来簇之间的邻近性
  4. 直至剩下一个簇


数据预处理

聚集

[what] - 将两个或多个对象合并成单个对象

[why]

  • 范围/标度转换,得到高层数据视图 - eg:从天到月
  • 群的行为比单个对象的行为更加稳定
  • 进一步分析的处理前提


抽样

[what] - 选取数据子集,但必须是有效抽样,即样本是有代表性的;

[why] - 压缩数据


维归约

[what] - 通过创建新属性,将旧属性合并到一起来降低数据集的维度

[why] -

  • 降低维数,提高数据挖掘的效果
  • 删除不相关的特定并降低噪音
  • 避免维灾难
  • 易于模型更容易解释


特征子集选择

特征创建

离散化和二元化

变量变换