您现在的位置是:首页 >技术交流 >使用 sklearn 的特征工程网站首页技术交流
使用 sklearn 的特征工程
简介使用 sklearn 的特征工程
特征工程
特征工程的处理流程为:
- 去掉无用特征、去掉冗余特征(如共线性特征)
- 利用存在的特征、转换特征、内容中的特征以及其他数据源生成新特征
- 对特征进行转换:数值化、类别转换、归一化
- 对特征进行处理,以符合模型使用:异常值、最大值、最小值、缺失值
数据预处理
数据采集:需要明确,哪些数据对最后的预测结果有帮助、是否需要采集这一类数据、在线上实时计算时数据获取是否快捷;
数据清洗:去除“脏”数据:
- 简单属性判定:不符合常理的,例如身高3米多的人;
- 组合或统计属性判定:如号称在美国却一直都是国内的新闻阅读用户
- 补齐可对应的缺省值:将不可信的样本丢掉,不用缺省值极多的字段
数据采样:数据经过采集、清洗过后,正负样本往往不均衡,故要进行数据采样。采样有随机采样和分层采样。随机采样存在隐患,往往根据特征使用分层采样。正负样本不均衡的处理方法:
- 正样本 > 负样本,且样本量都特别大的情况,采用下采样的方法,即随机删除正样本中的数据,使得正负样本量相等;
- 正样本 > 负样本,且样本量不大的情况,可以用以下方法采集更多的数据:上采样(如图像识别中的镜像和旋转、SMOTE、随机复制)、修改损失函数设置样本权重
特征处理
特征处理 | 类 | 功能 | 说明 |
---|---|---|---|
标准化 | StandardScaler | 无量纲化 | 基于特征矩阵的列,将特征值转换为服从标准正态分布的z值 |
区间缩放 | MinMaxScaler | 无量纲化 | 基于特征矩阵的列的最大最小值,将特征转换到[0, 1]区间 |
归一化 | Normalizer | 归一化 | 基于特征矩阵的行,将样本向量转换为单位向量 |
定量特征二值化 | Binarizer | 定量特征二值化 | 基于给定阈值,将定量特征按照阈值划分为 0/1 二值变量 |
定性特征哑变量 | OneHotEncoder | 定性特征哑变量 | 将n种处理的定性特征编码为n-1个二值变量 |
缺失值处理 | Imputer | 缺失值处理 | 缺失值可填充为均值、中位数等 |
多项式数据转换 | PolynomialFeatures | 多项式数据转换 | 多项式数据转换 |
自定义单元数据转换 | FunctionTransformer | 自定义单元数据转换 | 使用单变量函数转换数据,例如进行开方变换、对数变量、指数变换等 |
归一化与标准化的适用场景:
- 如果对输出结果范围有要求,则使用归一化;
- 如果数据较为稳定,不存在极端的最大值或最小值,则用归一化;
- 如果数据存在异常值和较多噪声,则使用标准化,这样可以通过中心化简介避免异常值和极端值的影响;
- SVM、KNN、PCA 等模型都必须进行归一化或标准化操作。
特征降维
特征选择
特征选择的方法:
- 过滤法(Filter):按照发散性或者相关性对各个特征进行评分(例如相关系数、卡方检验、信息增益、互信息等),通过设定阈值或者待选择特征数来选择特征;
- 包装法(Wrapper):根据目标函数(通常是预测效果评分,如 AUC、MSE)每次选择若干特征,或排除若干特征。可以通过完全搜索、启发搜索、随即搜索(如遗传算法 GA、模拟退火算法 SA)实现;
- 嵌入法(Embeded):使用机器学习的某些算法和模型进行训练,得到各个特征的权值系数,并根据系数从大到小选择特征。类似于过滤法,区别在于得分是通过训练来确定的,如正则化、决策树、深度学习等。
类 | 所属方法 | 描述 |
---|---|---|
VarianceThreashHold | Filter | 方差选择法,根据阈值选择方差大于阈值的特征 |
SelectKBest | Filter | 将可选相关系数、卡方检验或最大信息系数作为得分计算的方法 |
RFE | Wrapper | 递归消除特征法,使用一个基模型进行多轮训练 |
SelectFromModel | Embeded | 基于模型的特征选择法,可以选择带惩罚项的基模型,也可以选择树模型 |
线性降维
线性降维常用方法:主成分分析法和线性判别分析法
主成分分析法(PCA):无监督,通过某种线性投影,将高位的数据映射到低维空间中,并期望在所投影的维度上数据方差最大,即保留较多的原数据点特性的效果。sklearn 类为 sklearn.decomposition.PCA,其参数 n_components 大于一时代表目标维度,小于一时代表保留的信息数据百分比。
线性判别分析法(LDA):也成为 Fisher 线性判别(FLD),有监督,相比于 PCA,我们希望映射过后:① 同类的数据点尽可能地接近;② 不同类的数据点尽可能地分开;sklearn 类为 sklearn.disciminant_analysis.LinearDiscriminantAnalysis,其参数 n_components 代表目标维度。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。