python sklearn PCA源码阅读:参数n_components的设置(设为‘mle’出错的原因)

本文通过解决在使用PCA进行主成分分析时遇到的错误出发,详细解释了n_components参数的设置方法及其与svd_solver参数的关系。文章还介绍了如何根据不同场景正确配置这两个参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在介绍n_components参数之前,首先贴一篇PCA参数详解的文章:http://www.cnblogs.com/akrusher/articles/6442549.html

  按照文章中对于n_components的介绍,我对一个1000x9000的array进行了主成分分析,n_components选择为"mle“,即自动选择(因为刚接触PCA,并不知道咋设置( ˇˍˇ )),尝试几次,每次都会报出下面的错误.

  百思不得其解,终于通过阅读源码找到了原因。

就是因为svd_solver同样设置为了自动选择‘auto’,而它在选择的过程中,需要比较n_components,1,0.8*min(X.shape)的大小关系,所以会报错,所以n_components该如何设置?

n_components的设置与参数svd_solver的设置是相关联的,而它们的设置又都跟输入数据x的维度相关,通过阅读源码和说明文档总结如下。

  svd_solver的设置有四种情况:'auto','fill','arpack','randomized',自动选择  'auto'的选择机制如下: x.shape>500 并且 1<=n_components<0.8*min(x.shape)时,svd_solver=‘randomsize',否则,svd_solver=’full‘。

  n_components是要保留的成分,int 或者 string,缺省时默认为None,所有成分被保留,但是这三种设置并不适用于所有情况,下面的表格说明了两个参数之间的关联:

表格说明了n_components设置为‘mle’或整数时需要满足的条件,其中,“No”表示不能设置为该值。所以我们看到,只有输入数据的样本数多于特征数,并且svd_solver设置为‘full'时,才可以将n_components设置为’mle';同时注意当svd_solve设置为‘arpack’时,保留的成分必须少于特征数,即不能保留所有成分。另外,当n_components缺省时,所有成分被保留,最终保留的成分数为min(sample,features),原理在这里不做说明。

 

 

                   

 

转载于:https://www.cnblogs.com/bambipai/p/7787854.html

<think>嗯,用户问的是主成分分析(PCA)是什么,以及在Pythonpca.n_components_的作用。首先,我需要先回忆一下PCA的基本概念,确保自己理解正确。主成分分析是一种常用的降维技术,对吧?它通过线性变换将高维数据投影到低维空间,保留主要特征。核心应该是找到数据方差最大的方向,也就是主成分,然后利用这些主成分来重构数据,减少维度同时保留重要信息。 接下来,用户提到的pca.n_components_,这是Python中scikit-learn库里的PCA类的一个属性。我记得在应用PCA时,n_components参数可以指定要保留的主成分数量,或者用小数表示保留的方差比例。而n_components_属性可能存储了实际计算后的主成分数量,特别是在使用方差比例确定成分数时。比如用户设置n_components=0.95,这时候n_components_会给出实际保留了多少个成分才能达到95%的方差解释率。需要确认一下这个属性是否存在,以及它的具体作用,避免记混了其他类似的属性,比如components_是主成分向量,而explained_variance_ratio_是各成分的方差解释比例。 然后要组织回答的结构,先解释PCA,再讲Python中的实现,特别是n_components_的作用。注意用户可能需要知道这两个问题的答案,所以需要分点清晰。可能还需要举个小例子,说明在代码中如何应用,比如使用fit方法之后,查看n_components_的值,当设置不同参数时它的变化。比如当指定整数时,n_components_应该等于该整数;当指定0.95时,可能得到比原维度小的整数,表示满足条件的最小成分数。 还要注意检查是否有常见的误区,比如n_components_和n_components参数的关系,确保解释准确。同时,可能用户在使用PCA时遇到问题,比如不清楚为何自动选择成分数后得到的结果,这时候n_components_可以帮助他们确认实际使用的数量。要确保回答真实可靠,可能需要参考scikit-learn的官方文档,确认属性的定义和用法。 最后,用简洁的中文分步骤解释,先介绍PCA,再详细说明n_components_的作用,可能给出一个代码示例,并说明输出结果的含义。确保用户能理解这个属性在实际应用中的用途,例如在自动确定主成分数量时的应用场景。</think>### 一、主成分分析(PCA)的定义与作用 **主成分分析(Principal Component Analysis, PCA)** 是一种无监督的降维方法,核心目标是通过线性变换将高维数据映射到低维空间,同时保留数据中的主要信息。其关键步骤为: 1. **协方差矩阵计算**:分析数据各维度间的相关性。 2. **特征值分解**:找到协方差矩阵的特征值和特征向量。 3. **主成分选取**:按特征值从大到小排序,选择前 $k$ 个特征向量(主成分),将原始数据投影到这些主成分构成的新坐标系中。 例如,若原始数据有 $d$ 维,通过PCA可将其降至 $k$ 维($k < d$),同时最大化保留数据的方差(即信息量)。 --- ### 二、`pca.n_components_` 在Python中的作用 在Python的 `sklearn.decomposition.PCA` 中,`n_components_` 属性表示 **实际使用的主成分数量**。其具体行为取决于初始化PCA时的参数 `n_components`: 1. **当 `n_components` 设为整数**: - 例如 `PCA(n_components=2)`,此时 `pca.n_components_` 会直接返回 `2`。 2. **当 `n_components` 设为浮点数(如0.95)**: - PCA会自动选择满足“累计方差解释率 ≥ 95%”的最小主成分数,并将该数值赋给 `n_components_`。 - 例如,若需要前3个主成分才能达到95%的方差,则 `pca.n_components_` 返回 `3`。 --- ### 三、代码示例 ```python from sklearn.decomposition import PCA from sklearn.datasets import load_iris # 加载数据 data = load_iris() X = data.data # 初始化PCA(自动选择主成分数) pca = PCA(n_components=0.95) pca.fit(X) # 查看实际使用的主成分数量 print(pca.n_components_) # 输出可能为2或3,取决于数据方差分布 ``` --- ### 四、总结 - **PCA的本质**:通过保留最大方差方向实现降维,常用于数据压缩、去噪或可视化。 - **`n_components_` 的意义**:反映实际生效的主成分数量,尤其当通过方差比例自动选择时,可帮助用户验证降维结果是否符合预期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值