Kaggle Tutorial

最初のモデル — 線形/ロジスティック回帰・決定木

基本となる線形回帰・ロジスティック回帰・決定木の特徴を理解し、Titanic でベースラインを作ります。

3 つの基本モデル#

モデルタスク特徴
線形回帰回帰特徴量の線形結合で連続値を予測。解釈しやすい
ロジスティック回帰分類線形結合を確率に変換。二値分類の定番ベースライン
決定木回帰/分類条件分岐で予測。非線形を扱えるが単体では過学習しやすい

まずはシンプルなモデルでベースラインを作り、以降の改善の基準にします。

Titanic でベースラインを作る#

import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score, StratifiedKFold

df = pd.read_csv("/kaggle/input/titanic/train.csv")
features = ["Pclass", "Age", "SibSp", "Parch", "Fare"]
X = df[features]
y = df["Survived"]

pipe = Pipeline([
    ("imputer", SimpleImputer(strategy="median")),
    ("scaler", StandardScaler()),
    ("model", LogisticRegression(max_iter=1000)),
])

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(pipe, X, y, cv=cv, scoring="accuracy")
print(f"CV accuracy: {scores.mean():.4f} +/- {scores.std():.4f}")

決定木と過学習#

決定木は木を深くするほど訓練データに適合しますが、深すぎると過学習します。 max_depth などのハイパーパラメータで複雑さを抑えるのが基本です。

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(max_depth=4, random_state=42)

ヒント

決定木は単体では弱めですが、これを多数束ねたランダムフォレスト勾配ブースティング (次トラック L5)が、表形式コンペの主力になります。今回はその土台を作りました。

理解度チェック#

Quiz決定木の max_depth を非常に大きくするとどうなりやすい?

このトラックのまとめ#

  • 機械学習はデータから規則性を学ぶ技術で、Kaggle の中心は教師あり学習
  • 目的変数の型でタスク(回帰/分類)と評価指標が決まる
  • 汎化を測るためにデータを分割し、交差検証で安定評価する
  • 指標はコンペに合わせて選び、Pipeline でリークなく前処理する

次のステップ#

次トラック(L3)では、Titanic / House Prices を題材に、ここまでの基礎を使って 実際のコンペに提出するまでの流れを体験します。