数据预处理-异常值
一.查看
方法1
train_data.describe([0.01,0.1,0.25,0.5,0.75,0.9,0.99]).T # 右偏:求log 主要针对于标签 # 左偏:指数
方法2-作图
散点图
train_data.columns columns = ['NumberOfTime30-59DaysPastDueNotWorse', 'NumberOfTime60-89DaysPastDueNotWorse', 'NumberOfTimes90DaysLate'] train_data[columns].plot.box(vert=False)
二.处理
1.删除过滤
# 年龄 train_data = train_data.loc[train_data.age>0] train_data.shape #查看删除了几行
#画完散点图,已定位异常值 for i in columns: train_data = train_data.loc[train_data[i]<90] # 过滤掉数值大于90的样本
2.盖帽法
自定义函数
def block(x,lower=True,upper=True): # x是输入的Series对象,lower表示是否替换1%分位数,upper表示是否替换99%分位数 ql = x.quantile(.1) qu = x.quantile(.9) if lower: out = x.mask(x<ql,ql) if upper: out = x.mask(x>qu,qu) return(out) block(train_data['RevolvingUtilizationOfUnsecuredLines']).max() train_data['RevolvingUtilizationOfUnsecuredLines'].quantile(0.9)#比较