如何解决变量和 PCA 的去相关
我需要对存储在数组 A
中的两个不同的标量预测变量(例如 B
和 values
)运行回归分析。然而,这两个预测因子彼此高度相关,因此我被告知首先通过 PCA 将它们去相关。我绝对不是 PCA 方面的专家,但到目前为止我所做的如下:
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
values = np.array([1,2,3,4,5],[10,11,12,13,14])
# step 1: scale both variables
valuesZ = StandardScaler().fit_transform(values)
# PCA decomposition
model = PCA(whiten=True)
pcaA = model.fit_transform(valuesZ) #fit the model
现在,据我所知,数组 pcaA
返回两个主成分的去相关值的 numpy 数组,其中第一个代表两个原始变量之间的大部分差异——对?如果是这样,我想知道这两个组件是否仍然可以被视为最终可用于回归的去相关(转换)变量。在我所指的某篇论文中,作者将两个去相关(转换)值命名为 A-against-B
和 B-against-A
,鉴于上述情况,这听起来让我感到困惑。
所以,我希望有人能给我一个正确方向的提示。谢谢!
解决方法
有几个问题:
-
Bz = StandardScaler().fit_transform(A)
应该是Bz = StandardScaler().fit_transform(B)
-
pcaA = model.fit_transform(Az)
:您只变换一个预测变量。
如果您执行以下操作:
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import numpy as np
from scipy.stats import pearsonr
A = np.array([1,2,3,4,5])
B = np.array([10,22,29,41,33])
print(f'Original correlation: {pearsonr(A,B)[0]}')
array = np.zeros((A.size,2))
array[:,0] = A
array[:,1] = B
# step 1: scale both variables
scaled_array = StandardScaler().fit_transform(array)
# PCA decomposition
model = PCA()
pca = model.fit_transform(scaled_array) # fit the model
print(f'New correlation: {pearsonr(pca[:,0],pca[:,1])[0]}')
输出:
Original correlation: 0.8764598212022146
New correlation: -5.551115123125783e-17
您最终会得到不相关的变量,然后可以将其用于回归。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。