混合稀疏数据的可扩展因子分析
truncated-famd的Python项目详细描述
截断的famd
truncated\u famd
是一个处理混合数据因子分析的库。这包括多种方法,包括主成分分析(PCA)和乘法。对应分析(MCA)。我们的目标是为每个算法提供一个高效的、截短的实现,以及一个scikit学习api。
目录
被截断的famd
没有任何额外的依赖关系,除了水蟒中包含的常见嫌疑(sklearn
,pandas
,numpy
)之外。
用法
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
)
下一小节将概述每个方法以及用法信息。如果您想深入研究,下面的论文将对因子分析领域进行一个很好的概述:
- 主成分分析教程
- 通信分析理论
- 寻找随机结构:构造近似矩阵分解的概率算法
- 多对应分析的计算,代码位于r
- 奇异值分解教程
- 多因素分析
主成分分析:主成分分析
主成分分析(标准缩放器=真,n_分量=2,SVD_解算器=自动,白色=假,复制=真, tol=none,iterated_power=2,batch_size=none,random_state=none):
参数:
标准缩放器
(bool):是否对每列进行标准缩放。n_components
(int、float、none或string):要计算的主要组件的数量。请参阅sklearn.decomposition.pcasvd解算器
(字符串{auto
,full
,arpack
,随机化
}):注意,如果输入数据稀疏,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]
...