数据预处理和特征工程

数据不给力,再高级的算法都没用

数据挖掘的五大流程

1.获取数据

2.数据预处理

  • 从数据中检测纠正或删除不准确或不适用于模型的记录的过程,让数据适应模型,匹配模型的需求。
  • 会处理数据类型不同,数据偏态数据异常、缺失、噪点、量纲不一、重复等等

3.特征工程

  • 将原始数据转换为更能代表预测模型的潜在问题的特征的过程。可以通过挑选最相关的特征,提取特征以及创造特征来实现。
  • 可能面对的问题:特征之间有相关性,特征和标签无关,特征太多或太小,或根本就无法表现出应有的数据现象或无法展示数据的真实面貌
  • 目的:降低计算成本,提升模型上线

4.建模,测试模型并预测出结果

5.上线,验证模型效果

数据预处理

1.数据无量纲化

将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。

1.1.数据归一化

把所有数据收敛到[0,1]之间,归一化后的数据服从正态分布

x=xmin(x)max(x)min(x)x^* = \frac{x-min(x)}{max(x)-min(x)}

在sklearn中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数,feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。
ML03 -- 数据预处理和特征工程

1.2.数据标准化

将数据x按均值u中心化后,再按照标准差o放缩,数据就会服从均值为0,方差为1的正态分布。

在sklearn中,我们使用preprocessing.StandardScaler来实现这个功能

x=xμσx^* = \frac{x-\mu}{\sigma}
ML03 -- 数据预处理和特征工程

1.3.标准化和归一化的选择

看情况而定,大多数机器学习算法中会选择标准化。标准化可以直接让数据服从正态分布,而归一化对异常值非常敏感,因为涉及到最大最小值。
建议先试试看标准化,效果不好再换归一化。

2.缺失值的处理

class sklearn.impute.SimpleImputer(missing_values=nan, strategy=’mean’, fill_value=None, verbose=0, copy=True)

这个类是专门用来填补缺失值的。它包括四个重要参数:

参数 含义
missing_values=nan 告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan
strategy 我们填补缺失值的策略,默认均值。
输入“mean”使用均值填补(仅对数值型特征可用)
输入“median"用中值填补(仅对数值型特征可用)
输入"most_frequent”用众数填补(对数值型和字符型特征都可用)
输入“constant"表示请参考参数“fill_value"中的值(对数值型和字符型特征都可用)
fill_value 当参数startegy为”constant"的时候可用,可输入字符串或数字表示要填充的值,常用0
copy 默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去。

3.处理分类型特征:编码与哑变量

3.1编码

在机器学习中,大多数算法,都只能够处理数值型数据,不能处理文字,为了让数据适应算法和库,我们必须将数据进行编码,即文字型数据转换为数值型

preprocessing.LabelEncoder:标签专用,能够将分类转换为分类数值
preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值

3.2亚变量:

避免编码完对应的数字自带数学性质,比如相互不等,有大小,并且有着可以相加相乘的联系,这样的编码可能会给算法传达一些不准确的信息,而这会影响我们的建模。
preprocessing.OneHotEncoder:独热编码,创建哑变量

4.处理连续型特征:二值化与分段

4.1二值化

有些时候我们可能希望将连续性变量变成0和1(比如年龄小于18为0表示未成年,大于18为1表示成年)
sklearn.preprocessing.Binarizer

4.2分段

将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码

参数 含义&输入
n_bins 每个特征中分箱的个数,默认5,一次会被运用到所有导入的特征
encode 编码的方式,默认“onehot”
“onehot”:做哑变量,之后返回一个稀疏矩阵,每一列是一个特征中的一个类别,含有该 类别的样本表示为1,不含的表示为0
“ordinal”:每个特征的每个箱都被编码为一个整数,返回每一列是一个特征,每个特征下含 有不同整数编码的箱的矩阵
“onehot-dense”:做哑变量,之后返回一个密集数组。
strategy 用来定义箱宽的方式,默认"quantile"
“uniform”:表示等宽分箱,即每个特征中的每个箱的最大值之间的差为 (特征.max() - 特征.min())/(n_bins)
“quantile”:表示等位分箱,即每个特征中的每个箱内的样本数量都相同
“kmeans”:表示按聚类分箱,每个箱中的值到最近的一维k均值聚类的簇心得距离都相同

参考:https://www.cnblogs.com/juanjiang/archive/2019/05/30/10948849.html

相关文章:

  • 2018-05-26
  • 2021-11-02
  • 2021-10-17
  • 2021-08-02
  • 2021-12-02
  • 2021-11-23
  • 2021-10-16
猜你喜欢
  • 2021-09-17
  • 2021-04-14
  • 2021-06-19
  • 2021-12-22
  • 2021-11-23
相关资源
相似解决方案