学习题目:天池-二手车价格预测
https://tianchi.aliyun.com/competition/entrance/231784/information
数据挖掘-特征工程
https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12586969.1002.12.1cd81b438QtUxo&postId=95501
常见的特征工程包括:
1.异常处理:
通过箱线图(或 3-Sigma)分析删除异常值;
BOX-COX 转换(处理有偏分布);
长尾截断;
2.特征归一化/标准化:
标准化(转换为标准正态分布);
归一化(抓换到 [0,1] 区间);
针对幂律分布,可以采用公式: log(1+x1+median)log(1+x1+median)
3.数据分桶:
等频分桶;
等距分桶;
Best-KS 分桶(类似利用基尼指数进行二分类);
卡方分桶;
4.缺失值处理:
不处理(针对类似 XGBoost 等树模型);
删除(缺失数据太多);
插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等;
分箱,缺失值一个箱;
5.特征构造:
构造统计量特征,报告计数、求和、比例、标准差等;
时间特征,包括相对时间和绝对时间,节假日,双休日等;
地理信息,包括分箱,分布编码等方法;
非线性变换,包括 log/ 平方/ 根号等;
特征组合,特征交叉;
仁者见仁,智者见智。
6.特征筛选
过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法;
包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ;
嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归;
7.降维
PCA/ LDA/ ICA;
特征选择也是一种降维。
箱型图去除异常值,可以直接调用
def box_plot_outliers(data_ser, box_scale):
"""
利用箱线图去除异常值
:param data_ser: 接收 pandas.series 数据格式
:param box_scale: 箱线图尺度,
:return:
"""
iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
val_low = data_ser.quantile(0.25) - iqr
val_up = data_ser.quantile(0.75) + iqr
rule_low = (data_ser < val_low)
rule_up = (data_ser > val_up)
return (rule_low, rule_up), (val_low, val_up)
对于长尾分布或者左偏分布。可以使用log变换
data["price"]=np.log1p(data["price"])
##如果是对于预测值进行变换,最后需要还原
data["price"]= np.e**(data["price"])-1
多项式特征构建
##多项式特征构建
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
data=np.arange(6).reshape(3,2)
poly = PolynomialFeatures(2)
poly.fit_transform(X)
#interaction_only=True时,则只选取特征间的交互项,
#x1^2就不会被生成
poly = PolynomialFeatures(degree=3, interaction_only=True)
poly.fit_transform(X)
参考:https://blog.csdn.net/levy_cui/article/details/100557454
特征筛选:
参考:https://blog.csdn.net/qq_33876194/article/details/88403394
#补充
对于文本式类别变量,如果因为他出现的变量比较多dummy不好处理,。所以Pandas有一个方法叫做factorize(),它可以创建一些数字,来表示类别变量,对每一个类别映射一个ID,这种映射最后只生成一个特征,不像dummy那样生成多个特征。