利用statsmodels.formula.api进行主成分分析
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进行主成分分析的基本步骤。主成分分析是一种非常有用的技术,可以用于数据预处理、降维和特征提取等任务。
