利用特征提取进行特征降维

1. 使用主成分进行特征降维

问题描述:对于给定的一组特征,在保留信息量的同时减少特征的数量

解决方案:

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn import datasets

digits = datasets.load_digits()
#标准化特征矩阵
features = StandardScaler().fit_transform(digits.data)
#创建可以保留99%信息量(用方差表示)的PCA
pca = PCA(n_components=0.99,whiten = True)
#执行PCA
features_pca = pca.fit_transform(features)
#显示结果
print("Original number of features:",features.shape[1])
print("Reduced number of features:",features_pca.shape[1])
#output:
Original number of features: 64
Reduced number of features: 54

解决方案的输出结果显示,PCA保留了特征矩阵99%的信息,同时将特征数量减少了10个。

主成分分析fa(Principal Component Analysis,PCA)是一种流行的线性降维方法。PCA将样本数据映射到特征矩阵的主成分空间(主成分空间保留了大部分的数据差异,一般具有更低的维度)。PCA是一种无监督学习方法,即它只考虑特征矩阵而不需要目标向量的信息。

在sklearn中,PCA由pca方法实现。

  • 参数n_components有两种含义,由具体的参数数值决定。
    • 值大于1,则返回和这个数值相同数量的特征。
    • 0和1之间,pca返回一定信息量的最少特征数。通常取值0.95或0.99.
  • 参数whiten = True,表示对每一个主成分都进行转换以保证它们的均值为0,方差为1.
  • 参数svd_solver = “randomized”,代表使用随机方法找到第一个主成分。

2. 对线性不可分数据进行特征降维

解决方案:使用kernel PCA(核主成分分析,PCA的一种扩展)进行非线性降维。

from sklearn.decomposition import PCA,KernelPCA
from sklearn.datasets import make_circles

#创建线性不可分数据
features,_ = make_circles(n_samples = 1000,random_state = 1,noise =0.1,factor = 0.1)
#应用基于径向基函数(RBF)核的Kernel PCA方法
kpca = KernelPCA(kernel = "rbf",gamma = 15,n_components =1)
features_kpca = kpca.fit_transform(features)

#显示结果
print("Original number of features:",features.shape[1])
print("Reduced number of features:",features_kpca.shape[1])
#output:
Original number of features: 2
Reduced number of features: 1

对于线性不可分数据,如果使用线性PCA对数据进行降维,则两类数据会被线性迎神到第一个主成分上,因而会交织在一起。理想情况下,希望维度变换既能降低数据的维度,又可以使数据变得线性可分。

核(kernel,也叫核函数)能够将线性不可分数据映射到更高的维度,数据在这个维度是线性可分的,这种方式叫核机制(kernel trick)。常用的核函数是高斯径向基函数(rbf),其他的核函数有多项式核(poly)和sigmoid核。

3. 通过最大化类间可分性进行特征降维

解决方案:使用线性判别分析(Linear Discriminant Analysis,LDA)方法,将特征数据映射到一个可以使类间可分性最大的成分坐标轴上。

from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 加载Iris flower数据集
iris = datasets.load_iris()
features = iris.data
target = iris.target
#创建并运行LDA,然后使用它对特征做变换
lda = LinearDiscriminantAnalysis(n_components = 1)
features_lad = lda.fit(features,target).transform(features)
#打印特征的数量
print("Original number of features:",features.shape[1])
print("Reduced number of features:",features_lad.shape[1])
#output:
Original number of features: 4
Reduced number of features: 1
lda.explained_variance_ratio_
#output:
array([0.9912126])

LAD是一种分类方法,也是常用的降维方法。LDA与PCA的原理类似,将特征空间映射到较低维的空间。然而在PCA中,只需关注使数据差异最大化的成分轴;在LDA中,另一个目标是:找到使得类间差异最大的成分轴。

4. 使用矩阵分解进行特征降维

问题描述:对非负特征矩阵进行降维

解决方案:使用非负矩阵分解法(Non-Negative Matrix Factorization,NMF)对特征矩阵进行降维。

from sklearn.decomposition import NMF
from sklearn import datasets
#加载数据
digits = datasets.load_digits()
#加载特征矩阵
features = digits.data
#创建NMF,进行变换并应用
nmf = NMF(n_components = 10,random_state = 1)
features_nmf = nmf.fit_transform(features)
#显示结果
print("Original number of features:",features.shape[1])
print("Reduced number of features:",features_nmf.shape[1])

#output:
Original number of features: 64
Reduced number of features: 10

NMF是一种无监督的线性降维方法,可以分解矩阵(将特征矩阵分解成多个矩阵,其乘积近似于原始矩阵),将特征矩阵转换为表示样本与特征之间潜在关系的矩阵。

如果要使用NMA,特征矩阵就不能包含负值。此外,与PCA等前面探讨过的技术不同,NMA不会告诉我们输出特征中保留了原始数据的信息量。因此,找出参数n_components的最优值得最优化方法是不断尝试一系列可能的值,直到找出能生成最佳学习模型的值。

5. 对稀疏矩阵进行特征降维

解决方法:使用截断奇异值分解(Truncated Singular Value Decomposition,TSVD)法:

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import TruncatedSVD
from scipy.sparse import csr_matrix
from sklearn import datasets
import numpy as np
#加载数据
digits = datasets.load_digits()
#标准化特征矩阵
features = StandardScaler().fit_transform(digits.data)
#生成稀疏矩阵
features_sparse = csr_matrix(features)
#创建tsvd
tsvd = TruncatedSVD(n_components = 10)
#在稀疏矩阵上执行TSVD
features_sparse_tsvd = tsvd.fit(features_sparse).transform(features_sparse)
#显示结果
print("Original number of features:",features_sparse.shape[1])
print("Reduced number of features:",features_sparse_tsvd.shape[1])

#output:
Original number of features: 64
Reduced number of features: 10

猜你喜欢

转载自blog.csdn.net/weixin_44127327/article/details/108584211