什么是特征过程
我的理解就是在建模解决实际问题时,会在建模前收集可能与实际业务有关的特征,但这些特征可能是一些单一的特征,通过EDA发现这些特征值有异常值,缺失值等,不同的模型对特征的要求不一样,这些特征直接进入模型的效果往往不好,因此,我们需要对特征进行清洗,加工,筛选才能进入模型。
以下数据处理过程以二手车价格预测比赛为例。
异常值处理
异常值处理方法有很多如3西格玛法,箱型图,孤立森林等,下面代码展示的是箱型图法:
箱型图法的原理就是特征值的下四分位数-(上四分位数-下四分位数)到上四分位数+(上四分位数-下四分位数)这个区间的值分布是合理的,在这个范围之外大概率上是异常值了。
def outliers_proc(data, col_name, scale=3):
"""
用于清洗异常值,默认用 box_plot(scale=3)进行清洗
:param data: 接收 pandas 数据格式
:param col_name: pandas 列名
:param scale: 尺度
:return:
"""
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)
data_n = data.copy()
data_series = data_n[col_name]
rule, value = box_plot_outliers(data_series, box_scale=scale)
index