【有书共读】数据挖掘导论 第2章 2.3
第2章 2.3
2.3.1 聚集(aggregation)
聚集是将两个或多个对象合并成单个对象。举例,将各个分公司中的各种商品的销售额汇总,得到各个分公司的销售总额,这里就相当于在对每一个公司将所有商品销售额进行了加和。
2.3.2 抽样
抽样是一种选择数据对象子集进行分析的常用方法。统计学上的抽样和数据挖掘上的抽样虽然动机不同,但是本质是相似的,前者是因为得到整个数据集(样本空间)的费用太高、太费时间,而后者是因为处理数据集中的所有数据的费用太高、太费时间。
用白话来说,就是如果我们的数据量太大,一般的数据挖掘或者机器学习模型的计算时间可能会太长以至于我们无法接受,这时候就需要减少数据量,在有限的时间内达到一定的效果。1. 抽样方法
最简单的抽样技术是单随机抽样(simple random sampling),定义是选取任何特定项的概率相等。这种随机抽样有两种变形:
(1) 无放回抽样
当总体由不同类型的对象组成,并且每种类型的对象数量差别很大时,需要使用分层抽样(stratified sampling)技术。简单地说,考虑一个及其不平衡的单二元属性数据集,正类有99990个样本,负类有10个样本,那么使用单随机抽样等概率抽取样本,提取出来的子集可能会不包含负类。如果这类问题的召回率非常重要的话,那么不提取负样本得到的数据挖掘模型抑或是机器学习模型,都会存在很大的问题。
2. 渐进抽样(progressive sampling)
合适的样本容量很难确定,因此有时需要使用自适应(adaptive)或渐进抽样方法。这一类方法的核心步骤是,从一个小样本开始,然后增加样本容量直至得到足够容量的样本。
举例,如果我们根据已有的数据集来学习一个预测模型。使用渐进抽样技术的步骤是,逐渐增加样本容量,直到在某一点我们关心的指标(比如准确率,召回率,F1 score)的增加趋于稳定,则在稳定点停止增加样本容量。这个方法,其实跟K-means聚类中K值的选择比较类似。
2.3.3 维规约(降维)
1. 维灾难(维度灾难)
维灾难是指这样的现象:随着数据维度(特征,属性)的增加,很多数据分析/挖掘任务会变得非常困难。不仅是运算,大量的特征意味着数据所占的空间中越来越稀疏。这样,
(1) 对于分类,这意味着可能没有足够的数据对象来创建模型,将所有的对象可靠地指派到一个类。
(2) 对于聚类,计算距离会有很大的困难,因为稀疏导致的数据特征不匹配。2. 维规约的线性代数技术
属性多带来的问题,自然是从属性的数量,也就是维度来解决问题。举一个简单的例子,在二维空间中的直线,实际上可以投影到一维空间。同样,三维空间的一个平面(甚至是曲面)可以投影到二维平面上。因此,高维空间中,如果某些维度是有很强的相关关系的,则可以通过某种手段将高维空间投影到低维空间,这样维数就能降低了,也就是属性/特征数量变少了,数据挖掘任务则可以更好的执行。
从线性代数的角度出发,我们有以下两种方法:
(1) 主成分分析(Principal Component Analysis,PCA)
2.3.4 特征子集选择
跟抽样方法的目的类似,特征子集选择,是从现有的特征/属性中选取一个特征的子集,数量比原来少,但是却有很好的代表性。我们特别要注意去除冗余特征和不相关特征。举例,商店里销售数据中,如果给了销售额和销售数量,那么销售单价就是冗余特征;在学生数据中,每个人的ID号(或者学号)基本上对于预测学生的成绩来说,用处不大,所以是不相关特征。
以下介绍几个特征子集的选择方法:
1. 嵌入方法(embedded approach)
顾名思义,就是特征选择作为数据挖掘算法的一部分嵌入在算法里的,算法本身决定使用哪些属性和忽略哪些属性,比如决策树。
2. 过滤方法(filter approach)
定义是使用某种独立于数据挖掘任务的方法,在数据挖掘算法运行前进行特征选择,再将选好的特征作为数据挖掘模型的输入,比较经典的方法有卡方检验。
3. 包装方法(wrapper approach)
此类方法将数据挖掘算法当做黑盒,通过一定策略枚举出最佳子集。
以下进一步讨论过滤方法和包装方法。
1. 特征子集选择体系结构
具体流程可以参考图2-11。
2. 特征加权
简单地说,只要是模型计算中涉及到特征的线性或非线性组合,相应的特征对应的项会有一定的权值,改变权值的大小相当于改变特征在模型中的重要性,具体如何修改,需要针对具体的方法来设定。
我们可以利用以后的属性集创建新的属性集,从而更有效地捕获数据集中的重要信息。比如,当一个分类问题跟材料的密度高度相关,但是我们数据集中只有质量和体积的数据,那么我们可以创建新的特征,密度=质量/体积。具体而言,主要有三种方法:特征提取、映射数据到新的空间和特征构造。
1. 特征提取(feature extraction)
不同的领域有不同的方法,比如计算视觉中常用卷积神经网(CNN)提取图像的高级语义特征,自然语言处理问题中常用循环神经网(RNN)提取文本的高级语义特征。
2. 映射数据到新的空间
举例,傅里叶变换,将时域映射到频域。
3. 特征构造
2.3.6 离散化(discretizaition)与二元化(binarization)
很多数据挖掘算法要求数据数据是离散或者二元的形式,那么将连续属性变换为分类属性的操作叫做离散化,将连续和离散的属性变换成一个或多个二元属性的过程叫二元化。
1. 二元化
方法其实和二元化类似,只不过划分的区间多了而已,通过(n-1)个分割点分割。区间划分的方法,有以下两种:
(1) 非监督离散化
不使用数据本身的类信息,而根据属性值进行等宽、等频率或者K-means的方法,对属性区间进行分割。
(2) 监督离散化
分割点的选取,其实归根结底是为了减少信息的不确定性。信息的不确定性可以用信息熵(entropy)来量化,定义k是不同的类标号数,m_i是某划分的第i个区间中值的个数,而mij是区间i中类j的个数,则第i个区间的熵ei由如下等式给出
其中,pij = mij/mi,是第i个区间中类j的概率(占比)。总划分的熵是每个区间熵的加权平均,即
其中,m是值的个数,wi = mi/m是第i个区间占总数的比例,n是区间个数。公式虽然比较复杂,但是直观上,区间的熵可以作为区间纯度的度量。如果一个区间只包含一类值,那么熵将为0,并且不影响总熵。如果区间中每种类别的频率相等,那么熵将达到最大。
具体划分的步骤,其实跟决策树的CART方法是类似的,如下:
(1) 将区间分为两部分,分割点选取让总熵最小的点;
(2) 递归地在两个区间内重复(1),直到区间个数达到要求,或者满足终止条件。
3. 分类属性具有过多的值
现实中,某种分类属性可能会有很多的值,比如一个学校的课程,数量就十分巨大,此时可以将分类属性认为的做一个归类,比如数学类课程,化学类课程,物理类课程等等,这样有时会给之后的数据挖掘或者机器学习任务带来很大的好处。
2.3.7 变量变换(variable transformation)
顾名思义,就是改变变量的值。
1. 简单函数
此种方法,就是用一个简单函数f(x)将x变换成别的值,函数可以是任意形式。
2. 规范化(normalization)或标准化(standardization)
在数据挖掘里,这两个词可以互换。具体而言,是通过现有变量创建一个新的变量,使得新的变量具有均值0和标准差1。需要注意的是,这和统计学中的规范化不一样,统计学中的规范化是是变量变成标准正态分布。数据挖掘中规范化的目的是,在组合不同的变量时,避免较大值域的变量左右计算结果。