机器学习-数据处理、特征工程、特征选择 实操
数据处理、特征工程、特征选择
不太会粘代码和排版 so 以截图方式 不懂的地方欢迎留言/私聊
之后会把原理补充到这里
- 载入
了解一下数据
- head()
- info()
- describe()
注:std 标准差
可以用pandas的fillna函数
借助sklearn中的Imputer
from sklearn.preprocessing import Imputer
处理之后的数据缺失值已被 平均值 填充
常见的特征工程操作
数值型
0.幅度变换
- apply+numpy
- preprocessing scaler
1.统计值¶
- max,min
- quantile
2.四则运算(使用各字段进行加减乘除得到新的字段)
3.高次特征与交叉特征
- preprocessing.PolynomialFeatures
4.离散化/分箱/分桶
- pandas cut
- pandas qcut
类别型
5.OneHot encoding/独热向量编码
- pandas get_dummies
- OneHotEncoder()
时间型
6.日期处理
- pandas to_datetime
7.取出关键时间信息
- .dt.month 取出月
- .dt.dayofweek 取出星期
- .dt.dayofyear 取出一年当中的第几天
- ...
#默认的词袋 是把每个单个的单词 进行判断
#这里ngram_range=(1,3) 是 判断 1 2 3 个 的顺序的特征
#比如 I have a apple 通过 CountVectorizer(ngram_range=(1,3)) 词袋转换
#得: I 。I have 。I have a。 have 。have a。 have a apple 。a。apple。apple
9.TF-IDF¶
- TfidfVectorizer
10.组合特征(通过已知字段的组合关系得到新的特征字段)
特征选择
过滤式/Filter
- SelectKBest
包裹型/wrapper
- RFE
嵌入式/Embedded
- SelectFromModel
原理:
特征选择
意义 : 1冗余:部分特征的相关度太高,消耗计算性能
2噪声:部分特征是对预测结果有负影响
特征选择与降维的区别:
1前者剔除原本特征里和预测结果关系不大的 后者做降维操作 但是保存大部分信息
2SVD和PCA 确实也能解决一定的高维度的问题
过滤式(filter)特征选择:
1评估个体特征与预测结果值之间的相关程度 排序留下Top相关的特征部分
2Pearson 相关系数 互信息 距离相关度
3缺点:没有考虑到特征之间的关联程度的作用,可能把有用的关联特征误剔除
包裹式(wapper)特征选择:
1把特征选择看成是一个子集搜索问题 筛选各种特征子集 用墨模型评估效果
2典型的包裹式算法:”递归特征删除法“
3比如用逻辑回归 怎么做这个事情?如下:
1用全局特征跑一次模型
2根据线性模型的系数(体现相关性)删除5%-10%的若特征,观察准确率/auc的变化
3逐步进行 直到准确率/auc 出现大幅度下滑 停止
嵌入式(Embedded)特征选择:
1根据模型来分析特征的重要程度(有别于上面的方式,是从生产的模型权重等)
2最常见的方式为用正则化方式来做特征选择
3举个例子: 最早电商用LR做点击率预估 在3-5亿维的系数特征上 用L1正则化的LR模型
剩余的2-3千万的特征 意味着其他的特征重要度不够。
L1 正则化:截断点效应 能够把不重要的 特征权重 拉低到0
特征处理示例