机器学习之特征分析

在业界做机器学习,数据和特征是非常重要的环节,决定了机器学习的上限,而模型和算法只是在逼近这个上限。本文从特征工程、数据挖掘、开源库中的特征分析选择及来自模型的特征分析选择四个方面介绍特征分析。

特征工程

对特征工程而言,大致流程如下

  1. 特征使用方案
    • 实现优化目标需要什么数据
    • 评估数据的可用性:获得难度、覆盖率、准确率
  2. 特征获取方案
    • 如何获取特征
    • 如何存储/更新特征
  3. 特征处理
    • 特征清洗
      • 异常样本,如离群点、缺失值
      • 采样:数据不均衡、样本权重
    • 预处理
      • 单特征
      • 多特征:降维、特征选择 - Filter、Wrapper、Embedded
      • 衍生变量:对原始数据加工,生成有商业意义的数据
  4. 可能存在的问题:
    • 不属于同一量纲:特征规格不一致
    • 信息冗余
    • 定性特征量化
    • 缺失值
    • 信息利用率低
  5. 特征监控
    • 特征有效性分析 - 特征重要性、权重
    • 特征监控,监控重要特征,防止特征质量的下降影响模型效果

数据挖掘

数据挖掘角度大致流程如下

  1. 数据清理(消除噪声和删除不一致数据)
  2. 数据集成(多种数据源可以组合在一起)
  3. 数据选择(从数据库中提取分析任务相关的数据)
  4. 数据变换(通过汇总或聚焦操作,把数据变换和统一成适合挖掘的形式)
  5. 数据挖掘(使用智能方法提取数据模式)
  6. 模式评估(根据某种兴趣度度量,识别代码只是的真正有趣的模式)
  7. 知识表示(使用可视化和知识表示技术,向用户提供挖掘的知识)
    步骤 1-4 是数据预处理的不同形式,为挖掘准备数据。

相关数据挖掘技术如

  • 数据立方体:多维数据模型
  • 频繁模式挖掘 -> 关联分析(购物篮分析) -> 相关分析:使用支持度、置信度等评估

数据挖掘的一遍路线如下所示

开源库中的特征分析

目前在机器学习领域,Python 的相关开源库更丰富,此处选取了 scikit-learnfeaturetools 两个开源库。

scikit-learn

scikit-learn 是一个开源机器学习包,其中直接以 feature 命名的模块有两个 feature_selectionfeature_extraction,此处主要说明与特征分析相关的 feature_selection 模块,文件结构如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
feature_extraction
├── __init__.py
├── _hashing.pyx
├── dict_vectorizer.py
├── hashing.py
├── image.py
├── setup.py
├── stop_words.py
├── tests
│ ├── __init__.py
│ ├── test_dict_vectorizer.py
│ ├── test_feature_hasher.py
│ ├── test_image.py
│ └── test_text.py
└── text.py

该模块主要是特征选择算法的实现,包括单变量过滤选择算法,递归特征消除算法等(官方文档连接)。
主要功能函数如下

函数 函数说明
GenericUnivariateSelect([…]) Univariate feature selector with configurable strategy.
SelectPercentile([…]) Select features according to a percentile of the highest scores.
SelectKBest([score_func, k]) Select features according to the k highest scores.
SelectFpr([score_func, alpha]) Filter: Select the pvalues below alpha based on a FPR test.
SelectFdr([score_func, alpha]) Filter: Select the p-values for an estimated false discovery rate
SelectFromModel(estimator) Meta-transformer for selecting features based on importance weights.
SelectFwe([score_func, alpha]) Filter: Select the p-values corresponding to Family-wise error rate
RFE(estimator[, …]) Feature ranking with recursive feature elimination.
RFECV(estimator[, step, …]) Feature ranking with recursive feature elimination and cross-validated selection of the best number of features.
VarianceThreshold([threshold]) Feature selector that removes all low-variance features.
chi2(X, y) Compute chi-squared stats between each non-negative feature and class.
f_classif(X, y) Compute the ANOVA F-value for the provided sample.
f_regression(X, y[, center]) Univariate linear regression tests.
mutual_info_classif(X, y) Estimate mutual information for a discrete target variable.
mutual_info_regression(X, y) Estimate mutual information for a continuous target variable.

featuretools

featuretools 是一个开源自动化特征工程库,对特征基元使用聚合和转换构造新特征;深度特征合成叠加多个基元构造一个新特征;尽可能多的构造特征,利用此工具构造的新特征集上需进行特征选择或降维。

模型中的特征分析

1、LR 模型中特征对结果影响的权重系数
2、决策树中特征选择
构建决策树通常采用自上而下的方法,在每一步选择一个最好的属性来分类,最好的定义有不同的指标。
常用指标如 Gini Impurity、信息增益等。
3、XGBoost 模型重要度计算
重要度的类型有 gain、weight、cover、total_gain、total_cover。
4、其他模型
提升方法,通过改变数据权重与弱分类器权重的思想提升模型效果;
bagging 方法通过随机采样在细分领域选择特征子集构造窄领域专家的方式提升模型效果。

小结

以上是一些与特征分析相关的方法论或者常用方法,如 sklearn 的特征选择模块代码文件结构与特征工程中特征处理是对应的,大致分为移除低方差特征(即特征分布均匀无明显区分度的特征)、单变量特征选择(依据一定的指标筛选优质特征如相关性、信息增益等)、使用模型筛选优质特征(在模型中该特征有更好的表现效果)、特征融合(即多个特征相关交叉融合等)等四个方向去做特征的加工。

坚持原创技术分享,您的支持将鼓励我继续创作!