混合稀疏数据的可扩展因子分析

truncated-famd的Python项目详细描述


截断的famd

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

目录

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

被截断的famd没有任何额外的依赖关系,除了水蟒中包含的常见嫌疑(sklearnpandasnumpy)之外。

用法

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

指南

truncated\u famd集成了根据数据结构自动选择svd\u解算器的功能,以及n\u组件的功能参数sklearn.decomposition.pca拥有和处理稀疏输入的能力,该稀疏输入具有和对以小批量形式处理数据的支持,使处理大数据成为可能,从增量pca。因此,截断的famd适合处理大型稀疏输入。

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

在hood下,truncated famd对从原始数据中按顺序获取的数据块使用部分拟合方法,只存储成分方差和噪声方差的估计值,以递增方式更新解释方差比。这就是为什么内存使用取决于每个批的样本数,而不是数据集中要处理的样本数。

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

  • 基本PCA->;PCA->;CA->;MCA
  • 基本PCA->;PCA->;MFA->;FAMD

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

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

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

主成分分析:主成分分析

主成分分析(标准缩放器=真,n_分量=2,SVD_解算器=自动,白色=假,复制=真, tol=none,iterated_power=2,batch_size=none,random_state=none):

参数:

  • 标准缩放器(bool):是否对每列进行标准缩放。
  • n_components(int、float、none或string):要计算的主要组件的数量。请参阅sklearn.decomposition.pca
  • svd解算器(字符串{autofullarpack随机化}):注意,如果输入数据稀疏,svd解算器:{arpack随机化}。请参见sklearn.decomposition.pca
  • 迭代功率(int):当svd撸u解算器=随机
  • 时用于计算svd的迭代次数。
  • tol(float>;=0,可选(默认值为0)):由svd戥u解算器计算的奇异值的公差=arpack
  • 复制(bool):是否就地执行计算。
  • 批大小(int或none):每个批使用的样本数。仅在呼叫Fit时使用。如果批量大小为none,则从数据推断批量大小并设置为5*n_特征,以在近似精度和内存消耗之间提供平衡。
  • 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_)
[2.37837661 0.02162339]

>>>print(pca.explained_variance_ratio_)
[0.99099025 0.00900975]
>>>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类继承自PCA类。

示例:

>>>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,iterated_power=2)
>>>ca.fit(X)
CA(batch_size=None, copy=True, iterated_power=2, n_components=2,
  random_state=None, svd_solver='auto', tol=None))

>>> print(ca.explained_variance_)
[0.02811427 0.01346975]

>>>print(ca.explained_variance_ratio_)
[0.54703122 0.26208655]

>>>print(ca.transform(X))
[[-0.74276079 -0.24252589]
 [-0.02821543  0.27099114]
 [ 0.47655683 -0.53616059]
 [ 0.11871109 -0.10247506]
 [ 0.06085895 -0.15267951]
 [ 0.89766224 -0.19222481]
 [ 0.683192    0.67379238]
 [-0.66493196 -0.08886992]
 [-0.81955305 -0.08935231]
 [-0.21371233  0.48649714]]


多重对应分析:mca

MCA类继承自CA类。

