【機械学習】スパイラルデータセットを作成する

Posted: , Category: データセット , 機械学習 , 深層学習

機械学習や深層学習の手法の検証に使える、渦巻き上のデータセットを作成してみます。

線形(直線)で分離できないデータ群をうまく分類する手法の検証用途に利用できます。

端的に上記のようなデータセットを利用することができます。

スパイラルデータを作成するコード

まず最初に、コードを貼り付けます。以下のコードをそのままコピペで上図のようなデータセットを構築することができます。

import numpy as np
from numpy import pi
import matplotlib.pyplot as plt

N = 200
# 0~pi の範囲でランダム位相をN個作成
theta = np.sqrt(np.random.rand(N)) * pi

# 位相が大きくなるほど値が大きくなる
scaler = 10 * theta + pi

data1 = np.array([np.cos(theta)*scaler, np.sin(theta)*scaler]).T
c1 = data1 + np.random.randn(N,2)

data2 = np.array([np.cos(theta - 0.7 * pi) * scaler, np.sin(theta - 0.7 * pi) * scaler]).T
c2 = data2 + np.random.randn(N,2)

data3 = np.array([np.cos(theta - 1.4 * pi) * scaler, np.sin(theta - 1.4 * pi) * scaler]).T
c3 = data3 + np.random.randn(N,2)

res1 = np.append(c1, np.zeros((N,1)), axis=1)
res2 = np.append(c2, np.ones((N,1)), axis=1)
res3 = np.append(c3, np.ones((N,1)), axis=1)

plt.scatter(res1[:,0], res1[:,1])
plt.scatter(res2[:,0], res2[:,1])
plt.scatter(res3[:,0], res3[:,1])
plt.show()

アルゴリズムの解説

ランダムに位相のリストを作成し、位相が大きくになるにつれて、位相に対応する円の円周が大きくなるようにして(円周は上記プログラムのsclaerに相当)、対応する円周上にプロットしただけです。

また系列に応じて、0.7$\pi$刻みで回転させています。

この辺りは言葉で表現難しいので、コードを見て確認してみてください。

別の記事でこれらを深層学習や非線形SVMで識別する方法についてまとめる予定です。

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

機械学習と情報技術