混合数据的光因子分析

light-famd的Python项目详细描述


轻燃料

light\u famd是一个处理混合数据因子分析的库。这包括多种方法,包括主成分分析(PCA)和乘法。对应分析(MCA)。我们的目标是为每个算法提供一个高效、轻巧的实现,以及一个scikit学习api。

目录

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

除了水蟒身上常见的嫌疑犯(sklearnpandasnumpy)之外,light famd没有任何额外的依赖关系。

用法

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

指南

由light famd提供的每个基本估计器(ca,pca)扩展了scikit learn的(transformermixin,base估计器)。这意味着我们可以直接使用fit\u transform,和(set_params,get_params)方法。

在引擎盖下,light famd使用一个svd的随机版本。该算法利用随机化方法找到一个(通常非常好的)近似截断奇异值分解,以加快计算速度。对于只希望提取少量组件的大型矩阵,它的速度特别快。为了进一步加速,可以设置n_iter<;=2(以损失精度为代价)。但是,如果您想要可重复的结果,则应设置random_state参数。

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

在这个包中,继承关系如下所示(a->;b:a是b的超类):

  • PCA->;MFA->;FAMD
  • ca->;最大可信区间

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

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

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

请注意,light\u famd不支持稀疏输入,有关稀疏和大数据的替代方法,请参见truncated\u famd

主成分分析:主成分分析

主成分分析(用平均值=真重新缩放,用标准值=真重新缩放,n组分=2,n组分=3, copy=true,check_input=true,random_state=none,engine='auto'):

参数:

  • 用平均值重新缩放(bool):是否减除每列的平均值。
  • 使用"标准"重新缩放(bool):是否将每列除以其标准偏差。
  • n_分量(int):要计算的主分量的数目。
  • n(int):用于计算svd的迭代次数。
  • 复制(bool):是否就地执行计算。
  • 检查输入(bool):是否检查输入的一致性。
  • 引擎(字符串):"auto":随机SVD,"fBPCA":Facebook的随机SVD实现
  • random_state(int,randomstate instance或none,可选(默认值为none):在数据洗牌时使用的-伪随机数生成器的种子。如果是int,则random_state是随机数生成器使用的种子;如果是random state实例,则random_state是随机数生成器;如果不是,则random数生成器是np.random使用的随机状态实例。 返回ndarray(m,k),m:样本数,k:组件数。

示例:

>>>import numpy as np
>>>from Light_Famd import PCA
>>>X = pd.DataFrame(np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]),columns=list('ABC'))
>>>pca = PCA(n_components=2)
>>>pca.fit(X)
PCA(check_input=True, copy=True, engine='auto', n_components=2, n_iter=3,
  random_state=None, rescale_with_mean=True, rescale_with_std=True)

>>>print(pca.explained_variance_)
[11.89188304  0.10811696]

>>>print(pca.explained_variance_ratio_)
[0.9909902530309821, 0.00900974696901714]
>>>print(pca.column_correlation(X))  #You could call this method once estimator is >fitted.correlation_ratio is pearson correlation between 2 columns values,
where p-value >=0.05 this similarity is `Nan`.
          0   1
A -0.995485 NaN
B -0.995485 NaN

>>>print(pca.transform(X))
[[ 0.82732684 -0.17267316]
 [ 1.15465367  0.15465367]
 [ 1.98198051 -0.01801949]
 [-0.82732684  0.17267316]
 [-1.15465367 -0.15465367]
 [-1.98198051  0.01801949]]
>>>print(pca.fit_transform(X))
>[[ 0.82732684 -0.17267316]
 [ 1.15465367  0.15465367]
 [ 1.98198051 -0.01801949]
 [-0.82732684  0.17267316]
 [-1.15465367 -0.15465367]
 [-1.98198051  0.01801949]]

对应分析:ca

ca(n_components=2,n_iter=10,copy=true,check_input=true,random_state=none, 发动机='auto'):

