智慧海洋 Task 03
本次task的主要任务是学习如何进行特征工程,从数学上来讲,特征工程是将原始数据空间变换到特征空间,而在新的特征空间中,模型可以更好的学习数据中的规律。特征工程主要包括以下几部分:(1) 探索性数据分析(2)构建数值特征(3)构建类别特征(4)构建时间特征(5)构建文本特征(6)特征提取和特征构造
常见特征工程方法
- 异常处理:
- 通过箱线图(或3-sigma原则)分析删除异常值
- Box-Cox转换(处理有偏分布)
- 长尾截断
- 特征归一化/表转化
- 标准化
- 归一化
- 针对幂律分布,可以采用公式
- 数据分箱(又称为数据分桶)
- 等频分箱
- 等距分箱
- Best-KS分箱
- 卡方分箱
- 缺失值处理
- 不处理(如采用树模型的时候)
- 删除(缺失数据太多)
- 插值不全:均值/中位数/众数/建模预测/多重插补/压缩感知/矩阵补全
- 特征构造
- 构造统计量特征:如计数/求和/比例/标准差等
- 时间特征:如相对时间和绝对时间、节假日等
- 地理信息:包括分箱、分布编码等
- 非线性变换:如log/平方/根号等
- 特征组合
- 特征筛选
- 过滤式:先进行特征选择,然后训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法
- 包裹式:直接把最终将要学习的学习器的性能作为特征子集的评价标准,常见的方法有LVM(LasVegas Wrapper法)
- 嵌入式:结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有Lasso回归
- 降维
- PCA/LDA/ICA
- 特征选择也是一种降维
赛题特征工程
如计算各点与某一特定点的距离
分箱特征工程
一般建立分类模型的时候,需要对连续变量进行离散化处理,特征离散化之后,模型会更稳定,降低了模型过拟合的风险。如在建立申请信用卡评分模型用Logistic作为基模型的时候就需要对连续变量进行离散化,离散化通常采用分箱方法。数据分箱有以下重要性和优势:
(1) 离散特征的增加和减小都很容易,易于模型的快速迭代
(2) 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展
(3) 离散化后的特征对于异常数据具有很强的鲁棒性:比如一个特征是age>30为1,否则为0,若未进行离散化,一个异常数据年龄300岁会给模型带来很大的干扰
(4) 逻辑回归属于广义线性回归模型,表达能力受限,单变量离散化为N个之后,每个变量有单独的权重,相当于为模型引入非线性,能够提升模型表达能力,加大模型的拟合
(5) 离散化之后可以进行特征交叉,由M+N个变量变为M*N个,进一步引入非线性,提升表达能力
(6) 特征离散化之后,模型会更稳定,比如若对用户年龄进行离散化,20-30作为一个区间,不会因为用户年龄增长就会变成一个完全不同的人,当然处于区间相邻处的样本会刚好想法,所以怎么划分区间是门学问
(7) 特征离散化之后,起到了简化逻辑回归模型的作用,降低了模型过拟合的风险
(8) 可以将缺失作为独立的一类带入模型
(9) 将所有变量变换到相似的尺度上
本次组队学习中的分箱特征工程:
(1) 对白天和黑夜进行0/1编码:5-20为白天,其余为黑夜
(2) 根据月份来划分季度:1-3月为第1季度,4-6月为第2季度,7-9月为第3季度,10-12月为第4季度
(3) 对速度进行分箱:v<0.1 return 0;v<0.5 return 1;v < 2.5 return 3;v < 5 return 4…
(4) 对船的方位进行16均分
def add_direction(df):
df['d16'] = df['d'].apply(lambda x: int((x / 22.5) + 0.5) % 16 if not np.isnan(x) else np.nan)
return df
(5) 对船的经纬度进行划分并构造小区域
利用DataFrame构造特征
- 计数特征
- shift偏移量
- 统计特征
构造Embedding特征
统计特征和业务特征中均考虑了数据的整体性,但是难免忽略了数据间的关系。将这些特征想象为一个一个的词汇,并将所有数据的词汇作为一篇文章来考虑,就可以得到一些额外的规律,即特征。
- word2vec:词嵌入模型,该模型将词汇的编码映射到一个词向量空间中,通过向量空间中的相似度我们可以得到特征之间的相似度,其常用场景由文本聚类、文本分类等NLP场景。在此次天池的航海问题中,我们对相同经纬度上不同的船进行Embedding,就可以得到每个船只的向量,进一步可以得到经常在某些区域工作的船只。