Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

partialDependence

説明

pd = partialDependence(RegressionMdl,Vars) は、回帰モデル RegressionMdl を使用して、Vars に記載されている予測子変数間の部分従属 pd と予測応答を計算します。これには予測子データが含まれます。

pd = partialDependence(ClassificationMdl,Vars,Labels) は、分類モデル ClassificationMdl を使用して、Vars に記載されている予測子変数間の部分従属 pd と、Labels で指定されたクラスのスコアを計算します。これには予測子データが含まれます。

pd = partialDependence(___,Data) は、Data の新しい予測子データを使用します。前の構文におけるいずれかの入力引数の組み合わせに加えて、Data を指定できます。

pd = partialDependence(___,Name,Value) は、1 つ以上の名前と値のペアの引数によって指定された追加オプションを使用します。たとえば、'UseParallel','true' を指定した場合、関数 partialDependence は並列計算を使用して部分従属の計算を実行します。

[pd,x,y] = partialDependence(___) は、xy も返します。これには、Vars の 1 番目と 2 番目の予測子変数の各クエリ点が含まれます。Vars で 1 つの変数を指定した場合、partialDependencey に空行列 ([]) を返します。

すべて折りたたむ

fisheriris データ セットで単純ベイズ分類モデルに学習させて、予測子変数と複数クラスの予測スコア (事後確率) の関係を示す部分従属の値を計算します。

fisheriris データ セットを読み込みます。これには 150 本のアヤメの標本について種類 (species) と、がく片の長さ、がく片の幅、花弁の長さ、花弁の幅の測定値 (meas) が含まれています。このデータセットには、setosa、versicolor および virginica の 3 種類のそれぞれについて 50 個ずつの標本が含まれています。

load fisheriris

応答に species、予測子に meas を使用して、単純ベイズ分類モデルに学習させます。

Mdl = fitcnb(meas,species,'PredictorNames',["Sepal Length","Sepal Width","Petal Length","Petal Width"]);

species の 3 つのクラスすべてに対する Mdl による予測スコアについて、3 番目の予測子変数 (花弁の長さ) の部分従属の値を計算します。MdlClassNames プロパティを使用して、クラス ラベルを指定します。

[pd,x] = partialDependence(Mdl,3,Mdl.ClassNames);

pd にはクエリ点 x の部分従属の値が含まれます。plotbarなどのプロット関数を使用して、計算された部分従属の値をプロットできます。関数 bar を使用して、x に対して pd をプロットします。

bar(x,pd)
legend(Mdl.ClassNames)
xlabel("Petal Length")
ylabel("Scores")
title("Partial Dependence Plot")

Figure contains an axes. The axes with title Partial Dependence Plot contains 3 objects of type bar. These objects represent setosa, versicolor, virginica.

このモデルでは、virginica の確率は花弁の長さにともなって増加しています。setosa の確率は、花弁の長さが 0 から 2.5 付近までは約 0.33 であり、それ以降は確率はほぼ 0 に低下します。

あるいは、関数plotPartialDependenceを使用し、部分従属の値を計算してプロットすることができます。

plotPartialDependence(Mdl,3,Mdl.ClassNames)

Figure contains an axes. The axes with title Partial Dependence Plot contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

分類モデルのアンサンブルに学習させ、複数クラスの 2 つの変数における部分従属の値を計算します。次に、各クラスの部分従属の値をプロットします。

census1994 データ セットを読み込みます。これには、<=50K または >50K に分類される米国の年収データと、複数の人口統計変数が含まれます。

load census1994

分析する変数のサブセットをテーブル adultdata から抽出します。

X = adultdata(1:500,{'age','workClass','education_num','marital_status','race', ...
   'sex','capital_gain','capital_loss','hours_per_week','salary'});

fitcensemble を使用して 'Method''Bag' として指定し、分類木のランダム フォレストに学習させます。再現性を得るために、templateTree'Reproducible' オプションで使用し、作成されたツリーのテンプレートを使用します。

rng('default')
t = templateTree('Reproducible',true);
Mdl = fitcensemble(X,'salary','Method','Bag','Learners',t);

Mdl のクラス名を検査します。

