python中的统计因子分析

prince的Python项目详细描述


< div >Prince_logo
< BR>< div >PYPI versionpypi构建状态coverage statuslicense
< BR>

Prince是一个进行因子分析的库。这包括多种方法,包括主成分分析(PCA)和对应分析(CA)。我们的目标是为每个算法提供一个高效的实现以及一个scikit学习api。

目录

  • 安装
  • 用法
    • 指南
    • 主成分分析(PCA)
    • 通信分析(CA)
    • 多对应分析(MCA)
    • 多因素分析(MFA)
    • 混合数据的因子分析famd rel="nofollow">混合数据的因子分析(famd)
  • 走得更快
  • 许可证

安装

:警告:prince只与python 3兼容

:snake:虽然这不是一项要求,但强烈建议您使用蟒蛇

通过PYPI

>>> pip install prince  # doctest: +SKIP

通过Github获取最新开发版本

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP

除了水蟒身上常见的嫌疑犯(sklearnpandasmatplotlib)之外,普林斯没有任何额外的依赖关系。

用法

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility

指南

prince提供的每个估计器扩展了scikit learn的transformermixin。这意味着每一个估计或者实现一个fit和一个transform方法,使它们在转换管道中可用。fit方法实际上是返回行主成分的row_principal_components方法的别名。但是,您也可以使用列主体组件来访问列主体组件

Hood Prince使用随机版本的SVD。这比使用更常见的完整方法要快得多。然而,结果可能有一个小的内在随机性。对于大多数应用程序,这并不重要,您不必担心它。但是,如果您想要可重复的结果,则应设置random_state参数。

SVD的随机版本是一种迭代方法。由于prince的每个算法都使用svd,所以它们都有一个n_iter参数来控制用于计算svd的迭代次数。一方面,数值越高,结果就越精确。另一方面,增加n_iter会增加计算时间。一般来说,该算法收敛速度非常快,因此建议使用低n_iter(这是默认行为)。

