第7章: 機械学習・AI応用

7. 機械学習・AI応用

学習目標

  • 本章の主要概念を説明できる(用語/前提条件含む)
  • 実データ/実務上のユースケースでの適用手順を述べられる
  • ベストプラクティスや落とし穴を理由とともに指摘できる

7.0 統計学習理論の基礎

統計学習理論の枠組み:

経験的リスク最小化 (ERM):
R_emp(h) = 1/m Σ L(h(xi), yi)
汎化誤差: R(h) = E[L(h(X), Y)]
汎化ギャップ: |R(h) - R_emp(h)|

PAC学習理論:

  • PAC: Probably Approximately Correct
  • サンプル複雑性: m ≥ (1/ε)(ln H + ln(1/δ))
  • VC次元: 仮説クラスの表現能力の指標
  • Rademacher複雑性: データ依存の汎化誤差境界

生物学データの特徴と課題:

  • 高次元低サンプル: p » n (遺伝子数 » サンプル数)
  • ノイズと外れ値: 測定誤差、生物学的変動
  • 不均衡データ: 疾患群と健常群の不等なサンプルサイズ
  • バッチ効果: 実験条件・時期による系統的バイアス

正則化理論:

Ridge回帰: ||Xβ - y||² + λ||β||²
Lasso回帰: ||Xβ - y||² + λ||β||₁
Elastic Net: ||Xβ - y||² + λ₁||β||₁ + λ₂||β||²

最適化アルゴリズム:

  • 勾配降下法: θt+1 = θt - η∇L(θt)
  • Adam: 適応的学習率調整
  • BFGS: 準ニュートン法による高速収束
  • 座標降下法: 高次元スパース問題に適用

7.1 教師あり学習

疾患感受性予測:

  • 入力: SNP(一塩基多型)パターン
  • 出力: 疾患リスクスコア
  • 手法: ロジスティック回帰、Random Forest、SVM

薬剤応答予測:

特徴量設計:
- ゲノム変異プロファイル
- 遺伝子発現レベル
- タンパク質構造特徴
- 薬物動態パラメータ

完全な疾患予測パイプライン:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score, classification_report
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, precision_recall_curve

