数据挖掘入门系列教程(六)之数据集特征选择

时间:2024-02-01 18:36:17

数据挖掘入门系列教程(六)之数据集特征选择

这一篇博客主要来如何介绍从数据集中抽取合适的特征。

我们知道,在数据挖掘中,数据的训练算法很重要,但是同样我们对于数据的前置处理也不可忽视。因为我们对某个数据集的描述是使用特征来表示的。在前面的博客中无论我们是获得商品交易的相关性关系,还是使用决策树去对Iris进行分类,我们都是使用了数据集中所有的特征。但是实际上我们获取的数据真的有这么好吗?

举个例子,我们对西瓜进行分类,但是西瓜的编号实际上与训练毫无关系,因此我们会训练之前将去掉西瓜的编号。我们之所以去掉编号,是因为我们知道这个编号与西瓜的好坏毫无关系。但是如果给你一个陌生的数据集,有着成百上千的特征,我们又如何去除无关的数据特征得到有用的特征然后进行训练?

凭感觉?这里有两个问题:

  • 数据集太大,这个太耗费人力
  • 如果某个关键的特征取值很相近(或者相同)怎么办

这里说一下第二个问题。举个例子,西瓜的好坏与西瓜的颜色有关,但是如果你的数据集中西瓜的颜色全部一样,你还要不要使用这个特征进行训练呢?

肯定有人说,要!!但是如果这种特征取值相似的特征有1000个,你还要不要呢?在前面的博客中,我们可以看到使用Apriori算法进行计算,一旦\(K\)的值增大,基本上轻薄本就算不动这个数据了!

简介

通过前面的学习我们知道,无论是交易数据,还是Iris数据,他们都是一个一个的实体(视频,声音,文本也是),我们会通过选择一个一个的特征来描述某一个实体,这可以说是建模,同时这个模型的表示能够让数据挖掘的算法能够理解。

如何选择一些好的特征,这个也就是这篇博客要讨论的话题(本篇博客是探讨探讨如何从已有的特征中选择好的特征【也就是简化模型】,而不是自己去从数据集中(比如说声音)去寻找特征)。

这样做有什么好处呢?最简单的一个就是它能够降低真实世界的复杂度。比如说我要描述一个苹果长什么样,我肯定不需要去了解苹果是从哪里买的。但是同样也有缺点,因为我们在简化的过程中,可能会忽略某一些特征,但是这些特征可能刚好有着某一些有用的信息。

特征可以初略的分为两个类型:

  • 数值型:数值特征,比如说Iris的花瓣长度是多少等等
  • 类别型:类别特征(也可以称之为名义特征)比如说西瓜的颜色是浅绿色还是深绿色

对于数值型特征来说,如果两个特征值相差很小,则可以认为这两个特征很相似,但是对于类别型的特征值而言,没办法说他们是否相似,因为他们要不相同,要不不相同。因为名义特征没办法进行数学上的计算,因此我们可以将它们进行二值化变成数值特征。

同样反过来,数值型特征也可以通过离散化变成类别特征,比如说花瓣长度大于某一个值为类别0,反之则为类别1。但是很明显,这样会丢失一些数据细节。

下面将以不同的数据集为例,介绍一些用来简化模型的算法。

加载数据集Adult

数据集来自这里,同样在我的GIthub中也存在这个数据集。我们下载如下的数据集:

adult.data中的部分数据如下,每一行代表的是一个人的数据,每一列表示的特征属性值(至于特征是什么,这个在adult.name文件中有介绍):