>>>import pandas as pd
>>>X=pd.DataFrame(np.random.choice(list('abcde'),size=(50,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,iterated_power=2)
>>>mca.fit(X)
MCA(batch_size=None, copy=True, iterated_power=2, n_components=2,
  random_state=None, svd_solver='auto', tol=None)

>>>print(mca.column_correlation(X))
            0         1
A_a       NaN       NaN
A_b -0.343282 -0.450314
A_c       NaN -0.525714
A_d  0.606039       NaN
A_e -0.482576  0.561833
B_a       NaN -0.303963
B_b  0.622119  0.333704
B_c       NaN       NaN
B_d -0.396896       NaN
B_e       NaN  0.359454
C_a       NaN  0.586749
C_b -0.478460       NaN
C_c       NaN -0.389922
C_d       NaN       NaN
C_e  0.624175       NaN
D_a -0.579454  0.453070
D_b       NaN       NaN
D_c       NaN -0.592007
D_d  0.487821       NaN
D_e       NaN       NaN

>>>print(mca.explained_variance_)
[0.0104482  0.00964206]

>>>print(mca.explained_variance_ratio_)
[0.00261205 0.00241051]

>>>print(mca.transform(X)) 
[[ 4.75897353e-01  1.18328365e+00]
 [-7.44935557e-01  8.80467767e-01]
 [ 8.75427551e-01  5.25160608e-01]
 [ 4.59454326e-01 -4.06521487e-01]
 [ 9.37769179e-01 -7.65735918e-01]
 [-8.34480014e-01  9.82195557e-01]
 [-4.01418791e-03 -9.82014024e-01]
 [-9.98029713e-02  5.25646968e-01]
 [-4.70148309e-01  1.71969029e-03]
 [-8.88880685e-01 -3.95681877e-01]
 [ 1.73157292e+00  3.59962430e-01]
 [ 5.56384642e-01 -4.90593710e-01]
 [-8.34480014e-01  9.82195557e-01]
 [-4.66163214e-01 -1.04999945e+00]
 [-3.65088651e-01  5.85105538e-02]
 [ 1.02856977e+00 -5.33364595e-01]
 [-4.94864281e-01 -7.14484346e-01]
 [-5.47243985e-01  2.59249764e-01]
 [-1.20025145e-02  4.19830209e-01]
 [ 8.96709363e-01  1.29732542e-01]
 [-2.44747616e-01 -5.78512715e-01]
...

多因素分析: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=(100,2)),columns=list('AB'))
>>>X_c =pd.DataFrame(np.random.choice(list('abcde'),size=(100,4),replace=True),columns =list('CDEF'))
>>>X=pd.concat([X_n,X_c],axis=1)
>>>print(X)
A   B  C  D  E  F
0   32  26  e  b  b  c
1   41  90  e  c  c  e
2   16   2  a  b  b  c
3   22  74  a  d  d  a
4   97  41  d  b  b  a
5   35  18  c  d  a  a
6   95  16  c  d  a  a
7   47   1  c  e  e  c
8    2  24  c  b  c  e
9   82  95  b  c  a  a
10  93  60  a  d  b  e
11  36  56  e  c  a  a
12  30  75  b  c  b  e
13  20  68  b  e  e  a
14  94  98  b  c  e  c
15   8  87  c  b  c  c
16  34  35  c  a  c  b
17  56   6  c  a  d  d
18  33  94  e  a  c  d
19  76  42  a  c  b  c
20  83  62  a  e  d  c
21  65  63  d  e  d  d
22   4  12  a  d  a  a
23  73  38  a  e  e  b
...


>>>famd = FAMD(n_components=2)
>>>famd.fit(X)
FAMD(batch_size=None, copy=True, iterated_power=2, n_components=2,
   random_state=None, svd_solver='auto', tol=None)

>>>print(famd.explained_variance_)
[2.09216762 1.82830854]

>>>print(famd.explained_variance_ratio_)
[0.19719544 0.17232563]

>>> print(famd.column_correlation(X))
            0         1
C_a       NaN -0.545526
C_b       NaN  0.329485
C_c       NaN       NaN
C_d       NaN       NaN
C_e  0.233212  0.430677
D_a  0.308279       NaN
D_b       NaN       NaN
D_c       NaN  0.549633
D_d  0.331463 -0.364919
D_e -0.538894 -0.215123
E_a  0.403095 -0.468114
E_b       NaN  0.203875
E_c  0.199005  0.402092
E_d -0.241785       NaN
E_e -0.278375       NaN
F_a  0.432976 -0.237807
F_b  0.210518       NaN
F_c -0.820450       NaN
F_d       NaN       NaN
F_e  0.240326  0.480436


>>>print(famd.transform(X)) 
[[-10.63120157   9.03256199]
 [  7.2594962   20.41834095]
 [-15.25371982  -2.37627147]
 [  3.11348646 -14.51376937]
 [  1.16397889   2.77352044]
 [ 14.62345611 -14.83857274]
 [ 14.62345611 -14.83857274]
 [-17.26519048  -6.58745196]
 [  4.62106121   9.22232575]
 [  9.60947121   2.49750339]
 [  2.14508201  -4.2707566 ]
 [ 12.26245577   3.06721231]
 [  1.2800622   17.53643902]
 [ -4.38821966  -2.6828045 ]
 [-12.4878278    8.57298192]
...

>>>print(famd.fit_transform(X))
[[-10.63120157   9.03256199]
 [  7.2594962   20.41834095]
 [-15.25371982  -2.37627147]
 [  3.11348646 -14.51376937]
 [  1.16397889   2.77352044]
 [ 14.62345611 -14.83857274]
 [ 14.62345611 -14.83857274]
 [-17.26519048  -6.58745196]
 [  4.62106121   9.22232575]
 [  9.60947121   2.49750339]
 [  2.14508201  -4.2707566 ]
 [ 12.26245577   3.06721231]
 [  1.2800622   17.53643902]
 [ -4.38821966  -2.6828045 ]
 [-12.4878278    8.57298192]
...

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

推荐PyPI第三方库


热门话题
正在从节点解密字符串。Java中的js?   java未来超时和IO超时   java apache camel多播以异步方式执行聚合   java需要710次尝试在Android和Raspberry Pi之间建立socket连接   在Java中使用“+,”循环绘制形状   java安卓:如何计算两点之间的距离   java多线程Hello World   刷新后缓存共享变量的java Freemarker模板   java我试图通过迭代用整数填充数组,但我得到了ArrayIndexOutOfBoundsException   JNI C++到java 32位图像的不正确显示   java哪个更快:克隆还是使用流?   java cache2k和Generic T不能很好地结合在一起   java如何在读取文件之前更新文件内容?   java如何在GWT中从JSNI方法调用JSNI方法   将MySQL类型文本映射到Java Hibernate的类型   java如何按长度对字符串排序   java RecyclerView:在滚动期间不断更改数据