特征工程和特征选择

特征提取

在实践中,很少有数据是以矩阵形式保存、可以直接使用的,这就是为什么需要对数据进行特征提取。

文本数据

  1. 对英文文本进行 切分词(tokenzie) 操作,
    • 最简单的情形下,一个单元就是一个单词(中文分词相对麻烦,但有另外的分词器可以完成,例如 Jieba 库);
    • 直接按单词切分可能会损失一些信息,如词组、短语和俚语;
  2. 对单词进行正则化(也称 词形规范化 ,有 词干提取 stemming词形还原 lemmatization 两种形式),
  3. 对单词序列进行向量化表示( 词袋 ),以稀疏词频数组形式表示。
    • 词袋模型会让词序信息丢失
    • 可以使用 N-Gram 模型解决
    • 语料库中的专有名词具有更高的权重,区分文档效果会更好,可以借助 词频-逆向文本频率(TF-IDF) 模型解决
  4. 除了上述传统模型,还有 Word2VecGloVeFasttext 模型。
    • Word2Vec 是词嵌入算法的一个特殊情形
    • Word2Vec 可以向量化超高维空间的单词,还能比较它们的语义相似度
    • Word2Vec 模型并不理解单词的意思

图像数据

  • 图像预处理有流行的预训练网络
  • skimageSimpleCV 能够实现检测角点、区域边界、色彩分布统计等底层特征提取功能
  • 现有的图像分析问题一般直接使用 卷积神经网络(CNN) 模型,Keras for Tensorflow 中的 ResNet50 预训练模型可以实现图像分类
  • 英文 OCR 识别可以使用 pytesseract 库(Linux 上需要配合 tesseract-ocr 程序和 libtesseract-dev 动态链接库)
  • Jupyter Notebook 不具备直接打开 Pillow 图片的能力,需要借助 matplotlib.pyplot.imshow() 进行显示

地理空间数据

  • 地理空间数据常常以地址或坐标(经纬度)的形式保存
  • 根据任务需求的不同,可能需要用到两种互逆的操作:地理编码(由地址重建坐标点)和逆地理编码(由坐标点重建地址)
    • 可以借助外部 API (Google MapsOpenStreetMaps)实现转换
    • GeoPy 是地理空间处理的通用封装
    • 大量数据考虑使用离线版 OSM ,少量或微量数据可以考虑 reverse_geocoder
  • GPS 坐标噪声、特定地区和坐标加密(国际 WGS84 、国标 GCJ02 和百度 BD09

日期和时间数据

对一些基于距离的机器学习算法(KNNSVMK-Means),将时间投影为圆弧长能够保留 时间差 信息,对它们处理时间数据很有帮助。

Web 数据

  • User Agent 包含了用户身份信息,可以用于提取操作系统、设备信息、区分浏览器
  • PyPIuser_agents 库可以用于解析 UA
  • 可以从 Request Headers 中获取用户来源(refferer)、常用语言(Accept-Language)等元信息
  • IP 地址可以与地理信息(GeoIP 数据库)、ISP、连接方式相关联
    • 网络代理和数据库过期可能引入噪声
    • 可以通过其他手段辨认 IP 来源(直连或代理)
    • GeoIPAccept-Language 可以作为用户定位的双因子认证

特征转换

决策树及其变体(随机森林、梯度提升)变得更加流行,因为它们在异常分布上的鲁棒性很好。

标准化和分布变换

  • 标准缩放(Standard Scaling),又称 Z 值标准化(Z-score normalization),常用于距离计算:

    z=xμσ
  • 极小极大缩放(MinMax Scaling),常用于可视化:

    Xnorm=XXminXmaxXmin
  • 对数正态分布(Logarithmic Standard Scaling),适用于描述薪水、安保费用、城区人口、网络文章评论等信息,可以被应用于任何右重尾的分布

  • Box-Cox 转换,对数转换是其一个特例

  • Yeo-Johnson 转换(将应用范围扩展至负数)

缺失值补全

  • pandas.DataFrame.fillnasklearn.preprocessing.Imputer 都可以用于缺失值处理
  • 缺失值处理方式:
    • 将缺失值编码为一个单独的空值,比如,类别变量使用 N/A 值;
    • 使用该特征最可能的值(数值变量使用均值或中位数,类别变量使用最常见的值);
    • 或者,反其道而行之,使用某个极端值(比较适合决策树,因为这样使得决策树模型可以在缺失值和未缺失值间分割);
    • 对于有序数据(例如时序数据),使用相邻值。
    • 使用固定值填充
  • 数据预处理比创建模型花去的时间更多,因此简单的使用固定值可能会埋下隐患,损害模型

特征选择

  • 数据越多,计算复杂度越高
  • 部分算法会将噪声(不含信息量的特征)视作信号,导致过拟合

网格搜索

  • 穷尽特征选取(Exhaustive Feature Selection):在特征子集上训练模型,储存结果,在不同子集上重复这一过程,比较模型的质量以识别最佳特征集
  • 循序特征选取(Sequential Feature Selection):固定一个较小的数字 N,迭代所有 N 特征的组合,选定最佳组合,接着迭代 N+1 特征组合,其中,之前的最佳组合固定不变,仅仅考虑一个新特征。重复这些迭代过程,直到达到特征最大值,或者直到模型的表现停止明显的提升