🌟

【教師あり学習(分類)】ロジスティック回帰をやってみた

2023/07/10に公開

教師あり学習とは

教師あり学習とは、正解ラベル付きの学習データからモデルを学習させて、未知のデータに対しての予測を行うことです。

例えば、猫の画像データがあったとして、これは猫だよ!というラベルをつけて教えてあげることです。
反対の教師なし学習では、猫の画像データを猫とは教えてあげません、勝手に自分で分類してね。というようなことをするのが教師なし学習になります。

教師あり学習の種類

分類と予測
意外にも教師あり学習の種類はこの2種類のみです

分類の種類

二項分類と多項分類があります。

二項分類は、分類するカテゴリーが2つの場合を指します。
(2値分類や2クラス分類などとも呼ばれますね)

多項分類は名前の通り、3つ以上のクラスに分類することを指します!

それでは分類問題をやっていきましょう!

教師あり学習をやってみよう!

教師あり学習は以下のようなStepで進みます!

1 データ準備
2 データ前処理
3 学習
4 評価
5 予測

データの準備と前処理

データ作成

実は機械学習の工程の中の8割の労力を占めると言われているのが、データの準備とデータ前処理です。
今回はサクッと教師あり学習を試してみたいので、sckit-learn datasetsモジュールのmake_classificationを使用してデータを準備していきたいと思います。

make_classification()を用いれば、データ数やラベルの種類を引数で設定できます。

make_classificationを使用した例

# モジュールのimport
from sklearn.datasets import make_classification
# データX, ラベルyの生成
X, y = make_classification(n_samples=50, n_classes=2, n_features=2, n_redundant=0, random_state=0)

この場合Xには50のサンプル数で2つの特徴量を持つことになります。
そのためXには例えば以下のようなデータを50行保持することになります。

[[ 0.97873798,  2.2408932 ],
 [ 1.86755799, -0.97727788],
 [-0.10321885,  0.4105985 ],
 [ 0.14404357,  1.45427351],
 [ 0.76103773,  0.12167502],
 [-0.20515826,  0.3130677 ],
 ...
]

yには0と1のラベルが入っているだけなので、以下のような0と1のデータが50個入っています。

[1, 0, 1, 1, 1, 0, ..., 0]

データを学習用と評価用に分ける

全てのデータを学習用で使用してしまうと、出来上がったモデルを評価する用のデータが無くなってしまうので、準備したデータを学習用と評価用で使うデータの割合を決めます。

例えば次のようなコードでデータを学習用と評価用に分けることができます。

from sklearn.model_selection import train_test_split

train_X, test_X, train_y, test_y = train_test_split(
    X, y, test_size=0.3, random_state=42)

モデルの作成

データの作成と学習用と評価用のデータを分けることはできたので、実際にモデルを作っていきましょう!

今回はロジスティクス回帰をやってみたいと思います!
ロジスティクス回帰という名前ですが、このモデルは分類をします。

# パッケージからモデルをインポート
from sklearn.linear_model import LogisticRegression

# モデルの構築
model = LogisticRegression()

モデルに学習させる

モデルの学習にはmodel.fitメソッドを使用することで学習させることができます。
その際に、トレーニングデータとラベルデータを指定してあげる必要があります。

# モデルに学習させる
# train_xはデータのカテゴリーを予測するために使う情報をまとめたもの
# train_yはデータの属するクラスのラベル
model.fit(train_x, train_y)

モデルに予測させる

モデルに予測させるためにはmodel.predictメソッドを使用することで可能です

# test_xはラベルが付けられていない未知のテスト用データ
y_prediction = model.predict(test_x)
print(y_prediction)

>>>> 出力結果
[1, 0, 1, 1, 1, 0, ..., 0]

こんな感じで予測させることができました。
サンプルデータでしたが、モデルの予測はこんな感じでできました。

まとめ

上記のようにsklearnを使用することでサンプルデータを用いて2値分類をロジスティック回帰を用いて予測することができました。
サンプルデータ以外にも

その他のアルゴリズムについて

ロジスティック回帰以外にも機械学習をする上でのアルゴリズムはありますので、是非興味があれば調べてみてください!

その他のアルゴリズム
・線形SVM(サポートベクターマシン)
・非線形SVM
・決定木
・ランダムフォレスト
・k-NN

Discussion