数值型特征分箱(数据离散化)
2.1 无监督分箱法
等距分箱
import pandas as pd
df = pd.DataFrame([[22,1],[13,1],[33,1],[52,0],[16,0],[42,1],[53,1],[39,1],[26,0],[66,0]],columns=['age','Y'])
df['age_bin_2'] = pd.cut(df['age'],3) #新增一列存储等距划分的分箱特征
display(df)
等频分箱
import pandas as pd
df = pd.DataFrame([[22,1],[13,1],[33,1],[52,0],[16,0],[42,1],[53,1],[39,1],[26,0],[66,0]],columns=['age','Y'])
df['age_bin_1'] = pd.qcut(df['age'],3) #新增一列存储等频划分的分箱特征
display(df)
聚类分箱
基于k均值聚类的分箱:k均值聚类法将观测值聚为k类,但在聚类过程中需要保证分箱的有序性:第一个分箱中所有观测值都要小于第二个分箱中的观测值,第二个分箱中所有观测值都要小于第三个分箱中的观测值,等等。
from sklearn.cluster import KMeans
kmodel=KMeans(n_clusters=k) #k为聚成几类
kmodel.fit(data.reshape(len(data),1))) #训练模型
c=pd.DataFrame(kmodel.cluster_centers_) #求聚类中心
c=c.sort_values(by=’列索引') #排序
w=pd.rolling_mean(c,2).iloc[1:] #用滑动窗口求均值的方法求相邻两项求中点,作为边界点
w=[0] +list(w[0] + [ data.max() ] #把首末边界点加上
d3= pd.cut(data,w,labels=range(k)) #cut函数
2.2 二值化
对定量特征二值化(对列向量处理)
from sklearn.preprocessing import Binarizer
#二值化,阈值设置为3,返回值为二值化后的数据 ;>3显示为1,否则为0
print(iris.data)
Binarizer(threshold=3).fit_transform(iris.data)
对定性特征哑编码(对列向量处理)
from sklearn.preprocessing import OneHotEncoder
#哑编码,对IRIS数据集的目标值,返回值为哑编码后的数据
print(OneHotEncoder().fit_transform(iris.target.reshape((-1,1))))
2.3 无监督分箱法
总结:11种降维方法(未写)
特征选择方法(待补充)
选择特征的角度很多:变量的预测能力,变量之间的相关性,变量的简单性(容易生成和使用),变量的强壮性(不容易被绕过),变量在业务上的可解释性(被挑战时可以解释的通)等等。但是,其中最主要和最直接的衡量标准是变量的预测能力。
预测能力衡量:IV值,信息增益,基尼系数等;
1、特征选择:特征发散,如果一个特征不发散,方差为0,说明样本在这个特征上基本没有差异,这个特征对于样本区分基本没用
2、特征选择:考虑特征与目标的相关性,优先选择与目标相关性高的特征!
3、根据方差选择特征:计算各个特征的方差,选择方差大于阈值的特征
4、单变量特征选择:计算每个特征与y的相关性;对于回归问题或分类问题可以采用卡方检验的方式对特征进行检测
5、皮尔逊相关系数(适用于回归问题即y连续),简单实用
6、基于模型的特征融合方法:主成分分析,聚类,支持向量机,随机森林都可以作为筛选特征的方法
网友评论