Hello there, ('ω')ノ
📌 1. ライブラリのインポート
まず、機械学習に必要なライブラリをインポートします。
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 機械学習ライブラリ from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score, confusion_matrix
📌 2. 前処理したデータの準備
前回の前処理を反映したデータを使います。
不要な列を削除し、特徴量(X)と目的変数(y)を分けます。
import pandas as pd # データの読み込み train = pd.read_csv("/kaggle/input/titanic/train.csv") test = pd.read_csv("/kaggle/input/titanic/test.csv") # 不要な列を削除(testのPassengerIdは保持) drop_columns = ["Name", "Ticket", "Cabin"] train.drop(columns=drop_columns, inplace=True) test.drop(columns=drop_columns, inplace=True) # 欠損値処理(数値列のみを対象にする) train.fillna(train.select_dtypes(include=["number"]).median(), inplace=True) test.fillna(test.select_dtypes(include=["number"]).median(), inplace=True) # カテゴリ変数を数値化 train["Sex"] = train["Sex"].map({"male": 0, "female": 1}) test["Sex"] = test["Sex"].map({"male": 0, "female": 1}) # ダミー変数変換(train と test の列を揃える) train = pd.get_dummies(train, columns=["Embarked"], drop_first=True) test = pd.get_dummies(test, columns=["Embarked"], drop_first=True) # train, test のダミー変数の列を統一する missing_cols = set(train.columns) - set(test.columns) for col in missing_cols: test[col] = 0 # 存在しない列を追加し、値は0で埋める test = test[train.columns.drop("Survived")] # testには Survived がないので除外 # 特徴量と目的変数に分割 X = train.drop("Survived", axis=1) y = train["Survived"]
✅ 不要な列を削除!
✅ 欠損値を処理!
✅ カテゴリ変数を数値に変換!
📌 3. 訓練データとテストデータの分割
モデルを評価するために、データを 訓練用(train)とテスト用(test) に分割します。
# データを訓練用とテスト用に分割(80%:20%) X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)
✅ 80% を学習に使い、20% を検証用にする!
📌 4. 機械学習モデルの作成
まずは、シンプルな 決定木(Decision Tree) で予測してみましょう!
✅ 決定木モデルの作成
# 決定木モデルの作成 dt_model = DecisionTreeClassifier(random_state=42) dt_model.fit(X_train, y_train) # 予測 y_pred = dt_model.predict(X_valid) # 精度を評価 accuracy = accuracy_score(y_valid, y_pred) print("決定木の精度:", accuracy)
✅ モデルを学習させ、検証データで予測!
✅ accuracy_score()
で精度(正解率)を計算!
📌 5. ランダムフォレストを試す
決定木よりも高精度な ランダムフォレスト(RandomForest) を試します!
# ランダムフォレストモデルの作成 rf_model = RandomForestClassifier(n_estimators=100, random_state=42) rf_model.fit(X_train, y_train) # 予測 y_pred_rf = rf_model.predict(X_valid) # 精度を評価 accuracy_rf = accuracy_score(y_valid, y_pred_rf) print("ランダムフォレストの精度:", accuracy_rf)
🔍 決定木 vs ランダムフォレスト
- 決定木の精度 → 約 75-80%
- ランダムフォレストの精度 → 約 80-85%(より高精度!)
✅ ランダムフォレストの方が良い結果!
📌 6. 重要な特徴量を確認
機械学習モデルが どの特徴を重視しているか を確認できます。
pip install japanize-matplotlib
import matplotlib.pyplot as plt import seaborn as sns import japanize_matplotlib # ← 追加(matplotlibで日本語対応) # 🔹 特徴量の重要度を取得 feature_importance = rf_model.feature_importances_ # 🔹 特徴量ごとに可視化 plt.figure(figsize=(8, 5)) sns.barplot(x=feature_importance, y=X.columns) # 🔹 タイトルを設定(日本語フォント対応) plt.title("特徴量の重要度") plt.show()
🔍 重要な特徴
- Pclass(客室クラス) や Sex(性別) が特に重要
- Fare(運賃) も影響大
✅ 「お金持ちの1等客で、女性の方が生存しやすい」傾向が見える!
📌 7. Kaggleに提出する予測データを作成
テストデータで予測し、Kaggleに提出するファイルを作成します!
# 予測 test_predictions = rf_model.predict(test) # 提出用データフレームを作成 submission = pd.DataFrame({ "PassengerId": pd.read_csv("/kaggle/input/titanic/test.csv")["PassengerId"], "Survived": test_predictions }) # CSVとして保存 submission.to_csv("submission.csv", index=False)
✅ submission.csv
を Kaggle にアップロード!
✅ 精度を確認し、より良いモデルを試す!
🎯 まとめ
✅ 決定木とランダムフォレストを使ってモデルを作成!
✅ 精度を比較し、ランダムフォレストの方が良いことを確認!
✅ 特徴量の重要度を可視化し、生存確率に影響を与える要因を分析!
✅ 最終的な予測を CSV に保存し、Kaggle に提出!
これで 「Titanicコンペの基本的な流れ」 をマスターできました!🚢✨
Best regards, (^^ゞ