数据处理

数据处理

刘建平博客 https://www.cnblogs.com/pinard/ 强烈推荐

  1. 特征选择

尽量不错过一个可能有用的特征,但是也不滥用太多的特征。

1.1 筛选-合适的特征数据

1) 过滤

按照特征的指标,如发散性/相关性,对各个特征评分,设定阈值,选择合适特征。

eg. 方差,相关系数,卡方检验,互信息

2) 包装

根据目标函数,预测效果评分,每次选择部分特征,或者排除部分特征。

eg. 递归消除特征法(RFE), 使用机器学习模型进行多轮训练,每轮训练后,消除若干权值系数的对应特征,再基于新的特征集进行下一轮训练。

3) 嵌入

类似过滤法,但是通过机器学习训练来确定特征的优劣,先用算法训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。

eg. L1/L2正则化, 基学习器LR,选择特征系数较大的特征。正则化惩罚项越大,模型系数越小, 一部分特征系数会先变成0,筛掉。或使用决策树/GBDT

1.2 寻找-高级数据特征

寻找高级特征是模型优化的必要步骤之一。第一次建模时,可以先不寻找高级特征,得到基准模型后,再寻找高级特征进行优化。聚类的时候高级特征尽量少一点,分类回归的时候高级特征适度的多一点。

常用的方法有:

   特征加和:假设希望根据每日销售额得到一周销售额的特征。可以将最近7天的销售额相加。
   特征之差:假设已有每周销售额及每月销售额,可以求一周前一月内的销售额。
   特征乘积:假设已有商品价格和商品销量,可以得到销售额。
   特征除商:假设已有每个用户的销售额和购买的商品件数,可得到该用户平均每件商品的销售额。

 

  1. 特征表达

1) 缺失值处理(sklearn的preprocessing.Imputer)

连续值:平均值/中位数

离散值:高频率类别值

2) 特殊的特征处理

很多,如时间->差值(连续)/分段(离散)/权重,地理位置->经纬(连续)/城市区(离散)

3) 离散特征的连续化处理

one-hot;

特征嵌入embedding,类似降维 tf.nn.embedding_lookup

4) 离散特征的离散化处理

one-hot, dummy coding

5) 连续特征的离散化处理

根据阈值分组;

GBDT转化为one-hot码,GradientBoostingClassifier

 

  1. 特征预处理

3.1归一化

z-score:  (x-mean)/std,均值0,方差1,最常见

max-min: (x-min)(b-a)/(max-min)+a ->[a,b],离差标准化

L1/L2范数:x->/||x->||2x-> 每个样本特征向量, ||x->||2对应的的L2范数

3.2异常样本清洗

1)聚类

KMeans聚类将训练样本分成若干个簇,如果某一个簇里的样本数很少,且簇质心和其他所有的簇都很远,那么这个簇的样本极有可能异常。

2)异常点检测

使用iForest或者one class SVM,异常点检测的机器学习算法来过滤异常点。

3.3数据不平衡

1)权重

class weight: 给类加权重,sample weight: 给样本加权重,某类样本少则权重高

2)采样

样本多下采样,样本少上采样,改变了训练集分布,可能导致泛化能力差。

SMOTE算法,人工合成来生成少类别的样本。随机找出几个该类别的样本,再找出最靠近这些样本的若干个该类别样本,组成一个候选合成集合,然后在这个集合中不停的选择距离较近的两个样本,在这两个样本之间,比如中点,构造一个新的该类别样本。imbalance-learn的SMOTEENN

 

 

你可能感兴趣的:(数据处理)