怎么使用scikit-learn工具来进行PCA降维

技术怎么使用scikit-learn工具来进行PCA降维本篇文章为大家展示了怎么使用scikit-learn工具来进行PCA降维,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.

本文向您展示了如何使用scikit-learn工具来降低PCA维度。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

1.sci工具包介绍-学习PC类。

在scikit-learn中,PCA相关的类都在sklearn.decomposition包中。最常用的PCA类是sklearn.decomposition.PCA,我们将主要基于这个类来讲解如何使用它。

除了PCA类,最常用的PCA相关类是KernelPCA类,主要用于非线性数据的降维,需要内核技能。因此,需要选择合适的核函数,并调整核函数的参数。

另一个常见的PCA相关类是IncrementalPCA,主要用于解决单台计算机的内存限制。有时候我们的样本量可能是几百万,维度可能是几千,所以直接拟合数据可能会爆内存。此时,我们可以通过使用IncrementalPCA类来解决这个问题。IncrementalPCA首先将数据分成若干批,然后对每一批依次调用partial_fit函数,从而逐步获得样本的最终最优降维。

此外,还提供了SparsePCA和MiniBatchSparsePCA。它们与上面提到的PCA的主要区别是使用了L1正则化,可以将很多非主成分的影响程度降低到0。因此,当主成分分析降维时,我们只需要对那些相对主要的成分进行降维,从而避免了噪声等因素对我们主成分分析降维的影响。SparsePCA和MiniBatchSparsePCA的区别在于,MiniBatchSparsePCA通过使用一些样本特征和给定的迭代次数来降低PCA的维数,从而解决了大样本下特征分解速度慢的问题。当然代价是PCA降维的精度可能会降低。SparsePCA和MiniBatchSparsePCA的使用需要调整L1正则化参数。

2.sklearn.decomposition.pca参数介绍。

下面主要基于sklearn.decomposition.PCA来说明如何使用scikit-learn进行PCA降维。a类基本不需要参数调整。一般来说,我们只需要指定我们需要降维到的维度,或者我们希望降维后的主成分方差占原始维度中所有特征方差和的比值阈值。

现在我们将介绍sklearn . declaration . PCA的主要参数:

1)n_components:这个参数可以帮助我们指定PCA降维后的特征维数。最常用的方法是直接指定要减少的维数,其中n_components是大于或等于1的整数。当然,我们也可以指定主成分的方差和最小比例阈值,让PCA类根据样本特征的方差来决定降维的维数。此时,n_components是一个介于(0,1)之间的数字。当然,我们也可以将参数设置为‘MLE’。此时,PCA类会根据特征的方差分布,使用mle算法选择一定数量的主成分特征。我们也可以使用默认值,即不输入n_components,其中n_components=min(样本数、特征数)。

2)美白:确定是否进行美白。白化意味着在降维之后归一化数据的每个特征,使得方差为1。一般来说,主成分分析本身的降维不需要白化。如果PCA降维后有后续的数据处理动作,可以考虑白化。默认值为False,即不执行白化。

3)svd_solver:是指定svd的方法。由于特征分解是奇异值分解的特例,一般的主成分分析库都是基于奇异值分解的。有4个可选值:{'auto ',' full ',' arpack ',' random ' }。随机化一般适用于数据量大、数据维数多、主成分比例低的PCA降维。它使用一些随机算法来加速奇异值分解。Full是传统意义上的SVD,它使用了scipy库的相应实现。arpack和随机化的适用场景相似。不同的是,随机化使用scikit-learn自己的SVD实现,而arpack直接使用scipy库的稀疏SVD实现。默认为Auto,即PCA类会在上述三种算法中自行权衡,选择合适的SVD算法进行降维。一般来说,使用默认值就足够了。

除了这些输入参数,还有两个PCA类的成员值得关注。首先是explained _ variance,表示降维后主成分的方差。方差值越大,主成分越重要。二是explained _ variation _ ratio _,表示降维后各主成分的方差值与总方差值的比值。比值越大,主成分越重要。

主成分分析的例子。

让我们用一个例子来学习PCA在scikit-learn中的使用。为了便于可视化,让大家有一个直观的了解,我们这里用三维数据来降维。

首先,我们生成随机数据并将其可视化。代码如下:

将numpy作为np导入

将matplotlib.pyplot导入为plt

来自mpl_toolkits.mplot3d impor

t Axes3D

%matplotlib inline

from sklearn.datasets.samples_generator import make_blobs

# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本3个特征,共4个簇

X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3,3, 3], [0,0,0], [1,1,1], [2,2,2]], cluster_std=[0.2, 0.1, 0.2, 0.2], 

                  random_state =9)

fig = plt.figure()

ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)

plt.scatter(X[:, 0], X[:, 1], X[:, 2],marker='o')

    三维数据的分布图如下:

怎么使用scikit-learn工具来进行PCA降维

    我们先不降维,只对数据进行投影,看看投影后的三个维度的方差分布,代码如下:

from sklearn.decomposition import PCA

