怎么使用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)

相关推荐

  • 真心话劲爆污,你还剩几个能说心里话的朋友

    技术真心话劲爆污,你还剩几个能说心里话的朋友应该没有了真心话劲爆污,随着年龄的增加,越来越不想跟别人说什么,说了也会莫名其妙的惹些烦恼!心里话,只能自己消耗,并不能跟别人说,说多了自寻烦恼而已。而且一般心里话都是一些烦恼

    2021年10月20日
  • 作文小字帖

    技术作文小字帖 作文小字帖(下载链接:https://pan.baidu.com/s/1xDkE1d_Pq5mwMDs94zyZ8Q; 提取码:1234)
    小孩上小学有写字作业。又要看字形、又要学笔画、

    礼包 2021年10月27日
  • 如何卸载软件,怎样卸载软件才能把软件卸载干净

    技术如何卸载软件,怎样卸载软件才能把软件卸载干净要保证卸载软件时彻底干净、没有残留,可以使用软件管家来卸载如何卸载软件。 由于有些应用软件在安装后,会在注册表中注册,同时还会自动生成附属的文件夹,在系统的控制面板中卸载软

    生活 2021年10月30日
  • css盒子溢出的所有内容隐藏(css对图片设置隐藏左边部分)

    技术css如何设置图片放大后隐藏溢出这篇文章主要介绍“css如何设置图片放大后隐藏溢出”,在日常操作中,相信很多人在css如何设置图片放大后隐藏溢出问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年12月13日
  • 图表可视化ppt(ppt如何制作可视化数据图表)

    技术如何用ppt做出惊艳的可视化图表呢这期内容当中小编将会给大家带来有关如何用ppt做出惊艳的可视化图表呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在做年底的总结报告里,总少不了数

    攻略 2021年12月22日
  • row cache lock引起的性能问题的处理分析是什么

    技术row cache lock引起的性能问题的处理分析是什么本篇文章为大家展示了row cache lock引起的性能问题的处理分析是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有

    攻略 2021年12月1日