类别特征
- 几乎总是需要做一些处理
- 类别特征种类过多会造成稀疏数据
- 难以填充缺失值
热独编码(Onehot-encoding)
- 通常和大多数线性算法一起使用
- 稀疏格式对内存友好
- 大多数方法无法处理缺失或者不可见数据
- 对于没有大小区分的类别特征,可以使用Oneshot-encoding
哈希编码(Hash encoding)
- 固定长度的oneHot-encoding
- 避免数据过度稀疏
- 碰撞通常会降低准确率,但是也能提高
- 可以很好地处理新变量
Label encoding
- 给每个类别变量一个唯一的数字ID
- 对于非线性树模型比较有用
- 不会增加数据维度
- 随机化映射 car_var->num_id的映射,在训练,平均,对精度能有小提升(小提升)
计数编码(Count encoding)
- 在训练集中用他们的统计量替代类别特征
- 对于线性和非线性算法都有用
- 对于异常值很敏感
- 增加log转换,对于统计量可能更好
- 用1替代无法观测数据
- 可能会造成冲突,同一个编码,不同的变量值
计数排名编码(LabelCount encoding)
- 通过统计量给类别特征排序
- 对于线性和非线性算法都有用
- 对异常值不敏感
- 不会给同一个变量不同的值
Category Embedding
- 使用神经网络对类别特征创建一个稠密的embeddings,找到不同类别特征关联性
NaN encoding:
- 给NaN 值一个明确的编码,而不是忽略
- NaN里面也包含信息
- 小心过拟合
- 仅仅当训练集和测试集NaN都是同样的原因造成,或者本地验证结果证明NaN包含信息(即这种方法是有效果的)
数字特征
- 对于算法更可读
- 很容易填补缺失值
截断(Rounding)
- 对数字变量四舍五入
- 有损压缩,保留数据最重要的特征
- 有时候精度太准确只是噪声
- 四舍五入后的变量能够当成类别特征处理
- 在四舍五入之前可以进行log转换
分桶(Binning)
- 对数据进行分桶,并且赋予一个分桶ID
- 分桶能够使用分位数或者模型来找到最佳分桶
- 能够很好地处理超出训练集范围的数据
分桶的作用,当一个特征的数值比较大,但是模型对数值比较敏感的时候,最好的方法是分桶,将数值变量分配到一个桶里。
缩放(Scaling)
- 将数字变量缩放到一个明确的范围
- Standard(Z) Scaling
- MinMax Scaling
- Root Scaling
- Log Scaling
原因:因为部分模型例如线性回归、逻辑回归等对于数据输入比较敏感将数值缩放到一个维度,
- 标准化Standarisation和归一化Normalisation
- 归一化的原因
- 当变量维度不同的时候,对模型产生的作用不一致,这时候需要归一化
- 神经网络在特征缩放之后训练速度更快
- 特征缩放的时机
- KNN
- K-means
- NN
- 树模型不需要特征缩放
填充(Imputation)
- 对缺失值进行填充
- 硬编码能够和填充结合起来
- Mean:最常见的
- Median:对于异常值更有鲁棒性
- Igonre:忽略,后面在处理或者不处理?
- 使用模型对结果进行预测,然后填充
交叉(Interaction)
- 对数字变量之间的相互影响进行编码
- 尝试加减乘除
- 使用特征选择:统计测试、或者已经训练好的特征重要性
- 忽略主观意愿和奇怪的关联能够有明显提升
高斯转换
- 一些机器学习模型假设数据是正态分布的,例如linear和logistic回归
- 高斯分布能够帮助机器学习下模型表现得更好
- 集中不同的转换
- Logarithmic Transformation
- Reciprocal Transformation
- Square Root Transformation
- Exponential Transformation
- Boxcox Transformation
相关问题:
1.为什么要做对数变换
https://www.zhihu.com/question/22012482
https://tianchi.aliyun.com/notebook-ai/detail?postId=62338
异常值(Outlier)
1、异常点是否需要清除,需要结合具体业务
2、异常点的定义
高于1.5倍的第三分位数和第一分位数之差
与均值的差小于三倍的标准差
3、异常值存在的原因
- 数据多样性
- 测量错误
4、异常点的影响
- 在统计分析的时候造成多种问题
- 对于数据均值和标准差影响比较大
5、找出异常值
- IQR
- z score
- Scatter plots
- Box plot
时间特征
日起相关特征,节假日之类
lag feature,根据业务决定选择lag1、lag2、。。。。
检查lag函数重要性两种方法
- ACF,Autocorrelation Function
- PACF, Partial Autocorrelation Function
rolling windows 滑动窗口
Expanding windows
空间特征
- 欧氏距离
- 球面距离
- 曼哈顿距离
- geohash
文本特征
N-Gram
N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。
每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。
该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
词袋模型
词袋模型可以理解为将文本拆成一个个的词语,然后用一个个词作为字典来表达文本 ,字典中的词没有特定的顺序,也舍弃了句子总体结构。其中TF-IDF是一种表示方式
TF-IDF
用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
TF-IDF的核心思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF*IDF。TF是词频(Term Frequency),指的是特定词语在该文件中出现的频率。
其中$tf_{i,j}$表示词i出现在文章j中的次数,分母表示文章j中出现档次数量总和。
IDF是逆文本频率指数(Inverse Document Frequency)。IDF的意思是在文档集D中,包含词i的数量越少,词i对于文档集越重要,此时更好区分。
$|D|$表示所有文档数量,文档集中出现此$t_i$的文档数。
余弦相似度
Jaccard相似度
定义:两个文档中相交的单词个数除以两个文档单词总数之和
Jaccard距离
编辑距离
衡量两个字符串相似度的指标,指的是两个字符串有一个字符串转成另外一个字符串需要的最少编辑操作(插入、删除、替换)次数
推荐系统中的特征工程
推荐系统中特征工程主要分为以下几个部分
- 用户行为数据
- 用户关系数据
- 属性标签数据,类似性别年龄、爱好等
- 内容数据(多模态,通过cv、nlp等技术识别图片和文本中的信息)
- 上下文信息,时间、地点、重大事件等。
- 统计类特征
- 组合特征
参考资料
1、https://www.kaggle.com/pavansanagapati/feature-engineering-a-comprehensive-tutorial/notebook
2、美团机器学习实践
3、词袋模型
4、百面机器学习