今回はロジスティック回帰を利用した。
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
を学習予定である。
その後はロジスティック回帰の理論(シグモイド関数、損失関数、勾配降下法)にも踏み込んでいく。