学習データの作成

In [1]:
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 を取る点の個数が同じになるようにしている。

In [2]:
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 に対応する点である。