make_classificationで分類データを作成してみる

引数に関係性があるので設定値によってはエラーが発生する

分類データを作成できるのは便利だけど使いこなすのが案外難しいのでいくつか試してみた

🕒 Last mod: 2021-08-27


1. 分類データの作成

機械学習の分野で何かしら試したいときにデータ必要です。

公開されているデータも多いのでそれらを使用できる場合には問題無いのですが、求めているデータがなかなか見つからないこともあります。

私は2値分類のデータでサンプル数の多いデータセットを探したのですが納得できるデータセットがみつかりませんでした。

調べてみるとmake_classificationというものがあって分類データを自在に作成できるようです。

マニュアルを読んでみると思っていたよりも複雑で一度読んだだけでは使いこなせそうな気がしません。

今回は引数の設定値を変更しながらいくつかのデータセット作成を試してみました。

2. デフォルトでデータセットを作成

まずはデフォルトでデータセットを作成してみます。これは簡単です。

sample.py
from sklearn.datasets import make_classification

X, y = make_classification()
print(X.shape)
print(y.shape)
output
(100, 20)
(100,)
作成されたデータセット
  • X:100行20列のデータ

  • y:100行のデータ

3. 特徴量が一つのデータセットを作成

次に特徴量が1つのデータセットを作成してみます。

特徴量の個数はn_featuresで指定できます。

3.1. ValueError: n_features=1でエラーが発生

さて、実際に試してみます。

sample.py
from sklearn.datasets import make_classification

X, y = make_classification(
    n_features=1
)
output
ValueError: Number of informative, redundant and repeated features must sum to less than the number of total features

エラーが発生しました。

下記の引数には関係性があり制約条件となっているようです。

  1. n_features

  2. n_informative

  3. n_redundant

  4. n_repeated

3.2. 関係性のありそうな引数に0を設定して試してみる。

関係性があるいくつかの引数が分かったので設定を変更して試してみます。

sample.py
from sklearn.datasets import make_classification

X, y = make_classification(
    n_features=1,
    n_informative=0,
    n_redundant=0,
    n_repeated=0,
)
output
ValueError: n_classes(2) * n_clusters_per_class(2) must be smaller or equal 2**n_informative(0)=1

またまたエラーが発生しました。

さらに下記の引数にも関係性があり制約条件となっているようです。

  1. n_classes

  2. n_clusters_per_class

3.3. 設定を変えて特徴量が一つのデータセットを作成する。

エラーメッセージから各引数の制約条件が読み取れます。

さらにいろいろと試して各引数の設定可能な値にあたりをつけました。

  1. n_classes: 1以上、ただし1を設定すると分類データとして機能しないので実質2以上

  2. n_clusters_per_class: 1以上

これらの制約条件から各引数の設定値を設定し直して特徴量が一つのデータセットを作成してみます。

sample.py
from sklearn.datasets import make_classification

X, y = make_classification(
    n_classes=2,
    n_features=1,
    n_informative=1,
    n_redundant=0,
    n_repeated=0,
    n_clusters_per_class=1,
)
output
(100, 1)
(100,)

特徴量が一つのデータセットが作成できました。

4. まとめ

軽い気持ちでmake_classificationを試してみましたが各引数間の制約条件が複雑で検証に時間を費やしてしまいました。

それぞれの引数の意味や影響度合いなどは別途検証を進めて別記事で紹介したいと思います。

今回は以上です。