参数:

  • n_分量(int):要计算的主分量的数目。
  • 复制(bool):是否就地执行计算。
  • 检查输入(bool):是否检查输入的一致性。
  • 引擎(字符串):"auto":随机SVD,"fBPCA":Facebook的随机SVD实现
  • random_state(int,randomstate instance或none,可选(默认值为none):在数据洗牌时使用的-伪随机数生成器的种子。如果是int,则random_state是随机数生成器使用的种子;如果是random state实例,则random_state是随机数生成器;如果不是,则random数生成器是np.random使用的random state实例。

返回ndarray(m,k),m:样本数,k:组件数。

示例:

>>>import numpy as np
>>>from Light_Famd import CA
>>>X  = pd.DataFrame(data=np.random.randint(0,100,size=(10,4)),columns=list('ABCD'))
>>>ca=CA(n_components=2,n_iter=2)
>>>ca.fit(X)
CA(check_input=True, copy=True, engine='auto', n_components=2, n_iter=2,
  random_state=None)

>>> print(ca.explained_variance_)
[0.09359686 0.04793262]

>>>print(ca.explained_variance_ratio_)
[0.5859714238674507, 0.3000864001658787]

>>>print(ca.transform(X))
[[-0.18713811  0.09830335]
 [ 0.34735892  0.34924107]
 [ 0.33511949 -0.29842395]
 [-0.26200927 -0.14201485]
 [-0.21803569  0.0977655 ]
 [-0.25482535 -0.16019826]
 [ 0.09899818 -0.15015664]
 [-0.24835074  0.54054788]
 [-0.21056433 -0.29941039]
 [ 0.33904416  0.04835469]]


多重对应分析:mca

MCA类继承自CA类。

>>>import pandas as pd
>>>X=pd.DataFrame(np.random.choice(list('abcde'),size=(10,4),replace=True),columns =list('ABCD'))
>>>print(X)
   A  B  C  D
0  e  a  a  b
1  b  e  c  a
2  e  b  a  c
3  e  e  b  c
4  b  c  d  d
5  c  d  a  c
6  a  c  e  a
7  d  b  d  b
8  e  a  e  e
9  c  a  e  b
>>>mca=MCA(n_components=2)
>>>mca.fit(X)
MCA(check_input=True, copy=True, engine='auto', n_components=2, n_iter=10,
  random_state=None)

>>>print(mca.explained_variance_)
[0.8286237  0.67218257]

>>>print(mca.explained_variance_ratio_)
[0.2071559239010482, 0.16804564240579373]

>>>print(mca.transform(X)) 
[[-0.75608657  0.17650888]
 [ 1.39846026 -1.17201511]
 [-0.77421024 -0.04847214]
 [-0.32829309 -1.19959921]
 [ 1.49371661  0.90485916]
 [-1.00518879 -0.41815679]
 [ 1.11265365 -0.14764943]
 [-0.07786514  1.66121318]
 [-0.51081888 -0.06676941]
 [-0.55236782  0.31008086]]

多因素分析:mfa

mfa类继承自pca类。 由于famd类继承自mfa,因此famd唯一要做的事情是确定参数,并将其与超类mfa进行比较,因此我们跳过这个小部分直接转到要famd

混合数据的因子分析:famd

famd继承自mfa类,这意味着您可以访问mfa类的所有方法和属性。

>>>import pandas as pd
>>>X_n = pd.DataFrame(data=np.random.randint(0,100,size=(10,2)),columns=list('AB'))
>>>X_c =pd.DataFrame(np.random.choice(list('abcde'),size=(10,4),replace=True),columns =list('CDEF'))
>>>X=pd.concat([X_n,X_c],axis=1)
>>>print(X)
    A   B  C  D  E  F
0  11  67  a  a  d  e
1  43  67  d  d  d  a
2  40   3  d  b  c  b
3  81  66  e  b  c  c
4  36  50  e  a  c  e
5  95  69  b  d  e  a
6  57  71  d  c  d  c
7  29  58  e  e  d  d
8  67  27  b  e  d  e
9  78  20  e  d  a  a

>>>famd = Light_FAMD.FAMD(n_components=2)
>>>famd.fit(X)
FAMD(check_input=True, copy=True, engine='auto', n_components=2, n_iter=3,
   random_state=None)

>>>print(famd.explained_variance_)
[15.41428212  9.53118994]

>>>print(famd.explained_variance_ratio_)
[0.27600556629884937, 0.17066389830189396]

>>> print(famd.column_correlation(X))
            0         1
A         NaN       NaN
B         NaN       NaN
C_a       NaN       NaN
C_b       NaN       NaN
C_d       NaN       NaN
C_e       NaN       NaN
D_a       NaN       NaN
D_b       NaN       NaN
D_c       NaN       NaN
D_d       NaN  0.947742
D_e       NaN       NaN
E_a       NaN       NaN
E_c       NaN       NaN
E_d  0.759576       NaN
E_e       NaN       NaN
F_a       NaN  0.947742
F_b       NaN       NaN
F_c       NaN       NaN
F_d       NaN       NaN
F_e       NaN       NaN



>>>print(famd.transform(X)) 
[[ 4.15746579 -2.87023941]
 [ 4.95755717  3.74813131]
 [ 2.6358626  -1.87761681]
 [ 3.4203849  -2.2485009 ]
 [ 4.10436826 -3.57317268]
 [ 2.88436338  5.65046057]
 [ 3.92172253 -0.41161253]
 [ 4.48442501 -1.30359035]
 [ 4.42018651 -0.77402381]
 [ 3.66615694  4.15701604]]

print(famd.fit_transform(X))
[[ 4.15746579 -2.87023941]
 [ 4.95755717  3.74813131]
 [ 2.6358626  -1.87761681]
 [ 3.4203849  -2.2485009 ]
 [ 4.10436826 -3.57317268]
 [ 2.88436338  5.65046057]
 [ 3.92172253 -0.41161253]
 [ 4.48442501 -1.30359035]
 [ 4.42018651 -0.77402381]
 [ 3.66615694  4.15701604]]

加速

默认情况下,light famd使用sklearn的随机svd实现。light famd的目标之一是使使用不同的svd后端成为可能。目前唯一受支持的后端是facebook的随机化svd实现。您可以通过将引擎参数设置为'fbpca'来使用它,或者参见truncated戋famd了解根据输入结构自动选择SVD戋解算器的另一种方法:

>>>importLight_FAMD>>>pca=Light_FAMD.PCA(engine='fbpca')

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

推荐PyPI第三方库


热门话题
javascript如何在jQuery函数中传递两个值,该函数获取数据并使用ajax发送到服务器?   java IOSDriver()不工作。相反,当我在测试用例通过时使用RemoteWebDriver()时,它正在打开远程会话   使用java对blob几何体进行二进制解码   java错误:Gradle:运行在Ubuntu 16.04上的Intellij 2017中的任务执行失败   java Lotus Notes邮件文档获取附件名称(和导出附件)   java如果库有副作用,这样可以吗?   java Javabat帮助:alarmClock   加载类时未初始化java静态变量   java限制htmlunit中的带宽   java Column_layout在安卓 tablelayout中不起作用   java在倒计时和打印循环时遇到问题   虚拟机我需要一个如何访问java虚拟机中的文件的帮助   java图像处理程序中的多线程