“ 数据,决定了机器学习的上限;而算法,只是尽可能逼近这个上限。”
——这句话很好的阐述了 数据 在机器学习中的重要性。
数据的特征工程
- 大部分直接拿过来的数据都是特征不明显的、没有经过处理的或者说是存在很多无用的数据,那么需要进行一些特征处理,特征的缩放等等,满足训练数据的要求;
- 优质的特征往往描述了数据的固有结构;
- 最初的原始特征数据集可能太大,或者信息冗余,因此在机器学习的应用中,一个初始步骤就是选择特征的子集,或构建一套新的特征集,减少功能来促进算法的学习,提高泛化能力和可解释性;
- 特征工程的意义:更好的特征意味着
鲁棒性好(稳定性,抗干扰能力)
,模型简单
,可以得到更好的结果
。
1、数据来源与类型
(1)来源 大部分的数据都来自已有的数据库,如果没有的话也可以交给很多爬虫工程师去采集,来提供。也可以来自平时的记录,反正数据无处不在,大都是可用的。
(2)类型
- 按照
机器学习的数据分类
我们可以将数据分成:
标称型
:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类
);
数值型
:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析
)。 - 按照
数据的本身
分布特性:离散型
、连续型
。
2、数据的特征抽取
数据多数特征都不是连续变量,比如分类
、文字
、图像
等,为了对非连续变量做特征表述,需要对这些特征做数学化表述,因此就用到了特征抽取
。sklearn.feature_extraction
提供了特征提取的很多方法
(a)分类
特征提取
- 方法
fit_transform(X, y)
应用并转化映射列表X,y为目标类型 - 方法
inverse_transform(X, [dict_type])
将Numpy数组或scipy.sparse矩阵转换为映射列表
from sklearn.feature_extraction import DictVectorizer
onehot = DictVectorizer(sparse=True) # sparse = True转换为sparse矩阵,默认开启
instances = [{
'city': '北京','temperature':100},
{
'city': '上海','temperature':60},
{
'city': '深圳','temperature':30}]
X = onehot.fit_transform(instances).toarray() # toarray()将sparse矩阵转换为Numpy数组
print(onehot.inverse_transform(X)) # 返回转换之前数据格式
print(onehot.get_feature_names()) # 返回特征名称
print(X, type(X))