RでPLSのnumber of components(潜在変数)を自動最適化する方法
1.背景と目的
〇背景
・PLSは各変数を主成分軸に射影し、主成分軸との相関を取る線形回帰手法です。変数選択と同様に偽相関の影響を避け、頑健なモデルを構築することが出来ます。
・一般的な使い方は様々なページで公開されています。
bitwalk.blogspot.com
・一方で、PLSでは最終的にnumber of componentsを選択する必要があります。例えば、一般的な使い方をした場合こんな感じで、CV後のRMSEPが最小となる所を選ぶ必要があります。ただ、ここも出来れば自動化したいですよね。(せっかく主観を排除したモデルを作っても、最終判断に人の手が入るのは避けたい。客観的にしたい)
〇目的
・無料で使えるnumber of componentsの最適化手法を紹介することです。
2.総括
・package: plsのselectNcomp関数を使いましょう。
・英語版のhelpを参考に、要点と使い方(sample code)を載せておきます。
3.各論
〇sample code
library(pls) compounds.plsr <- plsr(y~., data=data, validation="CV") ncomp.onesigma <- selectNcomp(compounds.plsr, method = "onesigma", plot = TRUE, ylim = c(.1, 1)) ncomp.onesigma predict(compounds.plsr)[, , ncomp.onesigma] #本来[, , number of components]ですが、ここでは最適化したものを代入しています plsr.predicted.y <- predict(compounds.plsr)[, , ncomp.onesigma] plsr.r2 <- cor(y, plsr.predicted.y)**2 plsr.r2 #実測-予測比較グラフの描画 plot(y, plsr.predicted.y, xlab="Observed value", ylab="Predicted value", main="PLSR") abline(a=0, b=1) #係数の出力においても、同様にnumber of componentsは最適化済みのものを設定します compounds.plsr$coefficients[, , ncomp.onesigma]
〇説明
・実際に使用すると、こんな結果が出力されます。onesigmaをmethodとして用いた場合、RMSEPが最小値に対し1σ以内となる、最小のnumber of componentsを選択します。もう一つはrandomizationという手法で、number of componentsを増やしてもRMSEPが有意に減少しなくなった所を選びます。
4.技術分野
・機械学習+語学