根据您的情况,您应该使用每种方法:

  • 所有变量都是数字:使用主成分分析(prince.pca
  • 您有一个列联表:使用对应关系分析(prince.ca
  • 您有两个以上的变量,它们都是分类的:使用多对应分析(prince.mca
  • 有一组分类变量或数值变量:使用多因素分析(prince.mfa
  • 你有分类变量和数值变量:使用混合数据的因子分析(prince.famd

下一小节将概述每个方法以及用法信息。如果您想深入研究,下面的论文将对因子分析领域进行一个很好的概述:

主成分分析(PCA)

如果使用pca,则假定数据帧由连续的数值变量组成。在本例中,我们将使用虹膜花数据集。

>>>importpandasaspd>>>importprince>>>fromsklearnimportdatasets>>>X,y=datasets.load_iris(return_X_y=True)>>>X=pd.DataFrame(data=X,columns=['Sepal length','Sepal width','Petal length','Petal width'])>>>y=pd.Series(y).map({0:'Setosa',1:'Versicolor',2:'Virginica'})>>>X.head()SepallengthSepalwidthPetallengthPetalwidth05.13.51.40.214.93.01.40.224.73.21.30.234.63.11.50.245.03.61.40.2

pca类实现scikit learn的fit/transformapi。在调用fit方法之前,必须在初始化时传递参数。

>>>pca=prince.PCA(...n_components=2,...n_iter=3,...rescale_with_mean=True,...rescale_with_std=True,...copy=True,...check_input=True,...engine='auto',...random_state=42...)>>>pca=pca.fit(X)

可用参数为:

  • n_components:计算的组件数。如果你想做一个图表,你只需要两个。
  • n_iter:用于计算svd的迭代次数
  • 用"平均值"重新缩放:是否减除每列的平均值
  • 用std重新缩放:是否用标准偏差除以每一列n
  • 复制:如果false则计算将就地完成,这可能对输入数据产生副作用
  • 引擎:要使用的SVD引擎(应该是['auto','fbpca','sklearn']之一)
  • 随机状态:控制SVD结果的随机性。

一旦pca被拟合,它就可以用来提取行主坐标,如下所示:

>>>pca.transform(X).head()# Same as pca.row_coordinates(X).head()010-2.2647030.4800271-2.080961-0.6741342-2.364229-0.3419083-2.299384-0.5973954-2.3898420.646835

每一列代表一个主组件,而每一行代表原始数据集中的一行。您可以使用绘图行坐标显示这些投影方法:

>>>ax=pca.plot_row_coordinates(...X,...ax=None,...figsize=(6,6),...x_component=0,...y_component=1,...labels=None,...color_labels=y,...ellipse_outline=False,...ellipse_fill=True,...show_points=True...)>>>ax.get_figure().savefig('images/pca_row_coordinates.svg')
< div >

每一个主成分解释了分布的部分基础。您可以使用访问explained\u Inertia属性来查看访问量:

>>>pca.explained_inertia_# doctest: +ELLIPSIS[0.729624...,0.228507...]

所解释的惯量表示每个主分量贡献的惯量的百分比。如果n_components属性等于原始数据集中的列数,则其总和为1。所解释的惯量是用奇异值分解得到的特征值除以总惯量得到的,这两个特征值都是可以得到的。

>>>pca.eigenvalues_# doctest: +ELLIPSIS[437.774672...,137.104570...]>>>pca.total_inertia_# doctest: +ELLIPSIS600.0...>>>pca.explained_inertia_[0.729624...,0.228507...]

您还可以获得原始变量和主成分之间的相关性。

>>> pip install prince  # doctest: +SKIP
0

您可能还想知道每个观察对每个主成分的贡献有多大。这可以通过row\u contributions方法来完成。

>>> pip install prince  # doctest: +SKIP
1

您还可以使用逆变换方法将行投影转换回其原始空间。

>>> pip install prince  # doctest: +SKIP
2

对应分析(CA)

当您要分析列联表时,应该使用对应关系分析。换句话说,你想分析两个分类变量之间的依赖关系。下面的例子来自于本教科书的17.2.3节。它显示不同头发和眼睛颜色之间出现的次数。

>>> pip install prince  # doctest: +SKIP
3

p ca类不同,ca只公开scikit learn的fit方法。

>>> pip install prince  # doctest: +SKIP
4

参数和方法与pca类提出的参数和方法重叠。

>>> pip install prince  # doctest: +SKIP
5

您可以使用plot_coordinates方法绘制两组主坐标。

>>> pip install prince  # doctest: +SKIP
6 < div >

pca类似,您可以访问每个主分量的惯量贡献、特征值和总惯量。

>>> pip install prince  # doctest: +SKIP
7

多重对应分析(MCA)

多对应分析(mca)是对应分析(ca)的扩展。当有两个以上的分类变量时,应该使用它。这个想法很简单,就是计算一个数据集的热编码版本并对其应用ca。作为一个例子,我们将使用从uci数据集网站获取的气球数据集。

>>> pip install prince  # doctest: +SKIP
8

mca还实现了fittransform方法。

>>> pip install prince  # doctest: +SKIP
9

ca类一样,mca类也有plot_coordinates方法。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
0 < div >

特征值和惯量值也可访问。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
1

多因素分析(MFA)

多因素分析(mfa)是用来当你有一组变量。实际上,它在每个组上建立一个PCA——或者一个MCA,这取决于组变量的类型。然后,它根据所谓的部分pca(mcas)的结果构造一个全局pca。以下示例中使用的数据集来自本文。在数据集中,三位专家对六种不同的葡萄酒发表了自己的看法。每种葡萄酒的每种观点都被记录为一个变量。因此,我们希望考虑每个专家的不同意见,同时对每种葡萄酒进行全球概述。MFA非常适合这种情况。

首先,让我们复制论文中使用的数据。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
2

这些组作为字典传递给mfa类。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
3

现在我们可以安装一个mfa

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
4

mfa继承自pca类,这意味着您可以访问它的所有方法和属性。行坐标方法将返回每种葡萄酒的全局坐标。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
5

就像pca一样,您可以使用plot_row_coordinates方法绘制行坐标。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
6 < div >

还可以获取每个组中的行坐标。partial_row_coordinates方法返回一个pandas.dataframe其中的列集是一个pandas.multiindex。索引的第一级对应于每个指定的组,而嵌套的级别表示每个组中的坐标。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
7

例如,您可以使用plot_partial_row_coordinates方法可视化部分行坐标。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
8 < div >

像往常一样,您可以访问惯性信息。

>>> pip install git+https://github.com/MaxHalford/Prince  # doctest: +SKIP
9

您还可以通过部分因子分析属性访问有关每个部分因子分析的信息。

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
0

行贡献方法将为您提供每行相对于每个组件的惯性贡献。

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
1

column_correlations方法将返回原始变量和组件之间的相关性。

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
2

混合数据的因子分析(famd)

一个描述在路上。此部分为空,因为我必须对文档进行一些重构。

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
3

现在我们可以安装一个famd

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
4

famd继承自mfa类,这意味着您可以访问它的所有方法和属性。行坐标方法将返回每种葡萄酒的全局坐标。

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
5

就像mfa一样,您可以使用plot\u row\u coordinates方法绘制行坐标。

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
6 < div >

加速

默认情况下,prince使用sklearn的随机svd实现(在引擎盖下用于truncatedsvd)。Prince的目标之一是使使用不同的SVD后端成为可能。目前唯一受支持的后端是Facebook的随机svd实现称为fbpca。您可以通过将引擎参数设置为'fbpca'

importnumpyasnp;np.random.set_state(42)# This is for doctests reproducibility
7

如果您使用的是水蟒,那么您应该可以通过运行pip install fbpca,无需任何痛苦地安装fbpca

许可证

麻省理工学院的执照。有关详细信息,请参见许可文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何格式化servlet响应以生成HTML中“accept”参数可接受的媒体类型?   java如何使用JasperReports为单个报表传递多个结果集?   EclipseVBA到JAVA链接   java如何为Gradle中的不同配置配置PMD规则集?   在给出正确答案之前,是否要求回答?Java Eclipse   java查询SearchView崩溃(尝试实现SearchView操作栏)   java为什么跳过我的IF语句?   java循环以获取与输入值最接近的对象   java默认构造函数真正做什么?   java我需要测试类中的测试方法吗   java如何在代码中滚动滚动窗格?   java我需要获得发布和调试证书指纹的帮助   javascript如何在JS中取消Java“DES/CBC/PKCS5Padding”?