实验六
特征工程和特征选择
特征提取
在实践中,很少有数据是以矩阵形式保存、可以直接使用的,这就是为什么需要对数据进行特征提取。
文本数据
- 对英文文本进行 切分词(tokenzie) 操作,
- 最简单的情形下,一个单元就是一个单词(中文分词相对麻烦,但有另外的分词器可以完成,例如 Jieba 库);
- 直接按单词切分可能会损失一些信息,如词组、短语和俚语;
- 对单词进行正则化(也称 词形规范化 ,有 词干提取 stemming 和 词形还原 lemmatization 两种形式),
- 对单词序列进行向量化表示( 词袋 ),以稀疏词频数组形式表示。
- 词袋模型会让词序信息丢失
- 可以使用 N-Gram 模型解决
- 语料库中的专有名词具有更高的权重,区分文档效果会更好,可以借助 词频-逆向文本频率(TF-IDF) 模型解决
- 除了上述传统模型,还有 Word2Vec 、 GloVe 和 Fasttext 模型。
- Word2Vec 是词嵌入算法的一个特殊情形
- Word2Vec 可以向量化超高维空间的单词,还能比较它们的语义相似度
- Word2Vec 模型并不理解单词的意思
图像数据
- 图像预处理有流行的预训练网络
- skimage 和 SimpleCV 能够实现检测角点、区域边界、色彩分布统计等底层特征提取功能
- 现有的图像分析问题一般直接使用 卷积神经网络(CNN) 模型,Keras for Tensorflow 中的 ResNet50 预训练模型可以实现图像分类
- 英文 OCR 识别可以使用 pytesseract 库(Linux 上需要配合 tesseract-ocr 程序和 libtesseract-dev 动态链接库)
- Jupyter Notebook 不具备直接打开 Pillow 图片的能力,需要借助
matplotlib.pyplot.imshow()
进行显示
地理空间数据
- 地理空间数据常常以地址或坐标(经纬度)的形式保存
- 根据任务需求的不同,可能需要用到两种互逆的操作:地理编码(由地址重建坐标点)和逆地理编码(由坐标点重建地址)
- 可以借助外部 API (Google Maps 或 OpenStreetMaps)实现转换
- GeoPy 是地理空间处理的通用封装
- 大量数据考虑使用离线版 OSM ,少量或微量数据可以考虑 reverse_geocoder
- GPS 坐标噪声、特定地区和坐标加密(国际 WGS84 、国标 GCJ02 和百度 BD09)
日期和时间数据
对一些基于距离的机器学习算法(KNN、SVM 或 K-Means),将时间投影为圆弧长能够保留 时间差 信息,对它们处理时间数据很有帮助。
Web 数据
- User Agent 包含了用户身份信息,可以用于提取操作系统、设备信息、区分浏览器
- PyPI 的 user_agents 库可以用于解析 UA
- 可以从 Request Headers 中获取用户来源(refferer)、常用语言(Accept-Language)等元信息
- IP 地址可以与地理信息(GeoIP 数据库)、ISP、连接方式相关联
- 网络代理和数据库过期可能引入噪声
- 可以通过其他手段辨认 IP 来源(直连或代理)
- GeoIP 与 Accept-Language 可以作为用户定位的双因子认证
特征转换
决策树及其变体(随机森林、梯度提升)变得更加流行,因为它们在异常分布上的鲁棒性很好。
标准化和分布变换
-
标准缩放(Standard Scaling),又称 Z 值标准化(Z-score normalization),常用于距离计算:
-
极小极大缩放(MinMax Scaling),常用于可视化:
-
对数正态分布(Logarithmic Standard Scaling),适用于描述薪水、安保费用、城区人口、网络文章评论等信息,可以被应用于任何右重尾的分布
-
Box-Cox 转换,对数转换是其一个特例
-
Yeo-Johnson 转换(将应用范围扩展至负数)
缺失值补全
pandas.DataFrame.fillna
和sklearn.preprocessing.Imputer
都可以用于缺失值处理- 缺失值处理方式:
- 将缺失值编码为一个单独的空值,比如,类别变量使用 N/A 值;
- 使用该特征最可能的值(数值变量使用均值或中位数,类别变量使用最常见的值);
- 或者,反其道而行之,使用某个极端值(比较适合决策树,因为这样使得决策树模型可以在缺失值和未缺失值间分割);
- 对于有序数据(例如时序数据),使用相邻值。
- 使用固定值填充
- 数据预处理比创建模型花去的时间更多,因此简单的使用固定值可能会埋下隐患,损害模型
特征选择
- 数据越多,计算复杂度越高
- 部分算法会将噪声(不含信息量的特征)视作信号,导致过拟合
网格搜索
- 穷尽特征选取(Exhaustive Feature Selection):在特征子集上训练模型,储存结果,在不同子集上重复这一过程,比较模型的质量以识别最佳特征集
- 循序特征选取(Sequential Feature Selection):固定一个较小的数字 N,迭代所有 N 特征的组合,选定最佳组合,接着迭代 N+1 特征组合,其中,之前的最佳组合固定不变,仅仅考虑一个新特征。重复这些迭代过程,直到达到特征最大值,或者直到模型的表现停止明显的提升
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 纱雾の闺房!