简述特征降维的几种方式
特征降维
1、概述
在训练的过程中,训练集会包含一些不重要的特征,可能导致模型泛化性能差,容易过拟合。而有些特征的取值很接近,其中包含的信息较少;或者两个特征同增同减,相关性高,给模型带来的信息非常重复,这个时候就需要删除一些特征来给特征降维。
一般使用低方差过滤法,PCA(主成分分析)降维法,相关系数(皮尔逊相关系数、斯皮尔曼相关系数)
2、低方差过滤法
(一)、概述
指删除方差低于阈值的一些特征
特征方差小:特征值的波动范围小,包含的信息少,模型很难学习到信息
特征方差大:特征值的波动范围大,包含的信息相对丰富,便于模型进行学习
(二)、相关api
导包:
from sklearn.feature_selection import VarianceThreshold
调用:
VarianceThreshold(threshold=0.1)
threshold:float类型,默认值为0。这个参数是VarianceThreshold进行特征过滤的标准。具体来说,当某个特征的方差小于这个阈值时,该特征就会被过滤掉。因此,threshold的值决定了过滤的严格程度。如果设置为0(默认值),那么所有记录都相同的特征(即方差为0的特征)都会被过滤掉。
3、主成分分析PCA
(一)、概述
对数据维数进行压缩,尽可能降低原数据的维数(复杂度)损失少量信息,在此过程中可能会舍弃原有数据、创造新的变量。
(二)、相关api
导包:
from sklearn.decomposition import PCA
调用:
PCA(n_components=None)
n_components:决定PCA算法应该保留的主成分数量
- 整数k:表示保留前k个主成分
- 小数(0,1]之间的数:表示保留的主成分的方差百分比,例如0.9表示保留90%的方差
- 如果设置为None(默认值),则保留所有主成分
copy:决定是否在运行PCA算法之前复制输入数据
- True(默认值):复制数据,以免修改原始数据
- False:直接在原始数据上进行计算
random_state:随机数生成器的种子,控制随机性
4、相关系数法
(一)、概述
反映特征列之间(变量之间)密切相关程度的统计指标,常见的两个相关系数:皮尔逊相关系数、斯皮尔曼相关系数。
相关系数的值介于–1与+1之间,即–1 ≤ r ≤ +1。其性质如下:
-
当 r > 0 时,表示两变量正相关,r < 0 时,两变量为负相关
-
当 |r| = 1 时,表示两变量为完全相关,当r = 0时,表示两变量间无相关关系
-
当 0 < |r| < 1时,表示两变量存在一定程度的相关。
-
且|r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱
一般可按三级划分:
-
|r| <0.4为低度相关;
-
0.4≤ |r| <0.7为显著性相关;
-
0.7 ≤ |r| <1为高度线性相关。
(二)、皮尔逊相关系数
(1)、公式
r = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 n ∑ i = 1 n y i 2 − ( ∑ i = 1 n y i ) 2 x i 是特征 x 的第 i 个值 y i 是特征 y 的第 i 个值 n 是样本数量 r=\frac{n\sum_{i=1}^n x_iy_i-\sum_{i=1}^n x_i\sum_{i=1}^n y_i}{\sqrt{n\sum_{i=1}^n x_i^2-(\sum_{i=1}^n x_i)^2}\sqrt{n\sum_{i=1}^n y_i^2-(\sum_{i=1}^n y_i)^2}}\\ x_i是特征x的第i个值\\ y_i是特征y的第i个值\\ n是样本数量 r=n∑i=1nxi2−(∑i=1nxi)2n∑i=1nyi2−(∑i=1nyi)2n∑i=1nxiyi−∑i=1nxi∑i=1nyixi是特征x的第i个值yi是特征y的第i个值n是样本数量
(2)、相关api
导包:
from scipy.stats import pearsonr
调用:
corr = pearsonr(x, y)
print(corr, ‘皮尔逊相关系数:’, corr[0], ‘不相关性概率:’, corr[1])
**x:**第一个变量
**y:**第二个变量,形状与第一个变量相同
(三)、斯皮尔曼相关系数
(1)、公式
R a n k I C = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) n 为等级个数 d 为成对变量的等级差数 RankIC=1-\frac{6\sum d_i^2}{n(n^2-1)}\\ n为等级个数\\ d为成对变量的等级差数 RankIC=1−n(n2−1)6∑di2n为等级个数d为成对变量的等级差数
(2)、相关api
导包:
from scipy.stats import spearmanr
调用:
corr = spearmanr(x, y)
print(corr, ‘斯皮尔曼相关系数:’, corr[0], ‘不相关性概率:’, corr[1])
**x:**第一个变量
**y:**第二个变量,形状与第一个变量相同