第三次
学习目标
- 学习特征预处理、缺失值、异常值处理、数据分桶等特征处理方法
- 学习特征交互、编码、选择的相应方法
- 数据预处理常见方法
- 缺失值的填充: 时间格式处理 对象类型特征转换到数值
- 异常值处理: 基于3segama原则 基于箱型图
- 数据分箱: 固定宽度分箱b 分位数分箱离散数值型数据分箱连续数值型数据分箱
- 特征交互a. 特征和特征之间组合b. 特征和特征之间衍生c. 其他特征衍生的尝试
- 特征编码a. one-hot编码b. label-encode编码6. 特征选择a.
- 1 Filterb. 2 Wrapper (RFE)c. 3 Embedded
#缺失值填充 #把所有缺失值替换为指定的值 data_train = data_train.fillna(0) # 向用缺失值上面的值替换缺失值 data_train = data_train.fillna(axis=0,method='ffill') #纵向用缺失值下面的值替换缺失值,且设置最多只填充两个连续的缺失值 data_train = data_train.fillna(axis=0,method='bfill',limit=2) #查看缺失值数量 data_train.isnull().sum() #按照平均数填充数值型特征 data_train[numerical_fea] = data_train[numerical_fea].fillna(data_train[numerical_fea].median()) data_test_a[numerical_fea] = data_test_a[numerical_fea].fillna(data_train[numerical_fea].median()) #按照众数填充类别型特征 data_train[category_fea] = data_train[category_fea].fillna(data_train[category_fea].mode()) data_test_a[category_fea] = data_test_a[category_fea].fillna(data_train[category_fea].mode())
#时间特征处理 1 #转化成时间格式 for data in [data_train, data_test_a]: data['issueDate'] = pd.to_datetime(data['issueDate'],format='%Y-%m-%d') startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d') #构造时间特征 data['issueDateDT'] = data['issueDate'].apply(lambda x: x-startdate).dt.days data_train['employmentLength'].value_counts(dropna=False).sort_index()
#对象特征转换为数值 def employmentLength_to_int(s): if pd.isnull(s): return s else: return np.int8(s.split()[0]) for data in [data_train, data_test_a]: data['employmentLength'].replace(to_replace='10+ years', value='10 years', inplace=True) data['employmentLength'].replace('< 1 year', '0 years', inplace=True) data['employmentLength'] =data['employmentLength'].apply(employmentLength_to_int) data['employmentLength'].value_counts(dropna=False).sort_index() #1. 对earliesCreditLine进行预处理 data_train['earliesCreditLine'].sample(5) for data in [data_train, data_test_a]: data['earliesCreditLine'] = data['earliesCreditLine'].apply(lambda s: int(s[-4:]))