Mdl.ClassNames
ans = 2x1 categorical
     <=50K 
     >50K 

両方のクラス (<=50K>50K) について、予測子 ageeducation_num のスコアの部分従属の値を計算します。抽出する観測値の個数を 100 に指定します。

[pd,x,y] = partialDependence(Mdl,{'age','education_num'},Mdl.ClassNames,'NumObservationsToSample',100);

関数surflを使用し、1 番目のクラス (<=50K) の部分従属の値の表面プロットを作成します。

figure
surf(x,y,squeeze(pd(1,:,:)))
xlabel('age')
ylabel('education\_num')
zlabel('Score of class <=50K')
title('Partial Dependence Plot')
view([130 30]) % Modify the viewing angle

Figure contains an axes. The axes with title Partial Dependence Plot contains an object of type surface.

2 番目のクラス (>50K) の部分従属の値の表面プロットを作成します。

figure
surf(x,y,squeeze(pd(2,:,:)))
xlabel('age')
ylabel('education\_num')
zlabel('Score of class >50K')
title('Partial Dependence Plot')
view([130 30]) % Modify the viewing angle

Figure contains an axes. The axes with title Partial Dependence Plot contains an object of type surface.

2 つのプロットは、クラスによって異なる部分従属のパターンを示します。

carsmall データ セットを使用してサポート ベクター マシン (SVM) 回帰モデルに学習をさせ、2 つの予測子変数の部分従属を計算します。次に、2 つの変数の部分従属と、各変数のヒストグラムを示す Figure を作成します。

carsmall データセットを読み込みます。

load carsmall

WeightCylindersDisplacementHorsepowerを含む table を作成します。

Tbl = table(Weight,Cylinders,Displacement,Horsepower);

Tbl の予測子変数と応答変数 MPG を使用して SVM 回帰モデルに学習させます。自動カーネル スケールのガウス カーネル関数を使用します。

Mdl = fitrsvm(Tbl,MPG,'ResponseName','MPG', ...
    'CategoricalPredictors','Cylinders','Standardize',true, ...
    'KernelFunction','gaussian','KernelScale','auto');

予測子変数 WeightHorsepower の予測応答 (MPG) の部分従属を計算します。クエリ点を指定し、名前と値のペアの引数 'QueryPoints' を使用して部分従属を計算します。

numPoints = 10;
ptX = linspace(min(Weight),max(Weight),numPoints)';
ptY = linspace(min(Horsepower),max(Horsepower),numPoints)';
[pd,x,y] = partialDependence(Mdl,{'Weight','Horsepower'},'QueryPoints',[ptX ptY]);

5 行 5 列のタイル表示チャート レイアウトを含む Figure を作成します。関数imagescを使用して、2 つの変数の部分従属をプロットします。次に、関数histogramを使用して、各変数のヒストグラムを描画します。ヒストグラムのエッジを指定して、ヒストグラム バーの中心がクエリ点に揃うようにします。座標軸プロパティを変更して、プロットの座標軸を揃えます。

t = tiledlayout(5,5,'TileSpacing','compact');

ax1 = nexttile(2,[4,4]);
imagesc(x,y,pd)
title('Partial Dependence Plot')
colorbar('eastoutside')
ax1.YDir = 'normal';

ax2 = nexttile(22,[1,4]);
dX = diff(ptX(1:2));
edgeX = [ptX-dX/2;ptX(end)+dX];
histogram(Weight,edgeX);
xlabel('Weight')
xlim(ax1.XLim);

ax3 = nexttile(1,[4,1]);
dY = diff(ptY(1:2));
edgeY = [ptY-dY/2;ptY(end)+dY];
histogram(Horsepower,edgeY)
xlabel('Horsepower')
xlim(ax1.YLim);
ax3.XDir = 'reverse';
camroll(-90)

Figure contains 3 axes. Axes 1 with title Partial Dependence Plot contains an object of type image. Axes 2 contains an object of type histogram. Axes 3 contains an object of type histogram.

pd の各要素は、イメージ プロットの 1 ピクセルの色を指定します。イメージの座標軸に合わせたヒストグラムは、予測子の分布を示します。

入力引数

すべて折りたたむ