class DiseasePredictor:
    """遺伝的変異データからの疾患リスク予測"""
    
    def __init__(self, model_type='random_forest'):
        self.model_type = model_type
        self.model = None
        self.scaler = StandardScaler()
        self.feature_importance = None
    
    def prepare_features(self, genotype_data, clinical_data=None):
        """
        特徴量の準備
        
        Args:
            genotype_data: SNPデータ (n_samples, n_snps)
            clinical_data: 臨床データ (n_samples, n_clinical_features)
        
        Returns:
            np.array: 統合特徴量行列
        """
        features = []
        
        # SNP特徴量(0,1,2エンコーディング)
        features.append(genotype_data)
        
        # 遺伝子間相互作用特徴量
        n_snps = genotype_data.shape[1]
        interactions = []
        for i in range(min(n_snps, 100)):  # 計算量を考慮して制限
            for j in range(i+1, min(n_snps, 100)):
                interactions.append(genotype_data[:, i] * genotype_data[:, j])
        
        if interactions:
            features.append(np.column_stack(interactions))
        
        # 臨床データがある場合は追加
        if clinical_data is not None:
            features.append(clinical_data)
        
        return np.hstack(features)
    
    def train(self, X, y, validation_split=0.2):
        """
        モデルの訓練
        
        Args:
            X: 特徴量行列
            y: ラベル(0: 健常, 1: 疾患)
            validation_split: 検証データの割合
        
        Returns:
            dict: 訓練結果の統計
        """
        # データ分割
        X_train, X_val, y_train, y_val = train_test_split(
            X, y, test_size=validation_split, stratify=y, random_state=42
        )
        
        # 特徴量の標準化
        X_train_scaled = self.scaler.fit_transform(X_train)
        X_val_scaled = self.scaler.transform(X_val)
        
        # モデルの訓練
        if self.model_type == 'random_forest':
            self.model = RandomForestClassifier(
                n_estimators=500,
                max_depth=10,
                min_samples_split=5,
                min_samples_leaf=2,
                class_weight='balanced',
                random_state=42,
                n_jobs=-1
            )
        
        self.model.fit(X_train_scaled, y_train)
        
        # 特徴量重要度の取得
        if hasattr(self.model, 'feature_importances_'):
            self.feature_importance = self.model.feature_importances_
        
        # 性能評価
        train_pred = self.model.predict_proba(X_train_scaled)[:, 1]
        val_pred = self.model.predict_proba(X_val_scaled)[:, 1]
        
        train_auc = roc_auc_score(y_train, train_pred)
        val_auc = roc_auc_score(y_val, val_pred)
        
        # 交差検証
        cv_scores = cross_val_score(
            self.model, X_train_scaled, y_train, cv=5, scoring='roc_auc'
        )
        
        return {
            'train_auc': train_auc,
            'val_auc': val_auc,
            'cv_mean': cv_scores.mean(),
            'cv_std': cv_scores.std(),
            'n_features': X.shape[1]
        }
    
    def plot_performance(self, X_test, y_test):
        """性能評価の可視化"""
        X_scaled = self.scaler.transform(X_test)
        y_pred_proba = self.model.predict_proba(X_scaled)[:, 1]
        
        fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
        
        # ROC曲線
        fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
        auc = roc_auc_score(y_test, y_pred_proba)
        
        ax1.plot(fpr, tpr, label=f'ROC curve (AUC = {auc:.3f})')
        ax1.plot([0, 1], [0, 1], 'k--', label='Random')
        ax1.set_xlabel('False Positive Rate')
        ax1.set_ylabel('True Positive Rate')
        ax1.set_title('ROC Curve')
        ax1.legend()
        ax1.grid(True)
        
        # Precision-Recall曲線
        precision, recall, _ = precision_recall_curve(y_test, y_pred_proba)
        
        ax2.plot(recall, precision)
        ax2.set_xlabel('Recall')
        ax2.set_ylabel('Precision')
        ax2.set_title('Precision-Recall Curve')
        ax2.grid(True)
        
        plt.tight_layout()
        plt.show()

精密医療の実現価値: 従来医療では「平均的効果」に基づく治療選択を行うが、個人差により期待効果が得られない患者が一定割合存在する。機械学習による個別化予測により、患者ごとに最適な治療法を選択可能となる。薬剤応答予測の精度向上は、副作用リスク低減や治療効果向上につながる可能性が報告されている。医療経済的にも、無効な治療の回避によりコスト削減につながる場合がある。

7.2 教師なし学習

遺伝子発現クラスタリング:

  • k-means: 遺伝子機能グループの特定
  • 階層クラスタリング: 発現パターンの系統解析
  • DBSCAN: ノイズ耐性クラスタリング

次元削減:

  • PCA: 主成分による低次元表現
  • t-SNE: 非線形次元削減によるデータ可視化
  • UMAP: 大規模データの高速次元削減

発見的研究への貢献: 教師なし学習は、事前の仮説なしにデータから新しいパターンを発見する手法である。遺伝子発現データから未知の疾患サブタイプを特定し、より精密な診断・治療分類を可能にする。また、高次元生物学データの可視化により、研究者の直感的理解を支援し、新たな仮説生成を促進する。薬剤作用機序の解明、バイオマーカー探索において重要な役割を果たす。

7.3 深層学習応用

深層学習の理論的基盤:

普遍近似定理: 
十分な幅の1隠れ層ニューラルネットは任意の連続関数を近似可能

表現学習理論:
深層ネットワークは階層的特徴表現を自動学習

生物学的配列の言語モデル:

  • n-gram モデル: P(x₁…xₙ) = ∏ P(xᵢ xᵢ₋ₖ₊₁…xᵢ₋₁)
  • RNNによる配列モデリング: h_t = f(Wx_t + Uh_{t-1} + b)
  • Attention機構: α_ij = exp(e_ij) / Σ exp(e_ik)
  • Transformer: 並列化可能な自己注意機構

