import random
n = 200
max_a = 20.
max_b = 200.
true_range_a = 10.
true_range_b = 100.
random.seed(1)
data_a = []
data_b = []
data_r = []
count0 = 0
count1 = 0
with open('data.csv', 'w') as f:
f.write('r,a,b\n')
for i in xrange(n):
found = False
while not found:
a = random.random()*max_a
b = random.random()*max_b
if a < true_range_a and b < true_range_b:
r = 1
count1 += 1
if count1 <= n/2:
found = True
else:
r = 0
count0 += 1
if count0 <= n/2:
found = True
data_a.append(a)
data_b.append(b)
data_r.append(r)
f.write('%d,%f,%f\n' % (r,a, b))
パラメータ a, b について、0 か 1 を対応させる。a, b をそれぞれ max_a, max_b の中でランダムに選択し、a, b がそれぞれ true_range_a, true_range_b の中に同時にある場合は 1、それ以外は 0 とする。0 を取る点の個数と 1 を取る点の個数が同じになるようにしている。
from matplotlib import pyplot as plt
%matplotlib inline
data0_a = [data_a[i] for i in xrange(n) if data_r[i] == 0]
data0_b = [data_b[i] for i in xrange(n) if data_r[i] == 0]
data1_a = [data_a[i] for i in xrange(n) if data_r[i] == 1]
data1_b = [data_b[i] for i in xrange(n) if data_r[i] == 1]
plt.plot(data0_a, data0_b, '+')
plt.plot(data1_a, data1_b, 'r+');
赤い点が 1 に対応する点、青い点が 0 に対応する点である。