参考资料:
处理数值型特征
如何处理类别型特征?
特征工程:时间特征处理方式
特征处理之统计特征
AI基础:特征工程-文本特征处理
一、特征与目标的概念
特征:作为判断条件的一组输入变量,是做出判断的依据
目标:判断和预测的目标,模型的输出变量,是特征所产生的结果
- 特征( feature):数据中抽取出来的对结果预测有用的信息。
- 特征的个数就是数据的观测维度
- 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
- 特征工程一般包括特征清洗(采样、清洗异常样本),特征处理和特征选择
- 特征按照不同的数据类型分类,有不同的特征处理方法
- 数值型
- 类别型
- 时间型
- 统计型
- 文本型
二、数值型特征处理
2.1 归一化
-
特征与特征之间应该是平等的,区别应该体现在特征内部
-
例如房屋价格和住房面积的幅度是不同的,房屋价格可能在30000001500000(万)之间,而住房面积在40300(平方米)之间,那么明明是平等的两个特征,输入到相同的模型中后由于本身的幅值不同导致产生的效果不同,这是不合理的
-
-
2.2 离散化
将原始连续值切断,转换为离散值
- 让座问题:假设我们要训练一个模型判断在公交车上应不应该给一个人让座,按照常理,应该是给年龄很大和年岭很小的人让座
- 对于以上让座问题中的年龄特征,对于一些模型,假设模型为y=θx,输入的x (年龄)对于最后的贡献是正/负相关的,即x越大越应该让座,但很明显让座问题中,年龄和是否让座不是严格的正相关或者负相关,这样只能兼顾年龄大的人,无法兼顾年大的人和年龄小的人
- 对于让座问题,我们可以使用阈值将年龄进行分段,将一个age特征分为多个特征, 将连续值离散化
- 在电商中,每个人对于价格的喜好程度不同,但它不一定是严格的正相关或负相关,某些人可能就喜欢某一价格段内的商品
2.3.1 离散化的两种方式
- 等步长
- 简单但并不一定有效
- 等频
- min -> 25% -> 75% -> max
2.3.2 两种方式对比
- 等频的离散化方法很精准,但需要每次都对数据分布进行一遍从新计算,因为昨天用户 在淘宝上买东西的价格分布和今天不一定相同,因此昨天做等频的切分点可能并不适用, 而线上最需要避免的就是不固定,需要现场计算,所以昨天训练出的模型今天不一定能 使用
- 等频不固定,但很精准,等步长是固定的,非常简单,因此两者在工业上都有应用
2.3 特征缩放
用sklearn的MinMaxScaler来缩放一个特征数组,将一个数值型特征的值缩放到两个特定的值之间。
import numpy as np
from sklearn import preprocessing
#创建特征
feature = np.array([[-500.5],
[-100.1],
[0],
[100.1],
[900.9]])
#创建缩放器
minmax_scale = preprocessing.MinMaxScaler(feature_range=(0,1))
#缩放特征的值
scaled_feature = minmax_scale.fit_transform(feature)
#查看特征
print(scaled_feature)
array([[0. ],
[0.28571429],
[0.35714286],
[0.42857143],
[1. ]])
2.4 特征标准化
对一个特征进行转换,使其平均值为0,标准差为1.
import numpy as np
from sklearn import preprocessing
#创建特征
x = np.array([[-1000.1],
[-200.2],
[500.5],
[600.6],
[9000.9]])
#创建缩放器
scaler = preprocessing.StandardScaler()
#转换特征
standardized