回帰モデル。完全またはコンパクトな回帰モデル オブジェクトとして指定します。サポートされるモデルは次の表に記載されています。

モデル完全またはコンパクトなモデル オブジェクト
一般化線形モデルGeneralizedLinearModel, CompactGeneralizedLinearModel
一般化線形混合効果モデルGeneralizedLinearMixedModel
線形回帰LinearModel, CompactLinearModel
線形混合効果モデルLinearMixedModel
非線形回帰NonLinearModel
回帰モデルのアンサンブルRegressionEnsemble, RegressionBaggedEnsemble, CompactRegressionEnsemble
一般化加法モデル (GAM)RegressionGAM, CompactRegressionGAM
ガウス過程回帰RegressionGP, CompactRegressionGP
ランダムな特徴量拡張を使用したガウス カーネル回帰モデルRegressionKernel
高次元データの線形回帰RegressionLinear
ニューラル ネットワーク回帰モデルRegressionNeuralNetwork, CompactRegressionNeuralNetwork
サポート ベクター マシン (SVM) 回帰RegressionSVM, CompactRegressionSVM
回帰木RegressionTree, CompactRegressionTree
決定木のアンサンブルのバギングTreeBagger, CompactTreeBagger

RegressionMdl が予測子データを含まないモデル オブジェクト (コンパクトなモデルなど) である場合、入力引数 Data を指定しなければなりません。

partialDependence は、スパース行列で学習させたモデル オブジェクトをサポートしません。モデルに学習させる場合は、行が各観測値に対応する非スパースの数値行列または table を予測子データに使用してください。

分類モデル。完全またはコンパクトなモデル オブジェクトとして指定します。サポートされるモデルは次の表に記載されています。

モデル完全またはコンパクトなモデル オブジェクト
判別分析分類器ClassificationDiscriminant, CompactClassificationDiscriminant
サポート ベクター マシンまたはその他の分類器用のマルチクラス モデルClassificationECOC, CompactClassificationECOC
分類用のアンサンブル学習器ClassificationEnsemble, CompactClassificationEnsemble, ClassificationBaggedEnsemble
一般化加法モデル (GAM)ClassificationGAM, CompactClassificationGAM
ランダムな特徴量拡張を使用したガウス カーネル分類モデルClassificationKernel
k 最近傍分類器ClassificationKNN
線形分類モデルClassificationLinear
マルチクラス単純ベイズ モデルClassificationNaiveBayes, CompactClassificationNaiveBayes
ニューラル ネットワーク分類器ClassificationNeuralNetwork, CompactClassificationNeuralNetwork
1 クラスおよびバイナリ分類用のサポート ベクター マシン (SVM) 分類器ClassificationSVM, CompactClassificationSVM
マルチクラス分類用の二分決定木ClassificationTree, CompactClassificationTree
決定木のバギング アンサンブルTreeBagger, CompactTreeBagger

ClassificationMdl が予測子データを含まないモデル オブジェクト (コンパクトなモデルなど) である場合、入力引数 Data を指定しなければなりません。

partialDependence は、スパース行列で学習させたモデル オブジェクトをサポートしません。モデルに学習させる場合は、行が各観測値に対応する非スパースの数値行列または table を予測子データに使用してください。

予測子変数。正の整数のベクトル、文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列として指定します。次の表に示されているように、1 つまたは 2 つの予測子変数を指定できます。

1 つの予測子変数

説明
正の整数予測子データの列に対応するインデックス値。
文字ベクトルまたは string スカラー

予測子変数の名前。名前は RegressionMdl.PredictorNames または ClassificationMdl.PredictorNames のエントリに一致しなければなりません。

2 つの予測子変数

説明
正の整数が 2 つ含まれているベクトル予測子データの列に対応するインデックス値。
文字ベクトルの cell 配列または string 配列

予測子変数の名前。配列の各要素は予測子変数の名前です。名前は RegressionMdl.PredictorNames または ClassificationMdl.PredictorNames のエントリに一致しなければなりません。

例: {'x1','x3'}

データ型: single | double | char | string | cell

クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Labels の値とデータ型は、ClassificationMdlClassNames プロパティ (ClassificationMdl.ClassNames) のクラス名のものと一致しなければなりません。

1 つまたは複数のクラス ラベルを指定できます。

この引数は、ClassificationMdl が分類モデル オブジェクトである場合のみ有効です。

例: {'red','blue'}

例: ClassificationMdl.ClassNames([1 3]) は、ClassificationMdl の 1 番目と 3 番目のクラスとして Labels を指定します。

データ型: single | double | logical | char | cell | categorical

予測子データ。数値行列またはテーブルとして指定します。Data の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

Data は、X または Variables プロパティに格納されている、モデル (RegressionMdl または ClassificationMdl) の学習に使用した予測子データと一致しなければなりません。

  • 数値行列を使用してモデルに学習をさせた場合、Data は数値行列でなければなりません。Data の列を構成する変数の個数と順序は、モデルに学習をさせた予測子変数のものと同じでなければなりません。

  • table (たとえば Tbl) を使用してモデルに学習をさせた場合、Data は table でなければなりません。Data 内のすべての予測子変数は、変数名およびデータ型が Tbl のものと同じでなければなりません。ただし、Data の列の順序が Tbl の列の順序に対応する必要はありません。

  • partialDependence はスパース行列をサポートしません。

RegressionMdl または ClassificationMdl が予測子データを含まないモデル オブジェクトである場合、Data を指定しなければなりません。モデルが予測子データを含む完全なモデル オブジェクトである場合にこの引数を指定すると、partialDependence はモデルの予測子データを使用せず、Data のみを使用します。

データ型: single | double | table

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: partialDependence(Mdl,Vars,Data,'NumObservationsToSample',100,'UseParallel',true) は、Data から抽出した 100 個の観測値を使用し、for ループの反復を並列実行することにより、部分従属の値を計算します。

部分従属の計算に、一般化加法モデル (GAM) の交互作用項を含めるフラグ。true または false として指定します。この引数は、GAM の場合のみ有効です。つまり、この引数を指定できるのは、RegressionMdlRegressionGAM または CompactRegressionGAM である場合か、ClassificationMdlClassificationGAM または CompactClassificationGAM である場合だけです。

モデルに交互作用項が含まれる場合、'IncludeInteractions' の既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。

例: 'IncludeInteractions',false

データ型: logical

部分従属の計算に一般化加法モデル (GAM) の切片項を含むというフラグ。true または false として指定します。この引数は、GAM の場合のみ有効です。つまり、この引数を指定できるのは、RegressionMdlRegressionGAM または CompactRegressionGAM である場合か、ClassificationMdlClassificationGAM または CompactClassificationGAM である場合だけです。

例: 'IncludeIntercept',false

データ型: logical

抽出する観測値の個数。正の整数として指定します。既定値は、Data またはモデル (RegressionMdl または ClassificationMdl) 内の観測値の総数です。観測値の総数より大きい値が指定された場合、partialDependence はすべての観測値を使用します。

partialDependence は、関数 datasample を使用して観測値を非復元抽出し、抽出した観測値を部分従属の計算に使用します。

例: 'NumObservationsToSample',100

データ型: single | double

数値予測子の部分従属を計算する点。数値列ベクトル、2 列の数値行列、または 2 つの数値列ベクトルの cell 配列として指定します。

  • Vars 内の予測子変数を 1 つ選択する場合、数値列ベクトルを使用します。

  • Vars 内の予測子変数を 2 つ選択する場合、次のようにします。

    • 各予測子変数について同じ個数の点を指定するには、2 列の数値行列を使用します。

    • 各予測子変数について異なる個数の点を指定するには、2 つの数値列ベクトルから成る cell 配列を使用します。

既定値は、数値列ベクトルまたは 2 列の数値行列で、選択した予測子変数の数に応じて決まります。各列には、予測子変数に対応する抽出した観測値の最小値と最大値の間に等間隔に並ぶ 100 個の点が含まれます。

カテゴリカル変数の 'QueryPoints' は変更できません。関数 partialDependence では、選択した変数としてすべてカテゴリカル値を使用します。