pca = PCA(n_components=3)

pca.fit(X)

print pca.explained_variance_ratio_

print pca.explained_variance_

    输出如下:

[ 0.98318212  0.00850037  0.00831751]

[ 3.78483785  0.03272285  0.03201892]

    可以看出投影后三个特征维度的方差比例大约为98.3%:0.8%:0.8%。投影后第一个特征占了绝大多数的主成分比例。

    现在我们来进行降维,从三维降到2维,代码如下:

pca = PCA(n_components=2)

pca.fit(X)

print pca.explained_variance_ratio_

print pca.explained_variance_

    输出如下:

[ 0.98318212  0.00850037]

[ 3.78483785  0.03272285]

    这个结果其实可以预料,因为上面三个投影后的特征维度的方差分别为:[ 3.78483785  0.03272285  0.03201892],投影到二维后选择的肯定是前两个特征,而抛弃第三个特征。

    为了有个直观的认识,我们看看此时转化后的数据分布,代码如下:

X_new = pca.transform(X)

plt.scatter(X_new[:, 0], X_new[:, 1],marker='o')

plt.show()

    输出的图如下:

怎么使用scikit-learn工具来进行PCA降维

    可见降维后的数据依然可以很清楚的看到我们之前三维图中的4个簇。

    现在我们看看不直接指定降维的维度,而指定降维后的主成分方差和比例。

pca = PCA(n_components=0.95)

pca.fit(X)

print pca.explained_variance_ratio_

print pca.explained_variance_

print pca.n_components_

    我们指定了主成分至少占95%,输出如下:

[ 0.98318212]

[ 3.78483785]

1

    可见只有第一个投影特征被保留。这也很好理解,我们的第一个主成分占投影特征的方差比例高达98%。只选择这一个特征维度便可以满足95%的阈值。我们现在选择阈值99%看看,代码如下:

pca = PCA(n_components=0.99)

pca.fit(X)

print pca.explained_variance_ratio_

print pca.explained_variance_

print pca.n_components_

    此时的输出如下:

[ 0.98318212  0.00850037]

[ 3.78483785  0.03272285]

2

    这个结果也很好理解,因为我们第一个主成分占了98.3%的方差比例,第二个主成分占了0.8%的方差比例,两者一起可以满足我们的阈值。

    最后我们看看让MLE算法自己选择降维维度的效果,代码如下:

pca = PCA(n_components='mle')

pca.fit(X)

print pca.explained_variance_ratio_

print pca.explained_variance_

print pca.n_components_

    输出结果如下:

[ 0.98318212]

[ 3.78483785]

1

可见由于我们的数据的第一个投影特征的方差占比高达98.3%,MLE算法只保留了我们的第一个特征。

上述内容就是怎么使用scikit-learn工具来进行PCA降维,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65919.html

(1)

相关推荐

  • linux中find命令、正则表达式、三剑客之grep基本使用

    技术linux中find命令、正则表达式、三剑客之grep基本使用 linux中find命令、正则表达式、三剑客之grep基本使用一、find命令的基本使用find 命令主要用于查找目录和文件,可以指定

    礼包 2021年12月21日
  • 如何进行Oracle监听器日志的解析

    技术如何进行Oracle监听器日志的解析如何进行Oracle监听器日志的解析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。///////////////

    攻略 2021年11月30日
  • 生茶,普洱茶是生茶好还是熟茶好

    技术生茶,普洱茶是生茶好还是熟茶好普洱茶生茶和熟茶各有特色,没有谁好谁坏,普洱茶生茶制作工艺为杀青、揉捻后蒸压成饼,普洱熟茶则主要为渥堆发酵生茶;颜色方面,普洱生茶初为青绿、墨绿,而普洱熟茶颜色呈红褐色;普洱生茶口感强烈

    生活 2021年10月22日
  • 闯红灯12123多久能显示,闯红灯后多长时间能查到违章

    技术闯红灯12123多久能显示,闯红灯后多长时间能查到违章一般情况,如果是通过网上的车辆违章进行查询,5个工作日可以查询到了,因为交警队需要输入和核对确认的,最晚不超过13个工作日闯红灯12123多久能显示。如果去车管所

    生活 2021年10月31日
  • 螓怎么读,在问大侠荣威5501.8启螓版

    技术螓怎么读,在问大侠荣威5501.8启螓版你的是1螓怎么读。8T的吗带T的保养要贵一些,机油有讲究的,一定要按时换机油。另外最好热车和冷车。5年左右可能要换了,好几万噢,另外带T的发动机转速上去涡轮介入后发动机噪音会大

    生活 2021年10月24日
  • 焦虑症状,抑郁症焦虑症都有些什么症状

    技术焦虑症状,抑郁症焦虑症都有些什么症状焦虑和抑郁都有什么症状?这个问题本来可以网上搜索,但是简明介绍一下的话,会更能够帮助人加深理解焦虑症状。焦虑和抑郁都是典型的心理问题,都是人遇到了某种困难,走不出去,所导致的不良身

    生活 2021年10月26日