减少回归模型中一个变量对输出的影响
Posted
技术标签:
【中文标题】减少回归模型中一个变量对输出的影响【英文标题】:Diminishing the impact of one variable over output in a regression model 【发布时间】:2020-06-14 05:06:49 【问题描述】:目前我正在实现一个高斯回归过程模型,并且在尝试将其应用于我的问题范围时遇到了一些问题。我的问题是我的模型有三个变量作为输入,其中一个值 (theta
) 比其他两个值 (alpha1
和 alpha2
) 具有更大的影响。输入和输出具有以下值(只是几个值以便更好地理解):
# X (theta, alpha1, alpha2)
array([[ 9.07660169, 0.61485493, 1.70396493],
[ 9.51498486, -5.49212002, -0.68659511],
[10.45737558, -2.2739529 , -2.03918961],
[10.46857663, -0.4587848 , 0.54434441],
[ 9.10133699, 8.38066374, 0.66538822],
[ 9.17279647, 0.36327109, -0.30558115],
[10.36532505, 0.87099676, -7.73775872],
[10.13681026, -1.64084098, -0.09169159],
[10.38549264, 1.80633583, 1.3453195 ],
[ 9.72533357, 0.55861224, 0.74180309])
# y
array([4.93483686, 5.66226844, 7.51133372, 7.54435854, 4.92758927,
5.0955348 , 7.26606153, 6.86027353, 7.36488184, 6.06864003])
可以看出,theta
显着改变了 y 的值,而 alpha1
和 alpha2
的变化比 y 更微妙。
我面临的情况是,我正在将模型应用于我的数据,并且在该模型之外,我正在使用 Scipy 对模型进行最小化,将其中一个输入变量固定为该最小化。下面的代码可能会更好地说明:
# model fitting
kernel = C(1.0, (1e-3, 1e3))*RBF(10,(1e-2,1e2))
model = GaussianProcessRegressor(kernel = kernel, n_restarts_optimizer = 9,optimizer='fmin_l_bfgs_b')
model.fit(X,y)
# minimization
bnds = np.array([(theta,theta),
(alpha1.min(),
alpha1.max()),
(alpha2.min(),
alpha2.max())])
x0 = [theta,alpha1.min(),alpha2.min()]
residual_plant = minimize(lambda x: -model.predict(np.array([x])),
x0, method='SLSQP',bounds=bnds,
options = 'eps': np.radians(5))
我的目标是我想将第一个变量 value
设置为固定值,并且我想研究其他两个变量 alpha1
和 alpha2
对输出 y
的影响对于那个特定的theta
值。最小化背后的具体原因是,我想找到alpha t1
和alpha2
的组合,它们为我返回这个固定theta
的最佳y
。因此,我想知道我该怎么做,因为我相信theta
一定会极大地影响我的其他两个变量对我的输出的影响,然后它可能会对我的模型对我的任务产生负面影响手,因为它的重量较重,并且会隐藏 alpha1
和 alpha2
对我的模型的影响,但是,我不能真正忽略它或不将它输入到我的模型中,因为我想找到最佳的 y
值对于这个固定的theta
,因此我仍然需要使用theta
作为输入。
我的问题是,如何处理这样的问题?是否有任何统计技巧可以消除或至少减少这种影响,而不必从我的模型中消除theta
?有没有更好的方法来处理我的问题?
【问题讨论】:
您可以探索具有正则化的模型。通过增加正则化,变量的影响可能会扩散。当然,这将取决于数据。 你能提供你的数据集吗? 【参考方案1】:首先,您是否在训练前对数据进行了归一化?
第二,听起来你想用常数theta来查看x和y之间的关系。
如果您获取数据集并按 theta 对其进行排序,您可以尝试找到一组 theta 相同或非常相似、方差低且变化不大的记录。您可以获取该组数据并形成一个新的数据框,然后删除 theta 列(因为我们选择了数据集的一部分,其中 theta 具有低方差,因此它不是很有用)。然后,您可以训练您的模型或仅对 alpha1 和 alpha2 数据进行一些数据可视化。
【讨论】:
是的,我把它标准化了。感谢您的提示,但是我会说这对于我的情况是不可能的,这就是我正在寻找替代方法的原因。通过这样做,我将没有足够的训练数据点,我的结果也不会发生太大变化。如果我尝试使用更宽的 theta 区间,我仍然会面临我在这里描述的同样问题 这真的很难。我会尝试在 3 维中可视化数据,看看是否有帮助。如果没有,请尝试以尽可能多的方式将其可视化,并尝试以您想要的方式理解它。【参考方案2】:我对您的问题的总体理解是您想要实现两件事:
研究α1和α2在将theta转为常数后的影响(即消除theta对模型的影响)。
找到 alpha1 和 alpha2 的最佳组合,以返回此固定 theta 的最佳 y。
这可以在输入变量和目标变量之间的相关性研究下进行总结。
由于 Correlation 独立研究一个变量与另一个变量之间关系的变化,因此您可以很好地了解 alpha1、alpha2 和 theta 对 y 的影响。
存在两个有趣的相关性可以帮助您:
-
Pearson 相关性:数值反映线性相关性的强度。
Spearman 相关性:数值反映单调相关性的强度(即等级,以防相关性不是线性的)。
让我们试一试:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(columns=['theta', 'alpha1', 'alpha2', 'y'],
data=[[ 9.07660169, 0.61485493, 1.70396493, 4.93483686],
[ 9.51498486, -5.49212002, -0.68659511, 5.66226844],
[10.45737558, -2.2739529 , -2.03918961, 7.51133372],
[10.46857663, -0.4587848 , 0.54434441, 7.54435854],
[ 9.10133699, 8.38066374, 0.66538822, 4.92758927],
[ 9.17279647, 0.36327109, -0.30558115, 5.0955348],
[10.36532505, 0.87099676, -7.73775872, 7.26606153],
[10.13681026, -1.64084098, -0.09169159, 6.86027353],
[10.38549264, 1.80633583, 1.3453195, 7.36488184],
[ 9.72533357, 0.55861224, 0.74180309, 6.06864003]])
plt.figure(figsize=(10, 8))
ax = sns.heatmap(df.corr(method="pearson"), annot=True)
plt.xticks(rotation = 90)
plt.title('Pearson Correlation Heatmap')
plt.show()
plt.figure(figsize=(10, 8))
ax = sns.heatmap(df.corr(method="spearman"), annot=True)
plt.xticks(rotation = 90)
plt.title('Spearman Correlation Heatmap')
plt.show()
如您所见,我们对 theta、alpha1 和 alpha2 彼此之间以及与 y 之间的关系有了很好的了解。
根据科恩的标准,我们可以得出结论:
Alpha1 和 Alpha2 与 y 具有中等相关性。 Theta 与 y 具有很强的相关性。 Alpha1 与 alpha2 线性相关性较弱,但单调相关性中等。 Alpha1 和 Alpha2 与 theta 具有中等相关性。但是等一下,由于 alpha1 和 alpha2 与 y 具有中等相关性,但彼此之间的相关性较弱(至中等),我们可以利用方差来生成优化函数 L
,它是 alpha1 和alpha2,如下:
让m
,n
为两个权重,根据优化函数L
,最大化alpha1和alpha2特征与y的相关性:
m * alpha1 + n * alpha2
在L
和y
之间实现最大相关性的最佳系数m
和n
确实取决于alpha1、alpha2 和y 的方差。
我们可以由此得出以下优化方案:
m = [ ???(?,?) * ???(?,?) − ???(?,?) * ???(?) / ???(?,?) * ???(?,?) − ???(?,?) * ???(?) ] * n
其中a
、b
和c
分别对应alpha1、alpha2和y。
通过选择 m
或 n
为 1 或 -1 ,我们可以找到设计新功能的最佳解决方案。
cov = df[['alpha1', 'alpha2', 'y']].cov()
# applying the optimization function: a = alpha1 , b = alpha2 and c = y
# note that cov of a feature with itself = variance
coef = (cov['alpha2']['y'] * cov['alpha1']['alpha2'] - cov['alpha1']['y'] * cov['alpha2']['alpha2']) / \
(cov['alpha1']['y'] * cov['alpha1']['alpha2'] - cov['alpha2']['y'] * cov['alpha1']['alpha1'])
# let n = 1 --> m = coef --> L = coef * alpha1 + alpha2 : which is the new feature to add
df['alpha12'] = coef * df['alpha1'] + df['alpha2']
如您所见,引入的 alpha12 的相关性有明显改善。
此外,与问题1相关,降低theta的相关性;并且由于相关性由下式给出:
Corr(theta, y) = Cov(theta, y) / [sqrt(Var(that)) * sqrt(Var(y))]
您可以增加 theta 的方差。为此,只需从某个分布中采样 n 个点,并将它们作为噪声添加到相应的索引中。 保存此噪声列表以备将来使用,以防您需要返回原始 theta,如下所示:
cov = df[['y', 'theta']].cov()
print("Theta Variance :: Before = ".format(cov['theta']['theta']))
np.random.seed(2020) # add seed to make it reproducible for future undo
# create noise drawn from uniform distribution
noise = np.random.uniform(low=1.0, high=10., size=df.shape[0])
df['theta'] += noise # add noise to increase variance
cov = df[['y', 'theta']].cov()
print("Theta Variance :: After = ".format(cov['theta']['theta']))
# df['theta'] -= noise to back to original variance
plt.figure(figsize=(15, 15))
ax = sns.heatmap(df.corr(method="spearman"), annot=True)
plt.xticks(rotation = 90)
plt.title('Spearman Correlation Heatmap After Reducing Variance of Theta\n')
plt.show()
plt.figure(figsize=(15, 15))
ax = sns.heatmap(df.corr(method="pearson"), annot=True)
plt.xticks(rotation = 90)
plt.title('Pearson Correlation Heatmap After Reducing Variance of Theta\n')
plt.show()
Theta 方差 :: Before = 0.3478030891329485
Theta 方差 :: After = 7.552229545792681
现在Alpha12领先,对目标变量y的影响最大。
【讨论】:
看起来很有趣。我不得不承认我还没有时间仔细阅读它。你有什么建议我可以在哪里阅读更多相关信息?【参考方案3】:我会说 theta 对您的预测变量的影响不能隐藏其他变量的影响。其他变量的影响可能很小,但很可能就是这样。我会接受你的估计,并按原样优化 y 以获得恒定的 theta
【讨论】:
以上是关于减少回归模型中一个变量对输出的影响的主要内容,如果未能解决你的问题,请参考以下文章
SPSS 多元线性回归结果中,系数模型下的1,B,t,Sig.分别啥意思。在线等!!急求高手解答!!