1 つの数値変数と 1 つのカテゴリカル変数を選択した場合、数値列ベクトルと空の配列で構成される cell 配列を使用することにより、数値変数について 'QueryPoints' を指定できます。

例: 'QueryPoints',{pt,[]}

データ型: single | double | cell

並列実行のフラグ。true または false として指定します。'UseParallel',true を指定した場合、関数 partialDependence は各観測値の応答またはスコアの予測と平均化を行う際、parfor を使用して for ループの反復を並列実行します。このオプションには Parallel Computing Toolbox™ が必要です。

例: 'UseParallel',true

データ型: logical

出力引数

すべて折りたたむ

部分従属の値。numXnumY 列の数値行列 (回帰モデル用) またはnumLabels x numX x numY 数値配列 (分類モデル用) として返されます。numXnumY はそれぞれ、Vars の 1 つ目と 2 つ目の変数のクエリ点の数です。numLabelsLabels のクラス ラベルの数です。

pd(i,j,k) の値は、i 番目のクラス ラベルにおけるクエリ点 x(j)y(k) の部分従属の値です。x(j) は 1 つ目の予測子変数における j 番目のクエリ点で、y(k) は 2 つ目の予測子変数における k 番目のクエリ点です。

Vars の 1 つ目の予測子変数のクエリ点。数値列ベクトルまたは categorical 列ベクトルとして返されます。

予測子変数が数値の場合、名前と値のペアの引数 'QueryPoints' の使用してクエリ点を指定できます。

データ型: single | double | categorical

Vars の 2 つ目の予測子変数のクエリ点。数値列ベクトルまたは categorical 列ベクトルとして返されます。

予測子変数が数値の場合、名前と値のペアの引数 'QueryPoints' の使用してクエリ点を指定できます。

データ型: single | double | categorical

詳細

すべて折りたたむ

回帰モデルの部分従属

部分従属[1]は、学習済みの回帰モデルにおける予測子変数と予測応答の関係を表します。partialDependence は、他の変数を除外することにより、予測子変数のサブセットにおける予測応答の部分従属を計算します。

予測子変数全体の集合 X = {x1, x2, …, xm} のサブセット XS における部分従属について考えます。サブセット XS には 1 つまたは 2 つの変数が含まれます (XS = {xS1} または XS = {xS1, xS2})。XC は X における XS の補集合であるとします。予測応答 f(X) は、X 内のすべての変数に依存します。

f(X) = f(XS, XC).

XS に対する予測応答の部分従属は、XC に関する予測応答の期待値によって定義されます。

fS(XS)=EC[f(XS,XC)]=f(XS,XC)pC(XC)dXC,

ここで、pC(XC) は XC の周辺確率です。つまり、pC(XC)p(XS,XC)dXS です。各観測値の確率が同程度であり、応答における XS と XC の間の従属および XS と XC の交互作用が強くないと仮定することにより、partialDependence は観測された予測子データを使用して次のように部分従属を推定します。

fS(XS)1Ni=1Nf(XS,XiC),(1)

ここで、N は観測値の個数、Xi = (XiS, XiC) は i 番目の観測値です。

関数 partialDependence を呼び出す場合、入力引数 RegressionMdlVars を使用して、学習済みモデル (f(·)) の指定と変数 (XS) の選択をそれぞれ行うことができます。partialDependence は、XS からの 100 個の等間隔の点、または名前と値のペアの引数 'QueryPoints' で指定された点における部分従属を計算します。特定の予測子データから抽出する観測値の個数 (N) は、名前と値のペアの引数 'NumObservationsToSample' を使用して指定できます。

部分従属分類モデル

分類モデルの場合、partialDependence は、回帰モデルと同じ方法で部分従属を計算します。1 つ違う点として、関数はモデルからの予測応答ではなく、Labels で指定されたクラスの予測スコアを使用します。

重み付き走査アルゴリズム

重み付き走査アルゴリズム[1]は、木ベースのモデルの部分従属を推定する手法です。推定される部分従属は、木の走査時に到達した葉ノードに対応する応答またはスコアの値の加重平均です。

