特征工程
特征处理
1)数值型
-
归一化 numpy.preprocession.MinMaxScaler() #归一化到【0,1】之间
preprocession.StandardScaler() #约束到成一个均值为0,方差为1的数据范围
-
log等变化
-
统计值 max、min、mean、std
pandas.series.describe()
-
离散化:分桶
等宽分桶:每个桶左右边界值之差相同[0,2], [2,4], [4,6]
等频分桶:每个桶内的样本数相等 [0,1], [1,3],[3,4], [4,6]
pd.cut(arr,4) #分成4个桶
2)类别型
-
one-hot编码|哑变量 # 红 黄 蓝 [1 0 0], [0 1 0], [0 0 1]
-
hash技巧
-
柱状图映射
3)时间型
连续值
- 持续的时长(单页浏览的时长)
- 间隔时间(上次购买/这次购买的时间间隔)
离散值
- year
- month
- day
- day of week
- week of year
- hour of day
4)文本型
- dag of words
- counter
- tf-idf
- word2vect
5)统计型
- 加减平均
- 分位数
- 比例型
- 求和
6)组合型
1)简单组合特征:拼接型
user_id&&catogory: 10001&&女裙 10002&&男士牛仔裤
user_id&&style: 10001&&蕾丝 10002&&全棉
先对用户进行聚类,可将高维的user_id压缩到低维的类别
2)GBDT+LR
使用决策树来得到组合特征
男&&上海&&中国移动 1/0
特征选择
原因:
1) 冗余:部分特征的相关度太高了,消耗了计算资源
2)噪声:部分特征是对预测结果有负影响
特征选择 VS 降维
1)前者只是踢掉原本特征中跟预测结果关系不大的特征,后者对特征重新进行空间的投影计算出新特征
2) SVD或者PCA确实特能解决一定的高维度问题
常见的特征选择的方式
1)过滤性
通过评估特征跟结果值之间的相关程度,排序留下top 相关的特征部分
Pearson相关系数,互信息,距离相似度
缺点:没有考虑特征之间的关联作用,可能把有用的关联特征误踢掉
sklearn.feature_selection.SelectKBest
2)包裹性
把特征的选择看作是一个特征的子集搜索的问题,筛选各种特征子集,用模型评估效果
方法:递归特征删除 recursive feature elimination
sklearn.feature_selection.RFE
3)嵌入型:嵌入到模型中
正则化的方式
L1正则化:截断性,区分度较低的特征的权重是0
L2缩放性:每个特征都有权重,区分度较低的特征的权重较小
1)过滤性特征选择:使用的场景 对于偏线性回归模型
注意,对于非线性的模型,要慎重使用这种特征选择的方式,会导致模型的效果偏差,原因是会
L2缩放性:每个特征都有权重,区分度较低的特征的权重较小
1)过滤性特征选择:使用的场景 对于偏线性回归模型
注意,对于非线性的模型,要慎重使用这种特征选择的方式,会导致模型的效果偏差,原因是会