特征工程相关:数据处理,模型训练问题集锦

来源:互联网 发布:网络诈骗怎么报警呢 编辑:程序博客网 时间:2024/06/06 10:57

本文是长期学习总结笔记,文中图片摘自寒小阳老师上课讲义。

这里写图片描述

数据格式化

数据量不大,可以存文本,数据库
数据量大,放集群hadoop上:hive表,hdfs文件

数据清洗

这里写图片描述

数据缺省

  1. 如果缺值的样本占总数比例极高,我们可能就直接舍弃了,作为特征加入的话,可能反倒带入noise,影响最后的结果了
  2. 如果缺值的样本适中,而该属性非连续值特征属性(比如说类目属性),那就把NaN作为一个新类别,加到类别特征中
  3. 如果缺值的样本适中,而该属性为连续值特征属性,有时候我们会考虑给定一个step(比如这里的age,我们可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把NaN作为一个type加到属性类目中。
  4. 有些情况下,缺失的值个数并不是特别多,那我们也可以试着根据已有的值,拟合一下数据,补充上。
    某一特征列缺省值少:填充
    某一特征列缺省值多:去掉该特征列
    某一特征列缺省值中等:类别型特征列,当成一类

正负样本不均衡

树模型对样本不均衡问题敏感度比LR模型(GD)的敏感度低。

1.)欠采样:当数据量比较大时,对训练集中较多样本抽样,即去掉一部分该类样本,采样原则——分层抽样,随机抽样
选用Random Forest策略训练模型
可视化考察其分布(e.g. 金融风控比赛)

2.)过采样:当数据量不大时,增加一些训练集中较少的样本,使正负样本数相当
k近邻查找近邻点,进行插值

3.)阈值移动:不改变样本数量,对预测结果类别判定的阈值设定加入缩放因子(修改损失函数,破坏损失函数的凹凸性)
e.g.:m+表示正例数目,m表示反例数目,根据模型的某样本的整理可能性为y,则预测类别时需要考虑的是y1y/m+m=y1ymm+和1的关系,1表示正负样本数目相当时的阈值

数据与特征处理

数值型/类别型/文本型/时间型/统计型/组合型特征处理

数值型

幅度调整、归一化normalization(sklearn里MinMaxScaler,StandardScaler)
统计值max、min、mean、std
离散化:等距、等频,连续值one-hot成向量(pd.cut)
Hash分桶:K-means聚类分组
试试 数值型 => 类别型

类别型

one-hot编码(get-dummies)
Hash技巧:文本——>bag of words——>Hash技巧分桶向量降维
这里写图片描述

时间型

既可以看做连续值, 也可以看做离散值
这里写图片描述

文本型

文本数据预处理后, 去掉停用词, 剩下的词组成的list,在词库中的映射稀疏向量。
bag-of-word
n-gram
TF-IDF:
这里写图片描述
word2vec:映射到固定维度向量后,原空间向量的关系被保留

组合型

组合特征下对应的变量统计值histogram(分布状况),用笛卡尔积组织新组合特征,获得两个特征维度的交叉关系(在组合特征上出现是1,否则是0,使用组合特征会导致组合特征维度暴增,可以先对用户或者商品聚类,再进行组合)
这里写图片描述
用GBDT产出特征组合路径:GBDT的主树一条路径上包含的特征
组合特征和原始特征一起放进LR训练

这里写图片描述
这里写图片描述

特征选择的方式

原因:冗余——部分特征的相关度太高了, 消耗计算性能。噪声——部分特征是对预测结果有负影响
特征选择 VS 降维:前者只踢掉原本特征里和结果预测关系不大的, 后者做特征的计算组合构成新特征。SVD或者PCA确实也能解决一定的高维度问题

过滤型Filter评估每个特征和结果值的相关程度,排序留下top相关的n个特征(Pearson相关系数、互信息、距离相关度等去判定,缺点是没有考虑特征之间的关联作用,比如特征1和特征6分别对结果作用不大,但是特征1和特征6关联在一起后的特征对结果作用大)(sklearn里SelectKBest,SelectPercentile)

包裹型Wrapper把特征选择看做一个特征子集搜索问题,递归地删除特征
这里写图片描述
(sklearn里RFE)

嵌入型Embedded:根据模型分析特征的重要性,L1正则化方式做特征选择
(维度较高时使用)

模型参数选择

网格搜索,交叉验证(sklearn里GridSearchCV)

过拟合v.s.欠拟合

这里写图片描述

解决过拟合方法

1.增大训练数据集
2.early stopping:记录验证集的accuracy,连续k(自己设定)个Epoch都没提升
3.Dropout:每次训练随机关闭若干神经元(不参数本次迭代训练)
4.正则化L1,L2

解决欠拟合方法

1.找更多特征
2.减小正则化系数

线性模型的权重分析

根据特征系数分许特征重要性

Bad-case分析

这里写图片描述

模型融合

Bagging:RF
这里写图片描述

Boosting
Adaboost(分类树,残差分类器,针对分错的有问题的那部分样本进行训练)
这里写图片描述
这里写图片描述

GBDT(回归树,对差值用回归树拟合)
这里写图片描述

原创粉丝点击