本文主要是介绍方差缩减——分层抽样,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
方差缩减——分层抽样
分成4个子区间
import numpy as npn = 500
estimates = np.empty([100, 2])def g(x):if x >= 0 and x <= 1:y = np.exp(-x) / (1 + x ** 2)else:y = 0return ydef get_mean(X):results = []for x in X:results.append(g(x))return np.mean(results)for i in range(100):estimates[i, 0] = get_mean(np.random.uniform(0, 1, n))t2 = []t2.append(get_mean(np.random.uniform(0, 0.25, int(n / 4))))t2.append(get_mean(np.random.uniform(0.25, 0.5, int(n / 4))))t2.append(get_mean(np.random.uniform(0.5, 0.75, int(n / 4))))t2.append(get_mean(np.random.uniform(0.75, 1, int(n / 4))))estimates[i, 1] = np.mean(t2)print(np.var(estimates, axis=0))
输出:[1.11658751e-04 8.00280336e-06]
分成100个子区间
import numpy as npn = 500
estimates = np.empty([100, 2])def g(x):if x >= 0 and x <= 1:y = np.exp(-x) / (1 + x ** 2)else:y = 0return ydef get_mean(X):results = []for x in X:results.append(g(x))return np.mean(results)intervals = np.linspace(0, 1, 100)for i in range(100):estimates[i, 0] = get_mean(np.random.uniform(0, 1, n))t2 = []for j in range(99):t2.append(get_mean(np.random.uniform(intervals[j], intervals[j + 1], int(n / 100))))estimates[i, 1] = np.mean(t2)print(np.var(estimates, axis=0))
输出:[1.15212447e-04 1.57478224e-08]
这篇关于方差缩减——分层抽样的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!