特征抽取
特征抽取是数据挖掘任务为重要的一个环节,一般而言,它对终结果的影响要高过数据挖掘算法本身。不幸的是,关于怎样选取好的特征,还没有严格、快捷的规则可循,其实这也是数据挖掘科学更像是一门艺术的所在。创建好的规则离不开直觉,还需要专业领域知识和数据挖 掘经验,光有这些还不够,还得不停地尝试、摸索,在试错中前进,有时多少还要靠点运气。
不是所有的数据集都是用特征来表示的。数据集可以是一位作家所写的全部书籍,也可以是1979年以来所有电影的胶片,还可以是馆藏的一批历史文物。
我们可能想对以上数据集做数据挖掘。对于作家的作品,我们想知道这位作家都写过哪些主题;对于电影,我们想知道女性形象是怎么塑造的;对于文物,我们想知道它们是何方产物。我们没办法把实物直接塞进决策树来得到结果。
只有先把现实用特征表示出来,才能借助数据挖掘的力量找到问题的答案。特征可用于建模, 模型以机器挖掘算法能够理解的近似的方式来表示现实。因此可以说,模型描述了客观世界中对 象的某些方面,是它的一个简化版本。举例来说,象棋就是对过往战事简化后得到的一种模型。
特征选择的另一个优点在于:降低真实世界的复杂度,模型比现实更容易操纵。实物的复杂性对目前的算法而言过于复杂,我们退而求其次,使用更为简洁的模型来表示实物。
我们应该始终关注怎么用模型来表示现实,要多考虑数据挖掘的目标,而不是轻率地用我们过去用过的特征。要经常想想我们的目标是什么。
年收入预测
这里,我们预测一个人年收入是否会多于5万美元。使用Adult数据集来为复杂现实世界建模。数据集的下载地址:http://archive.ics.uci.edu/ml/datasets/Adult
点击Data Folder链接。下载adult.data和adult.names文件,在数据集文件夹(主目录下Data文件夹)中创建Adult文件夹,将这两个文件放到里面。
我们来导入数据:
import os
import pandas as pd
data_folder = os.path.join(os.path.expanduser("~"), "Data", "Adult")
adult_filename = os.path.join(data_folder, "adult.data")
adult = pd.read_csv(adult_filename, header=None, names=["Age", "Work-Class", "fnlwgt", "Education",
"Education-Num", "Marital-Status", "Occupation",
"Relationship", "Race", "Sex", "Capital-gain",
"Capital-loss", "Hours-per-week", "Native-Country",