特征工程

1.特征编码

label_encoder编码:将特征值对应到0~最大特征数-1
one_hot编码:将特征值转为one_hot编码
常用的xgboost需要使用one_hot编码输入,lightgbm支持直接输入label_encoder编码

import pandas as pd
from scipy import sparse
from sklearn.preprocessing import OneHotEncoder,LabelEncoder
# fit_transform可以分拆为fit和transform
data[feature] = LabelEncoder().fit_transform(data[feature])

df_one_hot = pd.DataFrame()
enc = OneHotEncoder()
enc.fit(data[feature].values.reshape(-1, 1))
# 生成coo_matrix格式的独热数据
arr = enc.transform(data[feature].values.reshape(-1, 1))
# hstack 按照列进行拼接 vstack 按行进行拼接
data = sparse.hstack((df_one_hot, arr))

label_encoder还可以下面代码转换

for i in cat_fea:
    data[i] =data[i].map(dict(zip(data[i].unique(),(range(data[i].nunique()))))

注意:map的功能很强大,多尝试尝试,通常接受一个字典为参数,也可以接受series

2.统计特征

连续特征

连续特征(一般为两个特征)常用的统计特征有mean、max、min、std、sum,pandas可用方法apply、agg、transform

group_col=[]
stat_col = []
for i in group_col:
   for j in stat_col:
      if i!=j:
         data[i+'_max_'+j] = data.groupby([i])[j].transform('max')
         data[i+'_min_'+j] = data.groupby([i])[j].transform('min')
         data[i+'_std_'+j] = data.groupby([i])[j].transform('std')
         data[i+'_mean_'+j] = data.groupby([i])[j].transform(man')
类别特征

unique特征:指特征x对应的特征y的类别

for i in range(n):
	for j in range(n):
		if i!=n:
			se = data.groupby([col_type[i]])[col_type[j]].value_counts()
			# 值置为1 后面加和即为i对应的j的类别个数
			se = pd.Series(1, index=se.index).sum(level=col_type[i])
			df[col_name] = (data[col_type[i]].map(se)).fillna(value=0).astype(int).values

unique的计算也可以使用transform

from scipy.stats import entropy
for i in group_col:
    for j in sta_col:
       if i!=j:
          data[i+'_nunique'+j] = data.groupby([i])[j].transform('nunique')
          data[i+'_mode'+j] = data.groupby([i])[j].transform(lambda x :x.mode()[0])
          data[i+'_entropy'+j] = data.groupby([i])[j].transform(lambda x: entropy(x.value_counts() / x.shape[0])
for i in group_col:
    data[i+'_count'] = data.groupby([i])[''].transform('count')

上面代码还计算了entropy、mode、count

比赛常用特征工程实现
待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值