我需要一些帮助来开发这个逻辑。我有一个返回的数据框,总共有4列。让我们将列命名为I1、I2、I3、I4。
我想用I1解除来自I2的数据的关联。然后,我想将I3中的数据与I1和I2解除关联。最后,我想将I4中的数据与I1、I2和I3解除关联。
我试图以一种自动的方式来做这件事,所以如果我稍后决定添加第5列I5,它将自动将它与I1、I2、I3和I4解除关联。
我已经使用Euler方法评估了所需的非相关性数量。
参数:
S-需要unc取消关联的列数
初始值:
s=1和unc=0 #如果只有一列,则不需要取消关联
欧拉公式: uncn+1=sn+uncn & sn+1=sn+1
例如,如果添加了一个新列,
unc1 =s+ unc =1+0=1 #1需要不相关s1 = s+1 =1 +1 =2
如果添加了另一列(现在是3列)
unc2 = s1+unc1 =2+1=3#3需要取消相关关系
而且这个过程还在继续。
但问题是,我不知道如何将这种逻辑应用于python代码。
这是一个示例数据框和一个我用来解除数据关联的函数。
import pandas as pd
from sklearn import linear_model
d = {'I1':[10,20,30,40,50], 'I2':[11,21,31,41,51], 'I3':[12,22,32,42,52], 'I4':[13,23,33,43,53]}
some_dataframe = pd.DataFrame(data=d)
def linear_regression_model(main_data, data_i_want_to_uncorrelate):
lm = linear_model.LinearRegression()
model = lm.fit(main_data, data_i_want_to_uncorrelate)
X_variable = model.coef_
Intercept = model.intercept_
uncorelated_index1 = data_i_want_to_uncorrelate[data_i_want_to_uncorrelate.columns[0]] - (Intercept[0]+X_variable[0]*main_data[main_data.columns[0]])
return uncorelated_index1感谢你的帮助和你花时间提前帮助我!
发布于 2021-07-20 16:39:51
我认为您正在寻找数据矩阵X的某种矩阵分解,假设它有N行p列的N>=p (在您的特定情况下为N=5,p=4)。我会考虑QR分解,即X=Q*R Q是NxN正交的,R是恩智浦上三角的。让我们将Q的前p列命名为Q1,其余的列命名为Q2,而R的前p行将称为R1 (因为R是上三角形,所以其余的行为0)。然后,Q1在您的新数据帧中提供解除相关的列。QR因子分解中的(默认) "reduced“模式只会给你Q1,而不会计算Q2。
import numpy as np
X = some_dataframe.values
N, p = X.shape
Q1, R = np.linalg.qr(X)
decorrelated_dataframe = pd.DataFrame(data=Q1)如果现在在X上添加一个新的列,称为x,那么解相关的版本将简单地是x-Px,其中P是在Q1的列空间上的投影矩阵,即P=Q1*Q1.T (经过一些简化)。
x = some_dataframe.loc[:,'new_column']
decorrelated_dataframe.loc[:,'new_column'] = x - np.matmul(x, np.matmul(Q1, Q1.T))https://stackoverflow.com/questions/68439045
复制相似问题