(二)数据的特征工程方法总结笔记

特征工程是为了对数据进行处理,特征是原始数据的数值表示。特征工程是在给定数据、模型和任务的情况下设计出最合适的特征的过程。

没有足够的特征,模型将不能完成最终的任务,特征过多,模型会很难训练且训练成本高昂。

特征工程中的方法有
数据清洗

  1. 特征变换:模型无法处理或不适合处理
    a) 定性变量编码:Label Encoder;Onehot Encoder;Distribution coding;
    b) 标准化和归一化:z分数标准化(标准正太分布)、min-max 归一化;
  2. 缺失值处理:增加不确定性,可能会导致不可靠输出
    a) 不处理:少量样本缺失;
    b) 删除:大量样本缺失;
    c) 补全:(同类)均值/中位数/众数补全;高维映射(One-hot);模型预测;最邻近补全;
    矩阵补全(R-SVD);
  3. 异常值处理:减少脏数据
    a) 简单统计:如 describe() 的统计描述;散点图等;
    b) 3∂ 法则(正态分布)/箱型图截断;
    c) 利用模型进行离群点检测:聚类、K近邻、One Class SVM、Isolation Forest;
  4. 其他:删除无效列/更改dtypes/删除列中的字符串/将时间戳从字符串转换为日期时间格式等

特征构造:

  1. 构造统计量特征,报告计数、求和、比例、标准差等;
  2. 时间特征,包括相对时间和绝对时间,节假日,双休日等;
  3. 地理信息,包括分箱,分布编码等方法;
  4. 非线性变换,包括 log/ 平方/ 根号等;
  5. 特征组合,特征交叉;

特征选择方法:

  1. 过滤式(Filter):先用特征选择方法对初识特征进行过滤然后再训练学习器,特征选择过程与后续学习器无关。
    a) Relief/方差选择/相关系数/卡方检验/互信息法
  2. 包裹式(Wrapper):直接把最终将要使用的学习器的性能作为衡量特征子集的评价准则,其目的在于为给定学习器选择最有利于其性能的特征子集。
    a) Las Vegas Wrapper(LVM)
  3. 嵌入式(Embedding):结合过滤式和包裹式方法,将特征选择与学习器训练过程融为一体,两者在同一优化过程中完成,即学习器训练过程中自动进行了特征选择。
    a) LR+L1或决策树

以二手车交易交易价格预测的赛题为例,展示特征工程的一些应用
赛题链接,可以在此下载数据
https://tianchi.aliyun.com/competition/entrance/231784/information

读入数据

import pandas as pd
Train_data = pd.read_csv('./data/used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv('./data/used_car_testA_20200313.csv', sep=' ')

特征工程的操作

#特征构造
# 训练集和测试集放在一起,方便构造特征
Train_data['train'] = 1
Test_data['train'] = 0
data = pd.concat([Train_data,Test_data],ignore_index=True)

# 使用时间:data['creatDate'] - data['regDate'],反应汽车使用时间,一般来说价格与使用时间成反比
data['used_time'] = (pd.to_datetime(data['creatDate'], format='%Y%m%d', errors='coerce') -
                            pd.to_datetime(data['regDate'], format='%Y%m%d', errors='coerce')).dt.days

# 从邮编中提取城市信息,相当于加入了先验知识
data['city'] = data['regionCode'].apply(lambda x : str(x)[:-3])
data = data

#以power做数据分桶
bin = [i*10 for i in range(31)]
data['power_bin'] = pd.cut(data['power'], bin, labels=False)

# 删除不需要的数据
data = data.drop(['creatDate', 'regDate', 'regionCode'], axis=1)

# 目前的数据其实已经可以给树模型使用了,所以保存一下
data.to_csv('data_for_tree.csv', index=0)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值