機械学習演習
第1章:機械学習の基礎概念
本章では、機械学習の基本的な概念を学び、心不全患者データを使って最初の準備を行います。プログラミングの知識がなくても理解できるよう、具体例を交えて解説します。
学習目標
はじめに
1.1 機械学習とは何か
従来のプログラミング
従来のプログラミングでは、人間がルールを明示的に記述します。
この方法の問題点は、すべてのルールを人間が考えなければならないことです。
複雑な判断では、ルールの数が膨大になり、例外も多くなります。
1.1.1 従来のプログラミングとの違い
入力:患者データ
↓
ルール:「駆出率が30%以下 かつ 血清クレアチニンが2.0以上なら高リスク」
↓
出力:リスク判定
機械学習
機械学習では、データからコンピュータがルールを学習します。
つまり、機械学習とは「データから規則性やパターンを自動的に学習し、新しいデータに対して予測や判断を行う技術」です。
入力:患者データ + 正解ラベル(実際に死亡したかどうか)
↓
学習:データのパターンを自動的に発見
↓
出力:新しい患者の死亡リスクを予測
1.1.1 従来のプログラミングとの違い
分野 | 応用例 |
画像診断 | X線・CT・MRIからの病変検出 |
予後予測 | 心不全患者の死亡リスク予測 |
診断支援 | 症状から疾患を推定 |
創薬 | 薬物候補化合物の探索 |
個別化医療 | 患者ごとの最適治療選択 |
本演習では、心不全患者の臨床データから死亡リスクを予測するモデルを構築します。
1.1.2 医療における機械学習の応用例
1.2 機械学習の種類
種類 | 目的変数 | 例 |
分類(Classification) | カテゴリ(離散値) | 死亡/生存、がん/良性 |
回帰(Regression) | 数値(連続値) | 入院日数、血圧値 |
正解ラベル(教師データ)がある学習方法です。
入力データと正解の組み合わせから学習し、新しい入力に対する正解を予測します。
例:心不全死亡予測
教師あり学習はさらに2種類に分けられます:
1.2.1 教師あり学習(Supervised Learning)
今回のデータは「死亡(1)か生存(0)か」を予測するので、二値分類問題です。
正解ラベルがない学習方法です。
データの構造やパターンを発見することが目的です。
例
1.2.2 教師なし学習(Unsupervised Learning)
種類 | 説明 | 例 |
強化学習 | 試行錯誤で最適な行動を学習 | 治療方針の最適化 |
半教師あり学習 | 少量のラベルありデータ �+ 大量のラベルなしデータ | 医療画像のアノテーション効率化 |
1.2.3 その他の学習方法
機械学習プロジェクトは、一般的に以下の流れで進みます。
1. 問題定義 → 2. データ収集 → 3. データ前処理
→ 4. 特徴量エンジニアリング
→ 5. モデル選択・学習 → 6. モデル評価
→ 7. ハイパーパラメータ調整
→ 8. 最終評価・解釈 → 9. 実装・運用
この教材では、3〜8のステップを中心に学びます。
1.3 機械学習のワークフロー
1.4 訓練データとテストデータ
機械学習で最も重要な概念の一つが「汎化性能」です。
汎化性能とは、学習に使っていない新しいデータに対して正しく予測できる能力のことです。
もし全てのデータで学習し、同じデータで評価すると、モデルはそのデータを「丸暗記」してしまいます。これを過学習(Overfitting) といいます。
例:試験勉強
医療AIでは、「学習に使った患者」だけでなく「新しい患者」に対しても正しく予測できることが重要です。
1.4.1 なぜデータを分割するのか
全データ(299人)
├── 訓練データ(約80%:239人)→ モデルの学習に使用
└── テストデータ(約20%:60人)→ 最終的な性能評価に使用
重要なルール
1.4.2 データ分割の方法
1.4.3 検証データ(Validation Data)
実際には、ハイパーパラメータの調整のために「検証データ」も必要です。
全データ
├── 訓練データ(60-70%)→ モデルの学習
├── 検証データ(10-20%)→ ハイパーパラメータの調整
└── テストデータ(20%)→ 最終評価
または、交差検証(Cross-Validation)を使う方法もあります。
用語 | 別名 | 説明 | 今回のデータでの例 |
特徴量 | 説明変数、独立変数、X | 予測に使う入力データ | 年齢、駆出率、血清クレアチニンなど |
目的変数 | 被説明変数、従属変数、y | 予測したい値 | DEATH_EVENT(死亡したか) |
特徴量(12個)
目的変数(1個)
1.5 特徴量と目的変数
1.5.1 用語の定義
1.5.2 今回のデータの構成
ここからは、実際にPythonコードを書いてデータを準備します。
1.6 実装:データの準備
1.6.1 ライブラリのインポート
1.6.1 ライブラリのインポート
解説
scikit-learn(sklearn)とは?
Pythonで最も広く使われている機械学習ライブラリです。
様々なアルゴリズムが統一されたインターフェースで提供
されており、初学者でも使いやすい設計になっています。
乱数シードとは?
機械学習では、データの分割やモデルの初期化に乱数を使います。np.random.seed(42) を設定すると、毎回同じ乱数が生成され、結果が再現可能になります。
「42」という数字に特別な意味はありませんが、慣例的によく使われます。
1.6.2 データの読み込みと確認
1.6.2 データの読み込みと確認
臨床的ポイント:クラス不均衡
死亡が32%、生存が68%という分布は「クラス不均衡」と呼ばれます。
このような不均衡があると、モデルは多数派(生存)ばかり予測しがちになります。
1.6.3 特徴量と目的変数の分離
1.6.3 特徴量と目的変数の分離
解説
drop()メソッド
df.drop('列名', axis=1) は、指定した列を
削除したDataFrameを返します。
元のDataFrame df は変更されません。
なぜ分離するのか?
scikit-learnの機械学習モデルは、特徴量Xと目的変数yを別々に受け取る設計になっています。
model.fit(X, y) # Xから yを予測するモデルを学習
1.6.4 訓練データとテストデータの分割
1.6.4 訓練データとテストデータの分割
1.6.4 訓練データとテストデータの分割
引数 | 説明 |
X, y | 分割するデータ |
test_size=0.2 | テストデータの割合(20%) |
random_state=42 | 乱数シード(同じ値なら同じ分割) |
stratify=y | 層化抽出 |
層化抽出(stratify)とは?
stratify=y を指定すると、元のデータと同じクラス比率で分割されます。
これを指定しないと、偶然テストデータに死亡患者が多く(または少なく)なる可能性があります。
医療データでは、クラス比率を維持することが重要です。
解説
train_test_split()の引数
1.6.4 訓練データとテストデータの分割
戻り値の順番
train_test_split() は4つの値を返します:
解説
1.6.5 データの形状を視覚的に確認
1.6.5 データの形状を視覚的に確認
モデルを構築する前に、特徴量の分布を確認しておきましょう。
1.7 特徴量の概要確認
1.7.1 連続変数の分布
1.7.2 二値変数の分布
1.7.3 特徴量間の相関
1.7.3 特徴量間の相関
1.7.3 特徴量間の相関
臨床的ポイント
相関が高い特徴量のペアがあると、モデルが
不安定になることがあります(多重共線性)。
ただし、このデータセットでは特徴量間の相関
は比較的低いため、大きな問題にはなりません。
1.8 機械学習の基本的な流れ
次章以降で詳しく学びますが、機械学習モデルの基本的なコードの流れを確認しておきましょう。
解説
scikit-learnでは、どのアルゴリズムでも同じ
インターフェースで使えます:
この統一されたインターフェースが、
scikit-learnの大きな利点です。
1.9 医療AIにおける注意点
1.9.1 データの質と代表性
1.9.2 臨床的な妥当性
1.9 医療AIにおける注意点
1.9.3 倫理的配慮
1.9.4 規制とガイドライン
1.10 まとめ
概念 | 説明 |
機械学習 | データからパターンを学習し、予測を行う技術 |
教師あり学習 | 正解ラベルがある学習(今回はこれ) |
分類問題 | カテゴリを予測(今回は死亡/生存) |
特徴量(X) | 予測に使う入力データ |
目的変数(y) | 予測したい値 |
訓練データ | モデルの学習に使用 |
テストデータ | 最終的な性能評価に使用 |
層化抽出 | クラス比率を維持した分割 |
準備したデータ
X_train, y_train:訓練データ(239人)
X_test, y_test:テストデータ(60人)
演習問題
問題1:概念の確認
以下の文が正しいか誤りか答え、誤りの場合は正しく修正してください。
問題2:データ分割
以下の条件でデータを分割するコードを書いてください。
演習問題
問題3:データの確認
分割後の訓練データについて、以下を出力するコードを書いてください。
問題4:考察
このデータセットを使った死亡予測モデルを臨床で使用する場合、
どのような点に注意すべきか、3つ以上挙げてください。
解答例
問題1の解答
解答例
問題2の解答
解答例
問題3の解答
解答例
問題4の解答
次章の予告
第2章「データの前処理」では、以下の内容を学びます:
準備したX_train, X_test, y_train, y_testを使って、前処理を進めていきます。