タンパク質・複合体の構造予測(AlphaFold 3 / Server):

  • AlphaFold 3は、タンパク質に加えて核酸・小分子・イオン・修飾残基を含む複合体の構造予測に対応する。
  • 提供形態は大きく2系統: (1) 非商用のWeb提供(AlphaFold Server) (2) ローカル推論パイプライン(モデル重みは申請・利用条件あり)。
  • 実務では「探索はServer、再現性や自動化はローカル」で役割分担すると運用しやすい。
  • 予測結果はpLDDT/PAEなどの信頼度指標を併用して解釈する。

実運用の選択肢(概要):

  • AlphaFold Server: 迅速な試行に向く。入力制約や対象リガンドの範囲に注意。
  • ローカル推論パイプライン: バッチ処理・再現実験に向く。GPU/データベース準備と利用条件の確認が必要。

バイオ向けFoundation Modelの位置づけ:

  • タンパク質配列: 大規模配列事前学習モデルで機能推定や特徴抽出を支援。
  • ゲノム配列: Nucleotide Transformer等が塩基配列の表現学習に利用される。
  • single-cell: scGPT等が注釈・バッチ補正・摂動予測の補助に使われる。
  • 空間解析/細胞間相互作用: Nicheformer等が空間コンテキストを踏まえた解析に使われる。

評価・運用上の注意点:

  • ゼロショットの過信やデータリークを避ける。
  • バッチ効果・ラベル循環の影響を検証する。
  • 解析条件(バージョン、乱数種、前処理)を固定し再現性を確保する。

AI利用の実務フロー(例):

  • 設計: 目的・評価指標・制約条件(データ機微性、許容偽陽性/偽陰性)を合意する。
  • 実装: ベースライン→高度モデルの順で試す。前処理・分割手順は記録する。
  • 検証: 患者単位/実験単位で分割し、リーク・バッチ影響をチェックする。
  • レポート: 再現条件、失敗パターン、適用範囲を明文化する。

畳み込みニューラルネット(CNN):

  • DNA配列のモチーフ検出
  • タンパク質2次構造予測
  • 医用画像解析(病理組織、画像診断)

リカレントニューラルネット(RNN/LSTM):

  • 配列データの時系列解析
  • 遺伝子発現の時間変化予測
  • タンパク質折り畳み過程のモデル化

Transformer:

  • 長距離依存関係のモデル化
  • DNA言語モデル(DNABERT、Nucleotide Transformer等)
  • タンパク質配列から構造予測

生成モデルの応用:

変分オートエンコーダ (VAE):
L = E[log p(x|z)] - KL(q(z|x)||p(z))
分子生成: 潜在空間での分子操作

敵対的生成ネットワーク (GAN):
min_G max_D E[log D(x)] + E[log(1-D(G(z)))]
新薬候補分子の生成

転移学習とドメイン適応:

  • 事前訓練モデル: 大規模データでの基本表現学習
  • ファインチューニング: タスク特化の微調整
  • ドメイン適応: 異なる実験条件間での知識転移

解釈可能性とXAI (Explainable AI):

  • 勾配ベース手法: Saliency Map, Integrated Gradients
  • 摂動ベース手法: LIME, SHAP
  • 注意機構: 重要領域の可視化
  • 概念ベース説明: TCAV (Testing with Concept Activation Vectors)

技術革新の意義: 深層学習により、従来手法では捉えにくかった複雑なパターンを学習可能となった。AlphaFold系の進展により、構造予測や相互作用予測の活用範囲が広がっている。一方で、予測精度は対象やデータ条件に依存するため、実験的検証や信頼度指標の併用が前提となる。医用画像解析などでも実運用が進むが、評価設計と監視が重要である。

7.4 強化学習

創薬最適化:

  • 状態: 分子構造
  • 行動: 化学修飾
  • 報酬: 薬理活性・毒性スコア
  • 目標: 最適な薬物分子の設計

創薬革命の可能性: 従来の創薬は試行錯誤的なプロセスであり、成功確率が低いとされる。強化学習により、分子設計を戦略的最適化問題として定式化し、効率的な探索が可能となる。シミュレーション環境での学習により、実験コストを削減しつつ、新規薬物候補の発見を加速できる可能性がある。AIによる創薬では、臨床試験段階に到達した化合物が報告されている。

