主要内容

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

部分最小二乗回帰と主成分回帰

この例では,部分最小二乗回帰(PLSR)と主成分回帰(PCR)の適用方法を示し,これら2つの手法の有効性について説明します。PLSRとPCRは,どちらも,高相関性または共線性のある多数の予測子変数がある場合に,応答変数をモデル化するために使用する手法です。どちらの手法も,オリジナルの予測子変数の線形結合として,成分と呼ばれる新しい予測子変数を作成しますが,それらの成分の作成方法は異なります。PCRは,応答変数を一切考慮することなく,予測子変数での観測された変動を説明する成分を作成します。一方,PLSRは応答変数を考慮するため,少ない数の成分で応答変数を近似できるモデルにつながります。特定の用途にいて,これが最終的により倹約的なモデルを意味するかどうかは,コンテキストによります。

デ,タの読み込み

401年波長でのガソリンの60標本のスペクトル強度と,オクタン価で構成されるデータセットを読み込みます。これらのデ,タは,Kalivas, John H.,“近红外光谱的两个数据集”,化学计量学和智能实验室系统,第37节(1997) pp.255-259で説明しています。

负载光谱近红外光谱辛烷
名称大小字节类属性NIR 60x401 192480双辛烷值60x1 480双
[dummy,h] = sort(辛烷值);Oldorder = get(gcf,“DefaultAxesColorOrder”);集(gcf,“DefaultAxesColorOrder”, jet (60));plot3 (repmat(1:401, 60岁,1)”,repmat(辛烷(h), 1401),近红外光谱(h:) ');集(gcf,“DefaultAxesColorOrder”, oldorder);包含(“波长指数”);ylabel (“辛烷”);轴(“紧”);网格

2 .の成分を使用したデ,タの近似

10個のPLS成分と1の応答を使用してPLSRモデルを近似するには,関数plsregressを使用します。

X = nir;Y =辛烷;[n,p] = size(X);[Xloadings,Yloadings,Xscores, scores,betaPLS10,PLSPctVar] = plsreturn (...X, y, 10);

データを適切に近似するために,成分は10個も必要ないかもしれませんが,この近似からの診断を使用すると,成分数の少ないより単純なモデルを選択することができます。たとえば,成分数を簡単に選択する1つの方法に,応答変数で記述された分散のパーセントを成分数の関数としてプロットする方法があります。

情节(1:10,cumsum (100 * PLSPctVar (2:)),“博”);包含(“PLS组件数目”);ylabel (“用Y解释的百分比方差”);

実際には,成分数の選択は慎重に行うことをお勧めします。たとえば,この例で後述する交差検証は広く使用される方法です。ここでは,2の成分を含むPLSRは観測されたyの分散のほとんどを説明することが上のプロットで示されています。2。

[xloads, yloads,Xscores, scores,betaPLS] = plsreturn (X,y,2);yfitPLS = [ones(n,1) X]* betappls;

次に,2の主成分を使用して。最初に,関数主成分分析を使用してXに対する主成分分析を実行します。この場合PCRは,それらの2成分の応答変数の線形回帰にすぎません。2つの変数の変動の量が大きく異なる場合は,標準偏差によって各変数を最初に正規化するのが普通ですが,ここではそれは行いません。

[PCALoadings,PCAScores,PCAVar] = pca(X,“经济”、假);betaPCR =回归(y-mean(y), PCAScores(:,1:2));

オリジナルのスペクトルデータに関連して,PCR結果を簡単に解釈できるようにするためには,オリジナルの中心化されていない変数の回帰係数に変換します。

betaPCR = PCALoadings(:,1:2)*betaPCR;betaPCR = [mean(y) - mean(X)*betaPCR;betaPCR];yfitPCR = [ones(n,1) X]*betaPCR;

PLSR近似とPCR近似にいて,近似した応答と観測した応答をプロットします。

情节(y, yfitPLS,“波”y yfitPCR“r ^”);包含(观察到的响应的);ylabel (“拟合响应”);传奇({“2组件PLSR”“双组分PCR”},...“位置”“西北”);

ある意味では,上のプロットでの比較は公平なものではありません。成分数(2)は2成分をもつPLSRモデルで応答予測が効果的に行われたことを確認してから選択したものです。PCRモデルをそれと同じ数の成分に制限する必要はありません。ただし,同じ数の成分を使った場合,yの近似はPLSRで行った方がはるかに効果的です。実際,上のプロットで近似した値の水平方向の分散を見ると,2成分をもつPCRは定数モデルを使用した場合とほとんど変わりません。それは,2の回帰からの決定係数によって裏付けられています。

TSS = sum((y-mean(y)).^2);RSS_PLS = sum((y-yfitPLS).^2);rsquaredPLS = 1 - RSS_PLS/TSS
rsquaredPLS = 0.9466
RSS_PCR = sum((y-yfitPCR).^2);rsquaredPCR = 1 - RSS_PCR/TSS
rsquaredPCR = 0.1962

2つのモデルの予測力を比較するもう1つの方法として,両方で2つの予測子に対して応答変数をプロットする方法があります。

plot3 (Xscores (: 1) Xscores (:, 2), y-mean (y),“波”);传奇(“PLSR”);网格;视图(-30年,30);

図を対話形式で回転できないので,わかりにくいかもしれませんが,上のPLSRプロットでは,点が平面上に近接して分散しています。一方,下のPCRプロットでは,点群が示されており,線形関係があることはほとんどわかりません。

plot3 (PCAScores (: 1) PCAScores (:, 2), y-mean (y),“r ^”);传奇(聚合酶链反应的);网格;视图(-30年,30);

2 .のPLS成分は,観測されたyの予測子としてははるかに優れていますが,次の図を見ると,PCRで使用された最初の2つの主成分と比べて,観測されたXの分散が少ないことがわかります。

情节(1:10,100 * cumsum (PLSPctVar (1:)),“这”1:10,...100 * cumsum (PCAVar(1:10)) /笔(PCAVar (1:10)),的r - ^);包含(“主成分数目”);ylabel (“在X中解释的方差百分比”);传奇({“PLSR”聚合酶链反应的},“位置”“本身”);

PCR曲線が一様に高いという事実は,2成分のPCRでのyの近似がPLSRに劣ることを示しています。PCRでは,Xを最も効果的に説明するように成分を構成します。その結果,最初の2の成分は,観測されたyの近似で重要なデ,タの情報を無視します。

3以上の成分を使用した近似

PCRに成分が追加されると共に,オリジナルデ,タyの近似が改善されます。これは,Xにおける重要な予測情報のほとんどが,いかは主成分に含まれるようになるためです。たとえば,以下の図では,2つの方法での残差の差は10成分を使用する場合のほうが2成分を使用する場合よりはるかに少なくなっています。

yfitPLS10 = [ones(n,1) X]*betaPLS10;betaPCR10 =回归(y-mean(y), PCAScores(:,1:10));betaPCR10 = PCALoadings(:,1:10)*betaPCR10;betaPCR10 = [mean(y) - mean(X)*betaPCR10;betaPCR10];yfitPCR10 = [ones(n,1) X]*betaPCR10;情节(y, yfitPLS10,“波”y yfitPCR10“r ^”);包含(观察到的响应的);ylabel (“拟合响应”);传奇({“10个组件的PLSR”“十组分PCR”},...“位置”“西北”);

どらのモデルもyをほぼ正確に近似しますが,plsrの精度の方がわずかに上です。ただし,どらのモデルにいても10個の成分は任意で選択した数値です。

交差検証による成分数の選択

成分を複数にすることは,予測子変数での将来の観測からの応答を予測する場合に,予測誤差を減らすために役立ちます。多くの成分を使用すると,現在の観測されたデータの近似の効果は上がりますが,この方法は過適合につながります。現在のデータの近似が正確になりすぎると,他のデータのために一般化し難く,予測誤差について過度に楽観的な推定を提供するモデルが生成されます。

交差検証は,plsrまたはPCRで成分を選択する方法として,統計的に優れた方法です。この方法では,モデルの近似と,予測誤差の推定に同じデータを再利用しないことで,データの過適合を防いでいます。したがって,予測誤差の推定は楽観的な下方バ。

plsregressには,交差検証による平均二乗予測誤差(msep)を推定するオプションがあります。この場合は,10分割交差検証を使用します。

[Xl,Yl,Xs,Ys,beta,pctVar,PLSmsep] = plsregression (X,y,10,“简历”10);

PCRの場合,crossvalを単純な関数と組み合わせて,pcrの誤差の二乗和を計算することで,msepを予測できます。ここでも10分割交差検証を使用します。

PCRmsep = sum(crossval(@pcrsse,X,y,“KFold”,10),1) / n;

PLSRのMSEP曲線は2個または3個の成分を使用すると,最大限の効果があることを示しています。一方,pcrで同じ予測精度を実現するには4の成分が必要になります。

:情节(0:10 PLSmsep (2),“这”0:10 PCRmsep,的r - ^);包含(“组件数量”);ylabel (“估计均方预测误差”);传奇({“PLSR”聚合酶链反应的},“位置”“不”);

実際,pcrの2番目の成分は,モデルの予測誤差を拡大します。これは,その成分に含まれる予測子変数の組み合わせとyとの相関が弱いことを示しています。この理由も,pcrではyではなくXでの偏差を説明するように成分を構成するためです。

モデルの倹約性

PCRで3成分のPLSRと同じ予測精度を達成するために4つの成分が必要だとすると,PLSRモデルの方が倹約的ということでしょうか?その答えはモデルのどの局面を考えているかによって異なります。

PLSの重みは,PLS成分を定義するオリジナル変数の線形組み合わせです。まり,plsrの各成分がオリジナル変数にどれだけ依存するか,そしてその依存方向を示します。

[Xl,Yl,Xs,Ys,beta,pctVar,mse,stats] = plsregression (X,y,3);情节(1:401,统计数据。W,“- - -”);包含(“变量”);ylabel (“请重”);传奇({“组件1日”“第二部分”“第三部分”},...“位置”“西北”);

同様に,pca負荷量は,pcrの各成分がオリジナル変数にどれだけ依存するかを示します。

情节(1:401 PCALoadings (:, 1:4),“- - -”);包含(“变量”);ylabel (“PCA加载”);传奇({“组件1日”“第二部分”“第三部分”...“第四组件”},“位置”“西北”);

PLSRの場合もPCRの場合も,どの変数に最大の重み付けをしているかを調べることで,物理的に意味のある解釈を与えることができる可能性があります。たとえば,これらのスペクトルデータでは,ガソリンに含有される化合物に関連して,強度ピークを解釈し,特定の成分についてその重みを観測するために,少数の成分を選択することができます。この観点からは,成分の数が少ないほど解釈が簡単になります。そして,PLSRでは応答を正しく予測するために必要な成分の数が少ないので,より倹約的なモデルの生成につながります。

一方,PLSRとPCRの両方で,オリジナルの各予測子変数に対して1つの回帰係数,および1つの切片が生成されます。その意味では,使用した成分の数にかかわらず,どちらのモデルもすべての予測子に依存するので,どちらかがより倹約的であるとは言えません。具体的には,これらのデ,タでは,予測のために両方のモデルで401のスペクトル強度値が必要です。

しかし,最終的な目標は,オリジナルの変数セットを,1つのサブセットに縮小し,応答を正確に予測することです。たとえば,请の重み,またはPCA負荷量を使用して,各成分への影響度が最も高い変数のみを選択できます。前に示したように,PCRモデル近似の一部の成分は,主に予測子変数の変動の把握のために使用することができ,また応答との相関が弱い変数に対する大きな重みを含むことができます。したがって,pcrは予測には不要な変数を維持する結果になることがあります。

この例で使用するデータについては,正確な予測のためにPLSRとPCRで必要とされる成分の数の違いは大きくなく,请の重みとPCAの負荷量は同じ変数を選択するようです。他のデ,タでは必ずしもそのようにはなりません。