特征工程
1. 特征的类别
- 1. 数值型特征------如:长度、宽度
- 2. 有序型特征------如:等级(A,B,C),级别(低、中、高)
- 3. 类别型特征------如:性别(男,女)
2. 数值归一化
- 1. 数值归一化优势: (1)可以减少计算量 (2)可以去量纲化
- 2. 有两种归一化方法 范围归一化 和 标准归一化
- 3. 范围归一化: 将所有特征数据按比例缩放到0-1区间(或者-1到1)
- 模块导入: sklearn.preprocessing.MinMaxScaler
- 计算公式: X_normal = (X - X_min) / (X_max - X_min)
- 4. 标准归一化: 将所有特征数据缩放到平均值为0,方差为1
模块导入: sklearn.preprocessing.StandardScaler
计算公式: Z = (X - 平均值) / 标准差
3. 有序型特征预处理
- 将数据转换成有序数值, 如: A -- 1, B -- 2, C -- 3
- 模块导入: sklearn.preprocessing.LabelEncoder
4. 类别型特征预处理
- 独热编码(One-Hot Encoding), 如: 男 -- 0, 女 -- 1
- 模块导入: sklearn.preprocessing.OneHotEncoder
- 注意:独热编码时, 要先LabelEncoder(), 再OneHotEncoder(), 如: one_hot_enc.fit_transform(label_enc1.fit_transform(X_train))
5. sklearn.preprocessing常用的方法
- MinMaxScaler
- StandardScaler
- LabelEncoder
- OneHotEncoder
6. 特征预处理并没有特定方法和步骤。 实际中处理数据的方式往往需要根据业务需求和特定的评价指标来选择
7. 连续型特征和离散型特征?连续型特征转离散化特征?
在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,
这样做的优势有以下几点:0. 离散特征的增加和减少都很容易,易于模型的快速迭代;
- 1. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
- 2. 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
- 3. 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
- 4. 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
- 5. 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
- 6. 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
- 李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。