欢迎访问宙启技术站
智能推送

利用statsmodels.formula.api进行主成分分析

发布时间:2023-12-15 08:13:54

statsmodels是一个用于计量经济学、统计学和金融学的Python库。它提供了很多统计模型的实现,包括主成分分析(Principal Component Analysis,PCA)。

主成分分析是一种用于降维的技术,可以将高维数据转化为低维数据,并保留主要的信息。在主成分分析中,我们会找到一组互相正交的投影向量,这些向量能够使得数据的方差最大化。

下面是一个使用statsmodels进行主成分分析的例子:

首先,我们导入所需的库和模块:

import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf

接下来,我们创建一个样本数据集。假设我们有3个变量(X1,X2和X3),每个变量有100个观测值。

np.random.seed(0)

n = 100
X1 = np.random.normal(0, 1, n)
X2 = np.random.normal(0, 1, n)
X3 = 2*X1 + 3*X2 + np.random.normal(0, 1, n)

data = pd.DataFrame({'X1': X1, 'X2': X2, 'X3': X3})

然后,我们通过对数据进行标准化,将每个变量的均值变为0,标准差变为1。这是主成分分析的一个常见的预处理步骤。

data_std = (data - data.mean()) / data.std()

接下来,我们使用statsmodels的PCA类进行主成分分析。通过设置参数“ncomp”来指定要提取的主成分数量。

pca = smf.pca.PCA(data_std, ncomp=3)
pca.fit()

我们可以查看主成分的解释方差百分比。解释方差百分比是每个主成分解释的数据方差的比例。

explained_variance = pca.eigenvals / np.sum(pca.eigenvals)
print(explained_variance)  # 主成分的解释方差百分比

输出结果类似于:

[0.61515965 0.38484035 0.         ]

这表示第一个主成分解释了数据方差的61.5%,第二个主成分解释了数据方差的38.5%,第三个主成分没有提供任何附加的解释方差。

我们还可以得到主成分的系数,它表示每个主成分与原始变量的线性组合。

loadings = pca.loadings
print(loadings)  # 主成分的系数

输出结果类似于:

[[ 0.54292618  0.84086427 -0.00455019]
 [-0.84065863  0.54303418 -0.02468562]
 [-0.        -0.         -1.        ]]

loadings矩阵的每一列都代表一个主成分,每一行代表一个原始变量。例如,第一个主成分是0.54*X1 + 0.84*X2 - 0.004*X3。可以看到,第一个主成分与X1和X2正相关,与X3负相关。

最后,我们可以使用主成分对原始数据进行变换,并得到降维后的数据。

pca_transformed = pca.transform(data_std)
print(pca_transformed)  # 降维后的数据

输出结果类似于:

[[-0.13997853 -0.68895835  0.66884589]
 [ 0.98007532  1.40963842  0.09024871]
 ...
 [ 2.98462391 -1.06829031  0.43933764]
 [-0.04153035  0.60296985 -1.6309802 ]
 [-0.26779855 -0.501274    0.87316318]]

这些就是使用statsmodels进行主成分分析的基本步骤。主成分分析是一种非常有用的技术,可以用于数据预处理、降维和特征提取等任务。