我无法从以下data set的论文中生成此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()
谢谢!
答案 0 :(得分:0)
您错误地处理了|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。)