ゼファーネットのロゴ

GAM を使用して糖尿病の進行を予測する

日付:

AI診断

この記事は、 解釈可能な AI アジェイ・タンピの本。 35%オフ 解釈可能な AI または入力することにより、マニングからの他の製品 ブルトップボット23 チェックアウト時に割引コードボックスに マニングドットコム.

Diagnostics+ AI – 糖尿病の進行

病気の診断に役立つ AI を活用したアプリ、Diagnostics+ を開発しているとします。 あなたにアプリの作成を依頼した診療所は、糖尿病に踏み込んで、ベースライン測定が行われてから 1 年後に患者の病気の進行を判断したいと考えています。 これを図 XNUMX に示します。診療所は、XNUMX 年後の糖尿病の進行を予測するために、Diagnostics+ AI のモデルを構築するために、新しく造られたデータ サイエンティストとしてあなたを任命しました。 この予測は、医師が患者の適切な治療計画を決定するために使用されます。 モデルに対する医師の信頼を得るには、正確な予測を提供するだけでなく、モデルがその予測にどのように到達したかを示すことが重要です。 では、このタスクをどのように開始しますか?

診断AI
図 1: 糖尿病のための Diagnostics+ AI

まずは、どんなデータがあるか見てみましょう。 Diagnostics+ センターは、約 440 人の患者からデータを収集しました。これは、年齢、性別、体格指数 (BMI)、血圧 (BP) などの患者のメタデータで構成されています。 これらの患者には血液検査も実施され、次の XNUMX つの測定値が収集されました。

  • LDL(悪玉コレステロール)
  • HDL(善玉コレステロール)
  • 総コレステロール
  • 甲状腺刺激ホルモン
  • 低眼圧緑内障
  • 空腹時血糖

データには、ベースライン測定から 10 年後の全患者の空腹時血糖値も含まれています。 これがモデルのターゲットです。 これを機械学習の問題としてどのように定式化しますか? XNUMX 個の入力特徴と予測する必要がある XNUMX つのターゲット変数が与えられたラベル付きデータを使用できるため、この問題を教師あり学習問題として定式化できます。 ターゲット変数は実数値または連続であるため、回帰タスクです。 目的は、与えられた入力特徴からターゲット変数を予測するのに役立つ関数を学習することです。

それでは、データを Python に読み込み、入力フィーチャが相互に、およびターゲット変数とどのように相関しているかを調べてみましょう。 入力特徴がターゲット変数と高度に相関している場合、それらを使用してモデルをトレーニングし、予測を行うことができます。 ただし、それらがターゲット変数と相関していない場合は、データにノイズがあるかどうかを判断するためにさらに調査する必要があります。 データは次のように Python にロードできます。

from sklearn.datasets import load_diabetes #A
diabetes = load_diabetes() #B
X, y = diabetes[‘data’], diabetes[‘target’] #C #A Import scikit-learn function to load open diabetes dataset
#B Load the diabetes dataset
#C Extract the features and the target variable

次に、すべての機能とターゲット変数を含む 1 次元データ構造である pandas DataFrame を作成します。 scikit-learn が提供する糖尿病データセットには、わかりにくい機能名が付いています。 2 つの血液サンプルの測定値は s3、s4、s5、s6、sXNUMX、sXNUMX と名付けられており、それぞれの特徴が何を測定しているのかを理解するのは困難です。 ただし、ドキュメントではこのマッピングが提供されており、それを使用して、列の名前をよりわかりやすいものに変更します。

