数据预处理和特征工程
数据不给力,再高级的算法都没用
数据挖掘的五大流程
1.获取数据
2.数据预处理
- 从数据中检测纠正或删除不准确或不适用于模型的记录的过程,让数据适应模型,匹配模型的需求。
- 会处理数据类型不同,数据偏态数据异常、缺失、噪点、量纲不一、重复等等
3.特征工程
- 将原始数据转换为更能代表预测模型的潜在问题的特征的过程。可以通过挑选最相关的特征,提取特征以及创造特征来实现。
- 可能面对的问题:特征之间有相关性,特征和标签无关,特征太多或太小,或根本就无法表现出应有的数据现象或无法展示数据的真实面貌
- 目的:降低计算成本,提升模型上线
4.建模,测试模型并预测出结果
5.上线,验证模型效果
数据预处理
1.数据无量纲化
将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。
1.1.数据归一化
把所有数据收敛到[0,1]之间,归一化后的数据服从正态分布
在sklearn中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数,feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。
1.2.数据标准化
将数据x按均值u中心化后,再按照标准差o放缩,数据就会服从均值为0,方差为1的正态分布。
在sklearn中,我们使用preprocessing.StandardScaler来实现这个功能
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