参考该博主的特征工程
#根据本身的含义进行看是类别变量还是数值变量
#根本不是根据object 和int
#类别变量:本身不是数值表示的
#数值变量,不管是连续还是离散,本身就是用数值表示的
#还有一种本身不是数值表示的,但是匿名处理之后用连续数值表示的一些变量
#“policyCode”,唯一值,去掉,ID 去掉
#首先找出,分类型特征都有哪些 cate = Xtrain.columns[Xtrain.dtypes == "object"].tolist() #除了特征类型为"object"的特征们,还有虽然用数字表示,但是本质为分类型特征的云层遮蔽程度 cloud = ["Cloud9am","Cloud3pm"] cate = cate + cloud cate #对于分类型特征,我们使用众数来进行填补 from sklearn.impute import SimpleImputer
# pd.get_dummies参数drop_first表示移除第一个类别 data_df = pd.get_dummies(data_df, columns=['grade', 'subGrade', 'homeOwnership', 'verificationStatus', 'purpose', 'regionCode'], drop_first=True)
for f in ['employmentTitle', 'postCode', 'title']: data_df[f+'_cnts'] = data_df.groupby([f])['id'].transform('count') # 类别特征f的计数 data_df[f+'_rank'] = data_df.groupby([f])['id'].rank(ascending=False).astype(int) # f在某个类别下的倒序排名 del data_df[f]
特征构造
for col in ['grade', 'subGrade']: temp_dict = data_df.groupby([col])['isDefault'].agg(['mean']).reset_index().rename(columns={'mean': col + '_target_mean'}) temp_dict.index = temp_dict[col].values temp_dict = temp_dict[col + '_target_mean'].to_dict() # 将Series转换为字典{index:value} data_df[col + '_target_mean'] = data_df[col].map(temp_dict)
for item in ['n0','n1','n2','n2.1','n4','n5','n6','n7','n8','n9','n10','n11','n12','n13','n14']: data_df['grade_to_mean_' + item] = data_df.groupby(['grade'])[item].transform('mean') data_df['grade_to_std_' + item] = data_df.groupby(['grade'])[item].transform('std')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)