特征工程
目标是对于第二步所做的数据分析处理过的数据进行进一步的分析,并进行处理,对数据进行一些图表或者文字总结。
包括数据理解、数据清洗、特征构造,特征选择,类别不平衡。
-
数据理解
数据层:
定性数据:描述性质
定量数据:描述数量
描述层: 进行统计性描述
解读层
结论层 -
数据解读
目的:提高数据质量,降低算法用错误数据建模的风险
特征变换:定性变量编码、标准化、归一化
缺失值处理:少量不处理,大量删除,也可以补全(均值,中位数,众数)、高维映射(one-hot)、模型预测、最邻近补全、矩阵补全(R-SVC)
异常值处理:简单统计观看,正态分布可使用3a法则,利用模型进行离群点检测(聚类、K邻近等)
其他:删除无效列、更改dtype -
特征构造
目的:增强数据表达、添加先验知识
统计量特征
为了方便,可以使用concat函数把测试集和训练集连接一起进行特征构造,可以增加一个字段来判断测试集和训练集。
# 训练集和测试集放在一起,方便构造特征
Train_data['train']=1
Test_data['train']=0
data = pd.concat([Train_data, Test_data], ignore_index=True)
时间特征:节假日等
地理信息:分桶
非线性变换:log、平方、根号
数据分桶:等频等距分桶、best-KS分桶、卡方分桶
特征组合、特种交叉:FM模型
- 特种选择
目的:平衡预测能力和计算复杂度;降低噪声
过滤式(Filter):先过滤再学习,relief、方差选择、相关系数、卡方检验、互信息发
包裹式: 将最终要使用的学习器性能作为平衡特征子集的评价标准,LVM
嵌入式:结合过滤式和包裹式,LR+L1、决策树 - 类别不平衡
扩充数据集
尝试使用其他评价指标,AUC等
调整sita值
重采样
合成样本,SMOTE
选择其他模型,如决策树
加权少类别的样本错分代价
其他:把大类分为小类,将小类视为异常点
代码实战
- 删除异常值:
调用函数使用箱线图删除异常值
- 特征构造:
将训练集和测试集放在一起构造特征
添加使用时间特征,要注意,数据里有时间出错的格式,所以我们需要 errors=‘coerce’
添加城市信息
构造统计数据,统计总计,最大值最小值方差等数据
数据分桶
可以先输出,给树模型学习
再构造一份特征给 LR NN 之类的模型用
观察特征图,进行取log进行归一化(服从长尾分布)
对于各种特征进行处理,尽量往正态分布进行变换
对于类别进行one-hot编码
- 特征选择