-
特征处理
-
数据预处理
-
不属于同一量纲
-
标准化
- 前提
- 特征值服从正态分布
标准化后,其转换成标准正态分布
- 公式
- x' = (x-均值)/标准差
- 代码
- StandardScaler().fit_transform(iris.data)
-
区间缩放法
- 公式
- x = (x-最小值)/(最大值-最小值)
- 代码
- MinMaxScaler().fit_transform(iris.data)
- 信息冗余
-
定量特征二值化
- 大于阈值的赋值为1,小于等于阈值的赋值为0
- Binarizer(threshold=3).fit_transform(iris.data)
- 定性特征不能直接使用
-
存在缺失值
-
缺失值填充
- Imputer().fit_transform(vstack((missing_value, strategy, iris.data)))
- missing_value为缺失值的表现形式,默认为NaN
- strategy为默认填充策略,默认为mean
- 信息利用率低
-
OnHot编码
- OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))
-
特征选取
-
考虑要点
-
特征是否发散
- 如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,没有特异性
-
特征与目标的相关性
- 与目标相关性高的特征,应当优选选择
-
特征选择方法
-
Filter:过滤法
- 按照发散性或者相关性对各个特征进行评分,
设定阈值或者待选择阈值的个数,选择特征
-
方法步骤
- 方差选取法
- 1. 计算各个特征的方差
- 2. 根据阈值,选择方差大于阈值的特征
- 代码
- VarianceThreshold(threshold=3).fit_transform(iris.data)
- 相关系数法
- 1. 先要计算各个特征对目标值的相关系数以及相关系数的P值
- 2. 用feature_selection库的SelectKBest类结合相关系数来选择特征
- 代码
- SelectKBest(lambda X, Y:).fit_transform(iris.data, iris.target)
- 卡方检验
- 检验定性自变量对定性因变量的相关性
- 代码
- SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
- 互信息法
- 也是评价定性自变量对定性因变量的相关性的
- 代码
- SelectKBest(lambda X,k=2).fit_transform(iris.data, iris.target)
-
Wrapper:包装法
- 根据目标函数,每次选择若干特征,或者排除若干特征
-
方法
- 递归特征消除法
- 使用一个基模型来进行多轮训练,每轮训练后,消除若干权值
系数的特征,再基于新的特征集进行下一轮训练
- 代码
- RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)
-
Embedded:嵌入法
- 先使用某些机器学习的算法和模型进行训练,得到
各个特征的权值系数,根据系数从大到小选择特征
-
方法
- 基于惩罚项的特征选择法
- 使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维
- 代码
- SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)
- 基于树模型的特征选择法
- 代码
- SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)
-
降维
-
引入原因
- 特征矩阵过大,导致计算量大
-
方法
-
主成分分析法(PCA)
- PCA是为了让映射后的样本具有最大的发散性
-
代码
- PCA(n_components=2).fit_transform(iris.data)
- 无监督的降维
-
线性判别分析法(LDA)
- 而LDA是为了让映射后的样本有最好的分类性能
-
代码
- LDA(n_components=2).fit_transform(iris.data, iris.target)
- 有监督的降维