机器学习----数据准备&特征工程(1)
程序员文章站
2022-03-29 08:06:48
...
一、总介绍
二、用户RFM行为特征提取
import pandas as pd
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity= "all"
##导入交易数据类型
trade = pd.read_csv("文件")
trade.info()
trade.head()
#把Date字段转换成日期型
trade["字段名"]=pd.to_datetime(trade['字段名'])
trade.info()
trade.head()
###汇总成RFM特征
RFM=trade.groupby("字段名").agg()
RFM.head()
三、特征转换
3.1无量钢化
使不同规格的尺度得到统一
常用的无量钢化的方法1—标准化
效果:把原始的连续型变量转换为均值是0,标准差是1 的变量
常用的无量钢化的方法2—区间缩放法
效果:把原始的连续型变量转换为范围在 【a,b】之间或者【0,1】之间的变量
变换的目的
3.2转换
变换后容易发现数据之间的关系,从没有关系到有关系
变换后差异减小,更容易看清
让数据接近正态分布
常用方法1—
log变换
常用方法2—box-cox变换
3.3离散化
把连续的数值切割为少数的一些区间
* 方便数据的分布和相关性
* 减少异常数据的影响
* 引入非线性,提升模型的预测能力
* 进行模型特征交叉,有M+n和变为M*N
* 为了模型稳定
* 简化复杂性,降低过拟合的风险
* 有些模型要求是离散的
3.4、类别性变量编码
目的:很多机器学习算法无法处理类别型变量,必须转换为数值变量
一定程度上也起到扩充特征的作用(构造新的特征)
1、one-hot
编码(独热编码)2、count Encoding
(计数编码)Target econding
用某一类比例来编码
#对字段标准化
from sklearn import preprocessing
std = preprocessing.StandarScaler()
#对字段区域缩放法
minmaxscaler = preprocessing.MinMaxScaler()
Amount = RFM["字段"].values.reshape(-1,1)
std.fit(Amount)
RFM["Amount_std"] = std.transform(Amount)
RFM.head(5)
#log变换
import numpy as np
RFM["字段"] = np.log(RFM["字段"])
RFM.head(5)
import pandas as pd
import numpy as np
trade = pd.read_csv("文件")
trade["字段名"]=pd.to_datetime(trade['字段名'])
RFM=trade.groupby("字段名").agg()
RFM.head()
num=[0,200,500,800,1000]
#自定义区间离散化
RFM["字段"] = pd.cut("字段",bins = cut_points)
#等宽离散化
RFM["字段"] = pd.cut(RFM.Amount,20)
#等深离散化
RFM["字段"] = pd.cut(RFM.Amount,5)
独热编码
3.5、日期变量处理
代码
3.6、缺失值的处理
1缺失原因
常用方法—均值 & NaN Encoding编码
#填充
tic["段"].fillna(age_mean,inplace=True)
#标志变量0或者1
tic.loc[tic["字段"].isnull(),"ziduan"] = 1
3.7、特征组合
提升模型的
精准度
多个特征加减乘除 或者 多个类连续组合