make_blobsで作成したone-class SVM用のテストデータ分布


make_blobsでone-class SVM用のテストデータを作ったら、分布が思いのほか歪んでいた

 one-class SVMのデバッグ用にtarinデータを作る必要があったが、60秒毎のデータで計算したいという事で、n_samples=60で作成していた。
 one-class SVM のパラメータ調整しても、思ったほど正答率が上がらず。 random_stateは固定していたが、n_samplesを小さくしたので、思ったよりも分布がゆがんでいた。
 random_state=0~100まで確認した上で、n_samples=60でも実際の分布に近そうなrandom_stateを選んで解決した。
試験そのものは、n_samplesが少ない状況では、ちょっと微妙だったが...
random_state=0~100のサンプルコード。

from sklearn import datasets
import matplotlib.pyplot as plt
k=0
plt.figure(figsize=(20,15))
for j in range(100):
  k=j+1
  plt.subplot(10, 10, k)
  X_train,_ = datasets.make_blobs(n_features = 1, centers=1,random_state=j, cluster_std=1.667122, n_samples=60, center_box=(14,22))
  plt.hist(X_train, color='blue', Alpha = 0.5)
  plt.title('random_state='+str(j))
  plt.grid(True)
plt.tight_layout()
plt.show()

出力はこんな感じ。

ちなみに、当然ですがn_samples=500以上であれば正規分布に近くなる。
あまり使わなそうだが、取り合えずメモ用に保存
以上