feature_rename = {'age': 'Age', #A 'sex': 'Sex', #A 'bmi': 'BMI', #A 'bp': 'BP', #A 's1': 'Total Cholesterol', #A 's2': 'LDL', #A 's3': 'HDL', #A 's4': 'Thyroid', #A 's5': 'Glaucoma', #A 's6': 'Glucose'} #A df_data = pd.DataFrame(X, #B columns=diabetes['feature_names']) #C
df_data.rename(columns=feature_rename, inplace=True) #D
df_data['target'] = y #E #A: Mapping of feature names provided by scikit-learn to a more readable form
#B: Load all the features (X) into a DataFrame
#C: Use the scikit-learn feature names as column names
#D: Rename the scikit-learn feature names to a more readable form
#E: Include the target variable (y) as a separate column

次に、列のペアワイズ相関を計算して、各入力フィーチャが相互に、およびターゲット変数とどのように相関しているかを判断できるようにします。 これは、次のようにパンダで簡単に実行できます。

corr = df_data.corr()

デフォルトでは、pandas の corr() 関数は、ピアソンまたは標準の相関係数を計算します。 この係数は、1 つの変数間の線形相関を測定し、+1 と -0.7 の間の値を持ちます。 係数の大きさが 0.5 を超える場合、それは非常に高い相関を意味します。 係数の大きさが 0.7 から 0.3 の間にある場合、それは適度に高い相関を意味します。 係数の大きさが 0.5 から 0.3 の間である場合、それは相関が低いことを意味し、大きさが XNUMX 未満である場合、相関がほとんどまたはまったくないことを意味します。 次のように、Python で相関行列をプロットできるようになりました。

この詳細な教育コンテンツがあなたに役立つ場合は、 AIメーリングリストに登録する 新しい素材がリリースされたときに警告が表示されます。 

import matplotlib.pyplot as plt #A
import seaborn as sns #A
sns.set(style=’whitegrid’) #A
sns.set_palette(‘bright’) #A f, ax = plt.subplots(figsize=(10, 10)) #B
sns.heatmap( #C corr, #C vmin=-1, vmax=1, center=0, #C cmap="PiYG", #C square=True, #C ax=ax #C
) #C
ax.set_xticklabels( #D ax.get_xticklabels(), #D rotation=90, #D horizontalalignment='right' #D
); #D #A Import matplotlib and seaborn to plot the correlation matrix
#B Initialize a matplotlib plot with a predefined size
#C Use seaborn to plot a heatmap of the correlation coefficients
#D Rotate the labels on the x-axis by 90 degrees

結果のプロットを図 2 に示します。まず、図の最後の行または最後の列に注目しましょう。 これは、各入力とターゲット変数との相関関係を示しています。 BMI、BP、総コレステロール、HDL、甲状腺、緑内障、ブドウ糖の XNUMX つの特徴が、ターゲット変数と中程度から高い相関関係にあることがわかります。 また、善玉コレステロール(HDL)も糖尿病の進行と負の相関があることがわかります。 これは、HDL 値が高いほど、XNUMX 年後に患者の空腹時血糖値が低下することを意味します。 したがって、機能は病気の進行を予測できるという点でかなり良いシグナルを持っているようであり、それらを使用してモデルをトレーニングすることができます. 演習として、各機能が互いにどのように相関しているかを観察します。 たとえば、総コレステロールは、悪玉コレステロール、LDL と非常に高い相関があるようです。

診断AI
図 2: 糖尿病データセットの特徴とターゲット変数の相関プロット

一般化加法モデル (GAM)

Diagnostics+ と糖尿病予測のモデルを実験して、いくつかの欠点を発見したとしましょう。 線形回帰モデルを試してみましたが、総コレステロール、LDL、HDL など、相互に高度に相関する機能を処理していないようでした。 その後、デシジョン ツリー モデルを試しましたが、線形回帰よりもパフォーマンスが悪く、トレーニング データに過適合しているように見えました。

架空の糖尿病データを使用して、状況を詳しく見てみましょう。 図 3 は、年齢とターゲット変数の間の非線形関係の不自然な例を示しています。ここでは、両方の変数が正規化されています。 オーバーフィッティングせずにこの関係をモデル化するにはどうすればよいでしょうか? 考えられるアプローチの XNUMX つは、ターゲット変数が n としてモデル化される線形回帰モデルを拡張することです。th 特徴セットの次数多項式。 この形式の回帰は、多項式回帰と呼ばれます。

診断AI
図 3: Diagnostics+ AI の非線形関係の図解

さまざまな次数多項式の多項式回帰を次の式に示します。 以下の式では、XNUMX つの機能のみを考慮しています。 x_1 ターゲット変数をモデル化する y. 次数 1 の多項式は線形回帰と同じです。 次数 2 の多項式の場合、次の XNUMX 乗である追加の機能を追加します。 x_1. 次数 3 の多項式の場合、XNUMX つの追加機能を追加します。 x_1 もう一方は の XNUMX 乗です x_1.

診断AI

多項式回帰モデルの重みは、線形回帰と同じアルゴリズム、つまり勾配降下法を使用した最小二乗法を使用して取得できます。 4 つの多項式のそれぞれによって学習された最適な適合を図 3 に示します。次数 2 の多項式は、次数 1 および XNUMX よりも生データによりよく適合することがわかります。多項式回帰モデルは、線形回帰と同じ方法で解釈できます。モデルは基本的に、より高度な機能を含む機能の線形結合です。

診断AI
図 4: 非線形関係をモデル化するための多項式回帰

ただし、多項式回帰にはいくつかの制限があります。 モデルの複雑さは、特徴の数または特徴空間の次元が増加するにつれて増加します。 したがって、データにオーバーフィットする傾向があります。 特に高次元の特徴空間では、多項式の各特徴の次数を決定することも困難です。

では、これらすべての制限を克服するためにどのモデルを適用でき、それは解釈可能でしょうか? 一般化加法モデル (GAM) の登場です! GAM は、予測力が中程度から高いモデルであり、解釈が容易です。 非線形関係は、各フィーチャの平滑化関数を使用し、それらすべてを追加することによってモデル化されます。 これは以下の式で示されます。

診断AI

上記の式では、各フィーチャに、そのフィーチャとターゲットの間の関係を最適にモデル化する独自の関連付けられた平滑化関数があります。 選択できる平滑化関数には多くの種類がありますが、広く使用されている平滑化関数は 回帰スプライン それらは実用的で計算効率が良いからです。 この本では、回帰スプラインに焦点を当てます。 それでは、回帰スプラインを使用して GAM の世界に足を踏み入れましょう。

回帰スプライン

回帰スプラインは、線形関数または多項式関数の加重和として表されます。これらの多項式関数は基底関数とも呼ばれます。 これは、以下に数学的に示されています。 方程式では、 J F 特徴間の関係をモデル化する関数です。 x_j およびターゲット変数。 この関数は、重みが次のように表される基底関数の加重和として表されます。 w_k 基底関数は次のように表されます。 b_k. GAM のコンテキストでは、関数 J F をスムージング関数と呼びます。

診断AI

では、基底関数とは何でしょう? 基底関数は、一般的な形状または非線形の関係を捉えるために使用できる変換のファミリーです。 回帰スプラインでは、その名前が示すように、スプラインが基底関数として使用されます。 スプラインは次数の多項式です n   n-1 連続導関数。 イラストを使用すると、スプラインを理解しやすくなります。 図 3 は、さまざまな角度のスプラインを示しています。 左上のグラフは次数 0 の最も単純なスプラインを示しており、そこからより高い次数のスプラインを生成できます。 左上のグラフからわかるように、0 つのスプラインがグリッドに配置されています。 アイデアは、データの分布を部分に分割し、それらの各部分にスプラインを適合させることです。 したがって、この図では、データが XNUMX つの部分に分割されており、各部分を次数 XNUMX のスプラインとしてモデル化しています。

右上のグラフに示されている次数 1 のスプラインは、次数 0 のスプラインをそれ自体で畳み込むことによって生成できます。 畳み込みは、XNUMX つの関数を取り込んで、最初の関数と XNUMX 番目の関数の遅延コピーの相関関係を表す XNUMX 番目の関数を作成する数学演算です。 関数をそれ自体で畳み込むとき、本質的には、関数とそれ自体の遅延コピーとの相関関係を調べています。 Christopher Olah による素敵なブログ投稿があります。 畳み込み。 この アニメーション 次数 0 のスプラインをそれ自体で畳み込むことにより、三角形の次数 1 のスプラインが得られ、これには連続した 0 があります。th 導関数を注文します。

次数 1 のスプラインをそれ自体で畳み込むと、左下のグラフに示されている次数 2 のスプラインが得られます。 この次数 2 のスプラインには、連続した 1 があります。st 導関数を注文します。 同様に、次数 3 のスプラインを畳み込むことで次数 2 のスプラインを得ることができ、これには連続した 2 があります。nd 導関数を注文します。 一般的に、学位 n スプラインには連続性があります n-1 派生物。 としての限界で n 無限大に近づくと、ガウス分布の形状を持つスプラインが得られます。 実際には、 3度 or 三次スプライン ほとんどの一般的な形状をキャプチャできるため、使用されます。

前述のように、図 5 では、データの分布を XNUMX つの部分に分割し、グリッドに XNUMX つのスプラインを配置しました。 前の数式では、部分またはスプラインの数は変数として表されます。 K. 回帰スプラインの背後にある考え方は、各部分のデータの分布をモデル化できるように、各スプラインの重みを学習することです。 グリッド内の部分またはスプラインの数、 K、とも呼ばれます 自由度. 一般に、これらを配置すると K グリッド上のスプライン、次のようになります K + 3 分割点、としても知られる ノット.

診断AI
図 5: 次数 0、次数 1、次数 2、および次数 3 スプラインの図

図 6 に示すように、6 次スプラインを拡大してみましょう。6 つのスプラインまたは 9 つの自由度があり、結果として XNUMX つの分割点またはノットがあることがわかります。

診断AI
図 6: スプラインとノットの図

一般的な形状をキャプチャするには、スプラインの加重合計を取得する必要があります。 ここでは 7 次スプラインを使用します。 図 6 では、同じ 9 つのスプラインを重ね合わせて 6 つのノットを作成しています。 左のグラフでは、6 つのスプラインすべてに同じ重みを設定しています。 ご想像のとおり、6 つのスプラインすべてを均等に重み付けして合計すると、水平の直線が得られます。 これは、生データへの適合が不十分であることを示しています。 ただし、右側のグラフでは、生データに完全に適合する形状を生成する XNUMX つのスプラインの不均等な加重和をとっています。 これは、回帰スプラインと GAM の威力を示しています。 スプラインの数を増やすか、データをより多くの部分に分割することで、より複雑な非線形関係をモデル化できるようになります。 回帰スプラインに基づく GAM では、各特徴とターゲット変数の非線形関係を個別にモデル化し、それらをすべて加算して最終的な予測を導き出します。

診断AI
図 7: 非線形関係をモデル化するためのスプライン

図 7 では、生データを最もよく表すために、試行錯誤を繰り返して重みを決定しました。 しかし、特徴とターゲットの間の関係を最もよく捉える回帰スプラインの重みをアルゴリズムで決定するにはどうすればよいでしょうか? 回帰スプラインは基底関数またはスプラインの加重和であることを前に思い出してください。 これは基本的に線形回帰の問題であり、最小二乗法と勾配降下法を使用して重みを学習できます。 ただし、ノット数または自由度を指定する必要があります。 これをハイパーパラメータとして扱い、と呼ばれる手法を使用して決定できます。 交差検定. 相互検証を使用して、データの一部を削除し、残りのデータに特定の数の事前定義されたノットを使用して回帰スプラインを当てはめます。 この回帰スプラインは、ホールドアウト セットで評価されます。 最適なノット数は、ホールドアウト セットで最高のパフォーマンスが得られる数です。

GAM では、スプラインの数または自由度を増やすことで簡単にオーバーフィットする可能性があります。 スプラインの数が多い場合、スプラインの加重和である結果の平滑化関数は、非常に「揺れ動く」ものになります。つまり、データ内のノイズの一部に適合し始めます。 この揺れを制御したり、オーバーフィッティングを防ぐにはどうすればよいでしょうか? これは、と呼ばれる技術によって行うことができます。 正則化. 正則化では、揺れを定量化する項を最小二乗コスト関数に追加します。 平滑化関数の揺れは、2 の XNUMX 乗を積分することで定量化できます。nd 関数の階微分。 次に、 ラムダ、揺れの強さを調整できます。 価値が高い ラムダ 揺れに大きくペナルティを課します。 私たちは決定することができます ラムダ 交差検証を使用して他のハイパーパラメータを決定するのと同じ方法です。

GAM の概要

GAM は強力なモデルであり、ターゲット変数は、各機能とターゲットの関係を表す平滑化関数の合計として表されます。平滑化関数を使用して、非線形の関係を捉えることができます。 これは、以下に再び数学的に示されています。

y= w_0+ f_1 (x_1)+f_2 (x_2)+⋯+ f_n (x_n)

平滑化関数を使用して各特徴がどのように出力に変換されるかを簡単に確認できるため、これはホワイト ボックス モデルです。 平滑化関数を表す一般的な方法は、回帰スプラインを使用することです。 回帰スプラインは、基底関数の単純な加重和として表されます。 GAM で広く使用されている基底関数は XNUMX 次スプラインです。 スプラインの数または自由度を増やすことで、データの分布を小さな部分に分割し、各部分を区分的にモデル化できます。 このようにして、非常に複雑な非線形関係を捉えることができます。 学習アルゴリズムは、本質的に回帰スプラインの重みを決定する必要があります。 これは、最小二乗法と勾配降下法を使用した線形回帰と同じ方法で行うことができます。 クロス検証手法を使用してスプラインの数を決定できます。 スプラインの数が増えると、GAM はデータにオーバーフィットする傾向があります。 正則化手法を使用することで、これを防ぐことができます。 正則化パラメーターを使用して、揺れの量を制御できます。 より高い ラムダ よりスムーズな機能を保証します。 パラメータ ラムダ 交差検証を使用して決定することもできます。

GAM は、変数間の相互作用をモデル化するためにも使用できます。 GA2M は、ペアワイズ相互作用をモデル化する GAM の一種です。 以下に数学的に示します。

診断AI

対象分野の専門家 (SME) (Diagnostics+ の例では医師) の助けを借りて、どの機能の相互作用をモデル化する必要があるかを判断できます。 また、どの機能を一緒にモデル化する必要があるかを理解するために、機能間の相関関係を調べることもできます。

Python には、GAM のビルドとトレーニングに使用できる pyGAM というパッケージがあります。 これは、R で人気のある mgcv パッケージの GAM 実装に触発されています。次のように pip パッケージを使用して、Python 環境に pyGAM をインストールできます。

pip install pygam

診断+糖尿病のためのGAM

Diagnostics+ の例に戻り、GAM をトレーニングして、10 個の機能すべてを使用して糖尿病の進行を予測しましょう。 患者の性別はカテゴリまたは個別の特徴であることに注意することが重要です。 平滑化関数を使用してこの機能をモデル化することは意味がありません。 GAM では、そのようなカテゴリ特徴を因子項として扱うことができます。 GAM は、次のように pyGAM パッケージを使用してトレーニングできます。 糖尿病データセットをロードし、トレーニング セットとテスト セットに分割するコードについては、記事の冒頭を参照してください。

from pygam import LinearGAM #A
from pygam imports #B
from pygam import f #C # Load data using the code snippet in Section 2.2 gam = LinearGAM(s(0) + #D f(1) + #E s(2) + #F s(3) + #G s(4) + #H s(5) + #I s(6) + #J s(7) + #K s(8) + #L s(9), #M n_splines=35) #N gam.gridsearch(X_train, y_train) #O y_pred = gam.predict(X_test) #P mae = np.mean(np.abs(y_test - y_pred)) #Q #A Import the LinearGAM class from pygam that can be used to train a GAM for regression tasks
#B Import the smoothing term function to be used for numerical features
#C Import the factor term function to be used for categorical features
#D Cubic spline term for the Age feature
#E Factor term for the Sex feature which is categorical
#F Cubic splineterm for the BMI feature
#G Cubic spline term for the BP feature
#H Cubic spline term for the Total Cholesterol feature
#I Cubic spline term for the LDL feature
#J Cubic spline term for the HDL feature
#K Cubic spline term for the Thyroid feature
#L Cubic spline term for the Glaucoma feature
#M Cubic spline term for the Glucose feature
#N Maximum number of splines to be used for each feature
#O Using grid search to perform training and cross-validation to determine the number of splines, the regularization parameter lambda and the optimum weights for the regression splines for each feature
#P Use trained GAM model to predict on the test
#Q Evaluate the performance of the model on the test set using the MAE metric

さあ、真実の瞬間を! GAM のパフォーマンスはどうでしたか? GAM の MAE パフォーマンスは 41.4 で、線形回帰および決定木モデルと比較するとかなり改善されています。 3 つのモデルすべてのパフォーマンスの比較を表 1 にまとめます。また、Diagnostics+ と医師がすべての患者の糖尿病進行の中央値を調べたときに使用したベースライン モデルのパフォーマンスも含めました。 すべてのモデルをベースラインと比較して、モデルが医師にどの程度の改善をもたらすかを示します。 GAM は、すべてのパフォーマンス メトリクスで最高のモデルのようです!

  MAE RMSE MAPE
ベースライン 62.2 74.7 51.6
直線回帰 42.8(-19.4) 53.8(-20.9) 37.5(-14.1)
決定木 48.6(-13.6) 60.5(-14.2) 44.4(-7.2)
GAM 41.4(-20.8) 52.2(-22.5) 35.7(-15.9)
表 1: Diagnostics+ AI のベースラインに対する線形回帰、デシジョン ツリー、GAM のパフォーマンス比較

ここまでで、GAM の予測能力を確認しました。 機能の相互作用、特にコレステロール機能同士、および BMI のように高度に相関している可能性のある他の機能との相互作用をモデル化することで、パフォーマンスをさらに改善できる可能性があります。 演習として、GAM を使用して機能の相互作用をモデル化することを強くお勧めします。

GAM はホワイト ボックスであり、簡単に解釈できます。 次のセクションでは、GAM がどのように解釈されるかについて説明します。

分類タスクの GAM

GAM は、応答が 0 または 1 のいずれかになるロジスティック リンク関数を使用して、二項分類器をトレーニングするためにも使用できます。pyGAM パッケージでは、二項分類の問題にロジスティック GAM を利用できます。

from pygam import LogisticGAM gam = LogisticGAM() gam.gridsearch(X_train, y_train)

GAM の解釈

各平滑化関数は基底関数の線形結合として取得されますが、各フィーチャの最終的な平滑化関数は非線形であるため、重みを線形回帰と同じ方法で解釈することはできません。 ただし、部分依存または部分効果プロットを使用して、ターゲットに対する各機能の効果を簡単に視覚化できます。 部分的依存は、残りの機能を疎外することによって、各機能の効果を調べます。 ターゲット変数に対する各特徴値の平均効果を確認できるため、解釈が容易です。 特徴に対するターゲットの反応が線形か、非線形か、単調か、非単調かを確認できます。図 8 は、ターゲット変数に対する各患者メタデータの効果を示しています。 それらの周りの 95% 信頼区間もプロットされています。これは、サンプル サイズが小さいデータ ポイントに対するモデルの感度を判断するのに役立ちます。

ここで、図 8 の BMI と BP の 95 つの機能を見てみましょう。 ターゲット変数に対する BMI の影響は、左下のグラフに示されています。 x 軸には BMI の正規化された値が表示され、y 軸には BMI が患者の糖尿病の進行に与える影響が表示されます。 BMI が増加すると、糖尿病の進行に対する効果も増加することがわかります。 右下のグラフに示されているように、血圧についても同様の傾向が見られます。血圧が高いほど、糖尿病の進行に対する影響が大きくなることがわかります。 信頼度 8% の内部線 (図 XNUMX の破線) を見ると、BMI と BP の下端と上端の周囲に広い信頼度があることがわかります。 これは、これらの値の範囲で患者のサンプルが少なくなり、これらの範囲でのこれらの機能の影響を理解する際の不確実性が高くなるためです。

診断AI
図 8: ターゲット変数に対する各患者メタデータの効果

図 8 を生成するコードは次のとおりです。

grid_locs1 = [(0, 0), (0, 1), #A (1, 0), (1, 1)] #A
fig, ax = plt.subplots(2, 2, figsize=(10, 8)) #B
for i, feature in enumerate(feature_names[:4]): #C gl = grid_locs1[i] #D XX = gam.generate_X_grid(term=i) #E ax[gl[0], gl[1]].plot(XX[:, i], gam.partial_dependence(term=i, X=XX)) #F ax[gl[0], gl[1]].plot(XX[:, i], gam.partial_dependence(term=i, X=XX, width=.95)[1], c='r', ls='--') #G ax[gl[0], gl[1]].set_xlabel('%s' % feature) #H ax[gl[0], gl[1]].set_ylabel('f ( %s )' % feature) #H #A Locations of the 4 graphs in the 2x2 matplotlib grid
#B Create 2x2 grid of matplotlib graphs
#C Iterate through the 4 patient metadata features
#D Get location of feature in the 2x2 grid
#E Generate the partial dependence of the feature values with the target marginalizing on the other features
#F Plot the partial dependence values as a solid line
#G Plot the 95% confidence interval around the partial dependence values as a dashed line
#H Add labels for the x and y axes

図 9 は、ターゲットに対する 6 つの血液検査測定値のそれぞれの効果を示しています。 エクササイズとして、総コレステロール、LDL、HDL、緑内障などの特徴が糖尿病の進行に及ぼす影響を観察してください。 より高い LDL 値 (または悪玉コレステロール) がターゲット変数に与える影響について、どのように言えますか? 総コレステロールが高いほど、ターゲット変数への影響が小さくなるのはなぜですか? これらの質問に答えるために、コレステロール値が非常に高いいくつかの患者のケースを見てみましょう. 以下のコード スニペットは、それらの患者にズームインするのに役立ちます。

print(df_data[(df_data['Total Cholesterol'] > 0.15) & (df_data['LDL'] > 0.19)])

上記のコードを実行すると、1 人中、総コレステロール値が 442 を超え、LDL 値が 0.15 を超える患者が 0.19 人だけ表示されます。 この患者の 84 年後の空腹時血糖値 (目標変数) は 9 で、正常範囲内にあるようです。 これは、図 0.15 で、XNUMX を超える範囲のターゲット変数に対する総コレステロールの非常に大きなマイナス効果が見られる理由を説明できます。 総コレステロールの負の効果は、悪玉 LDL コレステロールが標的に及ぼすと思われる正の効果よりも大きいようです。 これらの値の範囲では、信頼区間がはるかに広いようです。 モデルは、この XNUMX つの外れ値の患者記録にオーバーフィットしている可能性があるため、これらの効果をあまり読み取らないでください。 これらの効果を観察することで、モデルが予測を確信しているケースまたは値の範囲と、不確実性が高いケースを特定できます。 不確実性の高いケースでは、診断センターに戻ってより多くの患者データを収集し、代表的なサンプルを得ることができます。

診断AI
図 9: ターゲット変数に対する各血液検査測定値の影響

図 9 を生成するコードは次のとおりです。

grid_locs2 = [(0, 0), (0, 1), #A (1, 0), (1, 1), #A (2, 0), (2, 1)] #A
fig2, ax2 = plt.subplots(3, 2, figsize=(12, 12)) #B
for i, feature in enumerate(feature_names[4:]): #C idx = i + 4 #D gl = grid_locs2[i] #D XX = gam.generate_X_grid(term=idx) #E ax2[gl[0], gl[1]].plot(XX[:, idx], gam.partial_dependence(term=idx, X=XX)) #F ax2[gl[0], gl[1]].plot(XX[:, idx], gam.partial_dependence(term=idx, X=XX, width=.95)[1], c='r', ls='--') #G ax2[gl[0], gl[1]].set_xlabel('%s' % feature) #H ax2[gl[0], gl[1]].set_ylabel('f ( %s )' % feature) #H #A Locations of the 6 graphs in the 3x2 matplotlib grid
#B Create 3x2 grid of matplotlib graphs
#C Iterate through the 6 blood test measurement features
#D Get location of feature in the 3x2 grid
#E Generate the partial dependence of the feature values with the target marginalizing on the other features
#F Plot the partial dependence values as a solid line
#G Plot the 95% confidence interval around the partial dependence values as a dashed line
#H Add labels for the x and y axes

図 8 と 9 から、ターゲットに対する各特徴値の限界効果をより深く理解することができます。 部分依存プロットは、モデルの問題をデバッグするのに役立ちます。 部分依存値の周りに 95% 信頼区間をプロットすると、サンプル サイズが小さいデータ ポイントも確認できます。 サンプル サイズが小さい特徴値がターゲットに劇的な影響を与える場合、オーバーフィッティングの問題が発生する可能性があります。 また、モデルがデータのノイズに適合しているかどうかを判断するために、平滑化関数の「揺れ」を視覚化することもできます。 正則化パラメーターの値を大きくすることで、これらのオーバーフィッティングの問題を修正できます。 これらの部分依存プロットは、中小企業 (この場合は医師) と共有して、信頼を得るのに役立つ検証を行うこともできます。

GAM の制限

これまで、予測力と解釈可能性の点で GAM の利点を見てきました。 GAM はオーバーフィットする傾向がありますが、これは正則化によって克服できます。 ただし、注意が必要なその他の制限がいくつかあります。

  • GAM は、トレーニング セットの範囲外の特徴値に敏感であり、外れ値にさらされると予測力を失う傾向があります。
  • ミッション クリティカルなタスクでは、GAM の予測能力が限られている場合があり、その場合は、より強力なブラック ボックス モデルを検討する必要があります。

この記事は以上です。

本について詳しく知りたい場合は、ブラウザベースの liveBook プラットフォームで内容を確認できます。 こちら.

この記事をお楽しみください? AIリサーチの最新情報にサインアップしてください。

このような要約記事がさらにリリースされたらお知らせします。

スポット画像

最新のインテリジェンス

スポット画像