XS は変数全体の集合 X のサブセット、XC は X における XS の補集合であるとします。このアルゴリズムでは、部分従属を計算する XS の各値について、ルート (開始) ノードから葉 (終端) ノードに向かって木を走査し、葉ノードの重みを求めます。走査は、ルート ノードに 1 という重みの値を割り当てることにより始まります。XS でノードが分割される場合、XS の値に応じて適切な子ノードが走査されます。子ノードの重みは親ノードと同じになります。XC でノードが分割される場合、両方の子ノードが走査されます。各子ノードの重みは、各子ノードに対応する観測値の比率を親ノードの値に乗算した値になります。木の走査の完了後、割り当てられた重みを使用して加重平均が計算されます。

バギング木のアンサンブルの場合、推定される部分従属は、各木の加重平均の平均です。

アルゴリズム

partialDependence は、関数 predict を使用して応答またはスコアを予測します。partialDependence は、モデル (RegressionMdl または ClassificationMdl) に従って適切な関数 predict を選択し、既定の設定で predict を実行します。各関数 predict の詳細については、次の 2 つの表の関数 predict を参照してください。指定したモデルが木ベースのモデル (木のブースティング アンサンブルを除く) の場合、partialDependence は関数 predict ではなく重み付き走査アルゴリズムを使用します。詳細については、重み付き走査アルゴリズムを参照してください。

回帰モデル オブジェクト

モデル タイプ完全またはコンパクトな回帰モデル オブジェクト応答を予測する関数
決定木のアンサンブルのバギングCompactTreeBaggerpredict
決定木のアンサンブルのバギングTreeBaggerpredict
回帰モデルのアンサンブルRegressionEnsemble, RegressionBaggedEnsemble, CompactRegressionEnsemblepredict
ランダムな特徴量拡張を使用したガウス カーネル回帰モデルRegressionKernelpredict
ガウス過程回帰RegressionGP, CompactRegressionGPpredict
一般化加法モデルRegressionGAM, CompactRegressionGAMpredict
一般化線形混合効果モデルGeneralizedLinearMixedModelpredict
一般化線形モデルGeneralizedLinearModel, CompactGeneralizedLinearModelpredict
線形混合効果モデルLinearMixedModelpredict
線形回帰LinearModel, CompactLinearModelpredict
高次元データの線形回帰RegressionLinearpredict
ニューラル ネットワーク回帰モデルRegressionNeuralNetwork, CompactRegressionNeuralNetworkpredict
非線形回帰NonLinearModelpredict
回帰木RegressionTree, CompactRegressionTreepredict
サポート ベクター マシンRegressionSVM, CompactRegressionSVMpredict

分類モデル オブジェクト

モデル タイプ完全またはコンパクトな分類モデル オブジェクトラベルとスコアを予測する関数
判別分析分類器ClassificationDiscriminant, CompactClassificationDiscriminantpredict
サポート ベクター マシンまたはその他の分類器用のマルチクラス モデルClassificationECOC, CompactClassificationECOCpredict
分類用のアンサンブル学習器ClassificationEnsemble, CompactClassificationEnsemble, ClassificationBaggedEnsemblepredict
ランダムな特徴量拡張を使用したガウス カーネル分類モデルClassificationKernelpredict
一般化加法モデルClassificationGAM, CompactClassificationGAMpredict
k 最近傍モデルClassificationKNNpredict
線形分類モデルClassificationLinearpredict
単純ベイズ モデルClassificationNaiveBayes, CompactClassificationNaiveBayespredict
ニューラル ネットワーク分類器ClassificationNeuralNetwork, CompactClassificationNeuralNetworkpredict
1 クラスおよびバイナリ分類用のサポート ベクター マシンClassificationSVM, CompactClassificationSVMpredict
マルチクラス分類用の二分決定木ClassificationTree, CompactClassificationTreepredict
決定木のバギング アンサンブルTreeBagger, CompactTreeBaggerpredict

代替機能

参照

[1] Friedman, Jerome. H. “Greedy Function Approximation: A Gradient Boosting Machine.” The Annals of Statistics 29, no. 5 (2001): 1189-1232.

[2] Hastie, Trevor, Robert Tibshirani, and Jerome Friedman. The Elements of Statistical Learning. New York, NY: Springer New York, 2009.

拡張機能

R2020b で導入