特征工程常用方法总结
类别型特征
Onehot encoding
-
长度为K的数组上的一个K编码。
-
基本方法:与大多数线性算法一起使用
-
删除第一列可避免共线性
-
稀疏格式对内存友好
-
大多数当前实现都不能优雅地处理缺失的、看不见的变量
例子:
Hash encoding
-
“OneHot-encoding”是否具有固定长度的数组
-
避免极其稀疏的数据
-
可能会引入碰撞
-
可以重复使用不同的散列函数和包结果,以获得精确的小凹凸
-
碰撞通常会降低结果,但可能会改善结果。
-
优雅地处理新变量
例子:
Label encoding
-
为每个分类变量提供唯一的数字ID
-
适用于非线性基于树的算法
-
不增加维度
-
随机化cat_var - > num_id映射并重新训练平均值,以获得精确度较小的凹凸。
例子:
Count encoding
-
将分类变量替换为训练集中的计数
-
对线性和非线性算法都很有用
-
可以对异常值敏感
-
可以添加对数转换,适用于计数
-
用“1”替换看不见的变量
-
可能会发生冲突:相同的编码,不同的变量
例子:
LabelCount encoding
-
按训练集中的计数对分类变量进行排名
-
对线性和非线性算法都很有用
-
对异常值不敏感
-
不会对不同的变量赋予相同的编码
-
两全其美
例子:
Target encoding
-
通过目标比率(二进制分类或回归)对分类变量进行编码
-
小心避免过拟合
-
stacking形式:输出平均目标的单变量模型
-
以交叉验证方式进行
-
添加平滑以避免将变量编码设置为0。
-
添加随机噪音以对抗过拟合
-
正确应用时:线性和非线性的最佳编码
例子:
Category Embedding
-
使用神经网络从分类变量创建密集嵌入。
-
将函数逼近问题中的分类变量映射到欧几里德空间
-
更快的模型培训。
-
减少内存开销。
-
可以提供比one-hot编码更好的准确度。
例子:
NaN encoding
-
为NaN值提供显式编码而不是忽略
-
NaN值可以保存信息
-
小心避免过拟合
-
仅在训练和测试集中的NaN值由相同的情况引起时,或者在本地验证证明其携带信号时使用
例子:
Polynomial encoding
-
编码分类变量之间的交互
-
没有交互的线性算法无法解决XOR问题
-
多项式内核*可以*解决异或
-
爆炸特征空间:使用FS,散列和/或VW
例子:
Expansion encoding
-
从单个变量创建多个分类变量
-
某些高基数功能(如用户代理)在其中包含更多信息:
-
is_mobile?
-
is_latest_version?
-
Operation_system
-
Browser_build
例子:
Consolidation encoding
-
将不同的分类变量映射到同一个变量
-
拼写错误,略有不同的职位描述,全名与缩写
-
真实数据很乱,free文本尤其如此
例子:
数值型特征
-
可以更容易地输入算法
-
可以构成浮点数、计数、数字
-
更容易估算丢失的数据
Rounding
-
取整值变量
-
有损压缩形式:保留数据的最重要特征。
-
有时太精确只是噪音
-
取整变量可视为分类变量
-
可以在舍入之前应用对数变换
例子:
Binning
-
将数值变量放入bin中并使用bin-ID进行编码
-
可以通过分位数,均匀地设置分箱,或使用模型来查找最佳分箱
-
可以使用训练集中看到的范围之外的变量优雅地工作
例子:
Scaling
-
将数值变量缩放到一定范围内
-
Standard (Z) Scaling
-
MinMax Scaling
-
Root scaling
-
Log scaling
Imputation
-
估算缺失的变量
-
硬编码可与插补相结合
-
均值:非常基本
-
中位数:对异常值更强大
-
忽略:只是推迟问题
-
使用模型:可以暴露算法偏差
例子:
Interaction
-
具体编码数值变量之间的相互作用
-
尝试:减少,增加,乘法,分裂
-
使用:通过统计测试选择特征,或训练模型特征重要性
-
忽略:人类的直觉; 奇怪的互动可以带来显著的改善!
Non-linear encoding for linear algo’s
-
硬编码非线性以改进线性算法
-
多项式内核
-
叶编码(随机森林嵌入)
-
遗传算法
-
局部线性嵌入,光谱嵌入,t-SNE
Row statistics
-
创建一行数据的统计信息
-
NaN的数量
-
0的数量
-
负值的数量
-
平均值,最大值,最小值,偏差等
Temporal Variables
-
时间变量,如日期,需要更好的本地验证方案(如回测)
-
这里容易犯错误
-
大量改进的机会
Projecting to a circle
-
将单个要素(如day_of_week)转换为圆上的两个坐标
-
确保max和min之间的距离与min和min +1相同。
-
用于day_of_week,day_of_month,hour_of_day等。
Trendlines
-
不是编码:总支出,编码如下:上周花费,上个月花费,去年花费。
-
给出算法的趋势:两个支出相同的客户可能会有截然不同的行为,一个客户可能开始花费更多,而另一个客户开始减少支出。
Closeness to major events
-
硬编码分类特征如:date_3_days_before_holidays:1
-
尝试:国定假日,重大体育赛事,周末,每月第一个星期六等。
-
这些因素可能对支出行为产生重大影响。
Spatial Variables
-
空间变量是编码空间位置的变量
-
示例包括:GPS坐标,城市,国家/地区
Categorizing location
-
Kriging
-
K-means聚类
-
原始纬度经度
-
将城市转换为纬度经度
-
将邮政编码添加到街道名称
Closeness to hubs
-
找到位置与主要枢纽之间的紧密程度
-
小城镇继承了附近大城市的一些文化/背景
-
电话位置可以映射到附近的企业和超市
Spatial fraudulent behavior
-
位置事件数据可以指示可疑行为
-
不可能的旅行速度:不同国家的多个同步交易
-
在不同的城镇消费,而不是在家或运送地址
-
永远不要在同一个地方消费
Exploration
-
数据探索可以找到数据完整问题、异常值、噪声、特征工程思想、特征清理思路。
-
可以使用:控制台,笔记本电脑,pandas
-
尝试简单的统计数据:最小值,最大值
-
合并目标,找到信号之间的相关性。
Iteration/Debugging
-
特征工程是一个迭代过程:使您的pipelines适合快速迭代。
-
使用子线性调试:输出有关过程的中间信息,进行虚假记录。
-
使用允许快速实验的工具
-
更多的想法会失败,而不是想法会起作用
Label Engineering
-
可以将标签/目标/因变量视为数据的一个特征,反之亦然。
-
对数变换:y - > log(y + 1)| exp(y_pred) - 1
-
方形变换
-
Box-Cox变换
-
创建分数,在回归中转换二进制目标。
-
训练回归器以预测测试集中不可用的特征。
自然语言处理
-
可以使用来自分类特征的相同想法。
-
深度学习(自动特征工程)越来越多地进入这一领域,但具有精心设计的特征的浅层学习仍具有竞争力。
-
数据中的高稀疏性向您介绍“维度的诅咒”
-
特征工程的许多机会
Cleaning
-
Lowercasing:使token独立于大写:“I work at NASA” -> “i work at nasa”.
-
Unidecode:将重音符号转换为ascii-对应词:“MemóriasPóstumasdeBrásCubas” - >“Memorias Postumas de Bras Cubas”
-
删除非字母数字:删除不在[a-z] [A-Z] [0-9]中的任何内容来清除文本。“Breaking! Amsterdam (2009)” -> “Breaking Amsterdam 2009”
-
修复:修复编码问题或修剪内部token空格。 “Casa Café” - >“CasaCafé”
Tokenizing
-
编码标点符号:硬编码“!”和“?”作为标记。
-
Tokenize:在单词标记中填写句子。
-
N-Grams:将连续的令牌编码为token:“I like the Beatles” -> [“I like”, “like the”, “the Beatles”]
-
Skip-gram:编码连续的令牌,但跳过一些:“I like the Beatles” -> [“I the”, “like Beatles”]
-
Char-gram:与N-gram相同,但字符级别:“Beatles” - > [“Bea”,“eat”,“atl”,“tle”,“les”]
-
词缀:与char-gram相同,但仅限于后缀和前缀
Removing
-
停用词:删除停用词列表中显示的单词/标记。
-
稀有词语:删除仅在训练集中出现几次的单词。
-
常用词:删除可能不在禁用词列表中的极其常见的词。
Roots
-
拼写纠正:将token更改为正确的拼写。
-
Chop:只取一个单词的前n(8)个字符。
-
词干:将词/标记减少到其根目录。 “cars” -> “car”
-
Lemmatize:找到语义根“never be late” -> “never are late”
Enrich
-
文档功能:计算空格,制表符,换行符,字符,标记等的数量。
-
实体插入:在文本“Microsoft releases Windows” -> “Microsoft (company) releases Windows (application)”中添加更多通用规范
-
解析树:将句子解析为逻辑形式:“Alice hits Bill” -> Alice/Noun_subject hits/Verb Bill/Noun_object.
-
阅读级别:计算文档的阅读级别。
Similarities
-
token相似性:计算出现在两个文本中的token数。
-
压缩距离:查看是否可以使用其他文本更好地压缩一个文本。
-
Levenshtein / Hamming / Jaccard Distance:通过查看将一个字符串转换为另一个字符串所需的操作数来检查两个字符串之间的相似性。
-
Word2Vec / Glove:检查两个平均向量之间的余弦相似性。
TF-IDF
-
词语频率:减少对长文档的偏差。
-
反向文档频率:减少对常用token的偏差。
-
TF-IDF:用于标识文档中最重要的token,删除不重要的token,或用作降低维数的预处理步骤。
降维
-
PCA:将文本缩小为50或100维向量。
-
SVD:将文本缩小为50或100维向量。
-
LDA:TF-IDF,然后是SVD。
-
LSA:创建主题向量。
External models
-
情感分析:为任何文本获取负面或正面情绪的向量。
-
主题模型:使用其他数据集为新数据集创建主题向量。
神经网络 & 深度学习
-
神经网络声称端到端自动特征工程。
-
特色工程死亡领域?
-
将重点转移到架构工程
-
计算机视觉使用的功能包括:HOG,SIFT,白化,扰动,图像金字塔,旋转,z缩放,对数缩放,帧格式,外部语义数据等。
Leakage / Golden Features
-
特征工程可以帮助利用泄漏。
-
逆向工程
-
使用彩虹表反转MD5哈希。
-
将TF-IDF反转回词语频率
-
编码样本数据集的顺序。
-
编码文件创建日期。
-
规则挖掘:查找简单规则(并对其进行编码)以帮助模型。