🎯 認定試験ポイント

重要概念チェックリスト

機械学習基礎 ⭐⭐⭐

  • 教師あり・教師なし・強化学習の違いと生物学での応用例を説明できる
  • 過学習とその対策(交差検証・正則化)を理解している
  • 評価指標(精度・再現率・F値・AUC)の生物学的意味を把握している
  • バイアス・バリアンストレードオフとモデル選択の関係を理解している

統計的機械学習 ⭐⭐⭐

  • ベイズ統計の原理とMAP推定・事後確率の概念
  • サポートベクターマシン(SVM)のカーネル手法と生物学応用
  • 決定木・ランダムフォレストの特徴量重要度と解釈
  • クラスタリング手法(k-means・階層・DBSCAN)の使い分け

深層学習 ⭐⭐

  • 畳み込みニューラルネット(CNN)の配列解析応用
  • リカレントニューラルネット(RNN/LSTM)の時系列解析
  • Transformerとattention機構の配列モデリング
  • AlphaFold 3/Serverの用途と制約(利用形態・制約・信頼度指標)

次元削減・可視化 ⭐⭐

  • 主成分分析(PCA)の数学的原理と生物学的解釈
  • t-SNE・UMAPの非線形次元削減の特徴と限界
  • 高次元データの「次元の呪い」問題
  • 特徴選択と次元削減の違いと使い分け

典型的な出題パターン

【アルゴリズム選択】

問題例: RNA-seq データから疾患関連遺伝子を特定する際、
以下の状況に最適な機械学習手法を選択し理由を述べよ。
・サンプル数: 100
・遺伝子数: 20,000
・ラベル: 疾患/健常

解答: ランダムフォレスト
理由: 
1) 高次元低サンプル問題に対して過学習しにくい
2) 特徴量重要度により解釈可能性が高い
3) 非線形関係を捉えられる
4) 欠損値に対してロバスト

【性能評価】

問題例: がん診断における機械学習モデルで、
仮に精度95%、感度80%、特異度98%の場合、
臨床的に最も重要な指標とその理由は?

解答: 感度(80%)が最も重要
理由: がん診断では偽陰性(見逃し)の方が
偽陽性(過剰診断)より重大な結果をもたらすため。
感度の向上が最優先事項となる。

【技術比較】

問題例: タンパク質配列解析において、従来の配列アライメント手法と
深層学習手法(Transformer等)の利点・欠点を比較せよ。

解答:
配列アライメント: 解釈しやすい・高速・進化的関係明確 / 線形関係のみ
深層学習: 複雑パターン学習・高精度 / ブラックボックス・大量データ必要

【数理的理解】

問題例: SVMのカーネルトリックがなぜ高次元特徴空間での
線形分離を可能にするか、数式を含めて説明せよ。

解答: カーネル関数 K(xi, xj) = φ(xi)・φ(xj) により、
明示的な特徴空間変換 φ(x) を計算せずに
高次元空間での内積を計算可能。
これにより線形分離不可能な問題を線形分離可能に変換。

関連する付録・章

  • 付録G: 認定試験全体の対策情報
  • 付録H: 機械学習ツール・フレームワーク一覧
  • 第3章: データ構造とアルゴリズム(計算理論的基盤)
  • 第8章: シングルセル・空間解析(最新AI応用)
  • 第14章: 臨床応用(精密医療への統合)

前へ: エピゲノム・マルチオミクス解析 目次 次へ: シングルセル・空間解析

演習

  1. 本章の手順をサンプルデータで再現し、各ステップのログと主要指標を記録して提出せよ。
  2. 代替ツール/パラメータで同等の分析を実施し、結果差分と選定理由を考察せよ。

具体課題例

  • 公開データを用いた再現(SRA/GEO/ArrayExpressから実在アクセッションを選定し)、前処理→主解析→結果要約まで実施。
  • 代替ツールの比較 (例: ツールA vs ツールB)。処理時間/メモリ/精度など評価指標を定義し、比較表を作成。
  • 成果物一式(レポート、使用コマンド/パラメータ、ツール/ライブラリのバージョン、入力/出力、実行ログ、MultiQC等のレポート、図表)を添付。