特征工程:
1.特征使用(数据的选择、数据的可用性)
2.特征获取(特征来源、特征存储)
3.特征处理(数据清洗、特征预处理)
4.特征监控(现有特征、新特征)
下面重点介绍一下特征处理
1.数据清洗
1)数据样本采集(抽样)
2)异常值(空值)处理
import pandas as pd
df=pd.DataFrame({
'A':['a0','a1','a1','a2','a3','a4'],'B':['b0','b1','b2','b2','b3',None],
'C':[1,2,None,3,4,5],'D':[0.1,10.2,11.4,8.9,9.1,12],'E':[10,19,32,25,8,None],
'F':['f0','f1','g2','f3','f4','f5']})
df.isnull() #判断是否为空值,是为True,否为False
df.dropna() #去除含有空值的行
df.dropna(subset=['B'])#去除某一行,比如列B为空值的行
df.duplicated(['A']) #查看A列是否有重复值
df.duplicated(['A','B']) #A,B均重复才为True
df.drop_duplicates(['A']) #去除重复的某一行,默认第一行
df.drop_duplicates(['A'],keep=False)#去除重复的所有行,keep='first','last',False,默认为first
df.fillna('b*') #填充b*
df.fillna(df['E'].mean())
df['E'].interpolate()#插值,可选择method
upper_q=df['D'].quantile(0.75)
lower_q=df['D'].quantile(0.25)
q_inter=upper_q-lower_q
k=1.5
df[df['D']>lower_q-k*q_inter][df['D']<upper_q+k*q_inter] #去除异常值
df[[True if item.startswith('f') else False for item in list(df['F'].values)]] #保留f开头的所有行
2.特征预处理
1)特征选择
剔除与标注不相关或者冗余的特征
特征选择是数据归约的一种思路(另一种思路为抽样)
三种思路:1)过滤思想(阈值设置比较灵活)
2) 包裹思想(遍历特征子集,常用方法:RFE算法)
3)嵌入思想(建立简单回归模型)
import numpy as np
import pa