如何在没有相关性的变量之间产生非线性依赖?
How to generate non-linear dependence between variables without correlation?
我在生成这个 data set for my dissertation from the following distribution 时遇到问题。
我的尝试结果data set看起来更独立。我似乎无法发现我哪里出错了。有人可以帮我吗?
代码如下:
# Non-linear dependence without correlation
import numpy as np
import matplotlib.pyplot as plt
x = np.random.uniform(-0.5, 0.5, 500)
def y_samples(x):
y = []
for i in x:
if np.abs(i) <= 1/6:
y.append(np.random.normal(0, 1/9))
else:
y.append(0.5 * np.random.normal(1, 1/9) + 0.5 * np.random.normal(-1, 1/9))
return y
y = y_samples(x)
plt.scatter(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
谢谢!
您对 |x| > 1/6
案例的处理不正确,可能更多是因为对数学的误解而不是对代码的误解。表达式
0.5 * np.random.normal(1, 1/9) + 0.5 * np.random.normal(-1, 1/9)
产生以零为中心的正态分布,不是中心为 -1 和 1 的双峰分布。
一旦你更好地理解了数学,修复就很明显了:用类似
的东西替换有问题的计算
np.random.normal(1.0, 1.0/9.0) if np.random.random() > 0.5 else np.random.normal(-1.0, 1.0/9.0)
(1/9
evaluates to 0 in Python2,我用来测试的。)
我在生成这个 data set for my dissertation from the following distribution 时遇到问题。
我的尝试结果data set看起来更独立。我似乎无法发现我哪里出错了。有人可以帮我吗?
代码如下:
# Non-linear dependence without correlation
import numpy as np
import matplotlib.pyplot as plt
x = np.random.uniform(-0.5, 0.5, 500)
def y_samples(x):
y = []
for i in x:
if np.abs(i) <= 1/6:
y.append(np.random.normal(0, 1/9))
else:
y.append(0.5 * np.random.normal(1, 1/9) + 0.5 * np.random.normal(-1, 1/9))
return y
y = y_samples(x)
plt.scatter(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
谢谢!
您对 |x| > 1/6
案例的处理不正确,可能更多是因为对数学的误解而不是对代码的误解。表达式
0.5 * np.random.normal(1, 1/9) + 0.5 * np.random.normal(-1, 1/9)
产生以零为中心的正态分布,不是中心为 -1 和 1 的双峰分布。
一旦你更好地理解了数学,修复就很明显了:用类似
的东西替换有问题的计算np.random.normal(1.0, 1.0/9.0) if np.random.random() > 0.5 else np.random.normal(-1.0, 1.0/9.0)
(1/9
evaluates to 0 in Python2,我用来测试的。)