Titanicデータセットで学ぶロジスティック回帰の基本

今回はロジスティック回帰を利用した。

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(max_iter=1000)

model.fit(X_train, y_train)

ここで初めて登場したのがfitである。

fitとは何か

最初は、

「X_trainからy_trainを出力するモデルを作る」

と理解していた。

ChatGPTとの対話を通して、より正確には、

「X_trainとy_trainの関係性を学習する」

と考えるべきだと理解した。

例えばTitanicであれば、

  • 女性は生存しやすい
  • 上級客室は生存しやすい
  • 運賃が高い人は生存しやすい

といった傾向を内部パラメータとして学習している。

predictで予測する

y_pred = model.predict(X_test)

print(y_pred[:20])

実行結果

[0 0 0 1 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 0]

predictは学習済みモデルを使って予測を行う処理である。

0は死亡、1は生存を意味する。

Accuracyで精度を確認する

from sklearn.metrics import accuracy_score

acc = accuracy_score(y_test, y_pred)

print(acc)

実行結果

0.8044692737430168

約80.4%の正解率であった。

初めて自分で学習モデルを作成して予測を行えたので、少し感動した。

Accuracyだけでは分からないことがある

Accuracyが80%を超えていたので十分良い結果に見えたが、ここで新たな学びがあった。

Accuracyだけではモデルの実態は分からないのである。

そこで混同行列(Confusion Matrix)を確認した。

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_test, y_pred)

print(cm)

実行結果

[[92 13]
 [22 52]]

混同行列の読み方

予測:死亡 予測:生存
実際:死亡 92 13
実際:生存 22 52

つまり、

  • 死亡者を正しく予測 → 92人
  • 死亡者を生存と誤予測 → 13人
  • 生存者を死亡と誤予測 → 22人
  • 生存者を正しく予測 → 52人

である。

Accuracyは、

(92 + 52) / 179
= 0.804

で計算されている。

今回の気付き

  • shapeを読む力は非常に重要
  • SeriesとDataFrameの違いを理解する必要がある
  • fitは単なる関数呼び出しではなく学習そのもの
  • predictは未知データへの予測
  • Accuracyだけではモデル評価として不十分
  • 混同行列を見るとモデルの得意不得意が分かる

これまでは前処理やデータ分析が中心だったが、今回ようやく「機械学習モデルを作った」という実感が持てた。

次回はclassification_reportを用いて、

  • Precision
  • Recall
  • F1 Score

を学習予定である。

その後はロジスティック回帰の理論(シグモイド関数、損失関数、勾配降下法)にも踏み込んでいく。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA