降维:特征选择与特征提取

对于降维,我看可以简单理解为减少数据的维度,说白了就是减少变量个数。文末的视频墙裂推荐观看一下。
特征选择: 不改变变量的含义,仅仅只是做出筛选,留下对目标影响较大的变量。

  • Backward Elimination(反向淘汰)
  • Forward Selection(正向选择)
  • Bidirectional Elimination(双向淘汰)
  • Score Comparison(信息量比较)

前面三种机制差不多,反向淘汰其实之前的文章写过实例应用的:反向淘汰
对于正向选择,其实大致就是反向淘汰的逆过程。每个变量在加入模型前进行显著水平与设置的显著阈值进行比较,小于则加入模型,否则不加入。
双向淘汰是反向淘汰结合正向淘汰,因此需要设置两个水平显著值,一个用于反向淘汰判断变量是否该剔除出模型,一个用于正向选择判断变量是否应该加入模型。
信息量比较也写过实例:信息量比较

特征提取: 从数据集中的m个变量中提取p个新的变量(p<=m),这p个变量可以很好的解释自变量的差异性(数学上的表现为方差),这一步相当于数据预处理的一步,与因变量无关,因而是个无监督问题。常用到PCA(主成分分析)和KernelPCA(核函数主成分分析)-特殊PCA
PCA工作其实是在寻找最大方差所属的方向------摘自某套教程的解释。
并且PCA中特征缩放是必须的,因为必须保证变量在同一个数量级,否则,数值大的贡献很大,导致我们可能忽略了数值小却很至关重要的特征。
在这里插入图片描述
PCA基本工作步骤:

  1. 将X记为包含了m个自变量的矩阵,对x进行特征缩放
  2. 计算x的方差矩阵,记作A
  3. 计算矩阵A的特征值和特征向量,对特征值进行自大到小排序
  4. 选择需要解释方差的百分比P,借此进行特征选择p个(这里的特征是我们提取到的,区别于m中的任意一个变量)
  5. 这里的p个特征就是我们留下的新特征了
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
x = ss.fit_transform(x)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.25,random_state = 0)

from sklearn.decomposition import PCA
pca = PCA(n_components=None)    #当为None时我们只是取p = m,并没有进行取舍。
x_train = pca.fit_transform(x_train)
x_test = pca.transform(x_test)
print('各个变量的解释方差能力:'+str(pca.explained_variance_))     #这个步骤会自动得出每个变量的解释方差的能力,并自大到小排序。方便我们进行取舍。  

假设我们的P设置为80%,则我们需要用到上述代码的结果的p个变量解释方差达到80%。这里就确定了p的取值。接下来可以在运用一次:

from sklearn.decomposition import PCA
pca = PCA(n_components=p)  	#这里的p时上个代码片得出的p
x_train = pca.fit_transform(x_train)
x_test = pca.transform(x_test)

注意重新生成的变量是我们高度概括的结果。区别于原来的变量。
核函数PCA也差不多一样的步骤,不过用到的是别的包:

from sklearn.decomposition import KernelPCA

核函数PCA可以将原本线性不可分的变量,投射到更高维的空间,从而变得线性可分,在将结果投射回低维。关于这个过程,这里有一个youtebe的演示视频,可以很好的帮助理解。
链接:https://pan.baidu.com/s/1NQG5QGDZId-IcEUs1HcwfA 密码:a7m0
详细用法可以自行查看官方的文档。

猜你喜欢

转载自blog.csdn.net/weixin_43084928/article/details/82826627