SnapCrab_2016-12-28_10-21-55_No-00

こんにちは、ねこし@大学教員ブロガー です。

解析するデータ数が少ないとき、ありますよね。30サンプルしかないのに、どうやってモデル構築用データとモデル検証用データに分ければいいの・・・みたいな。クロスバリデーションするにしても、ただでさえ少ないサンプルを、分割してさらに分割しなければなりません。つくられたモデルが不安定になってしまいます。

そこで、モデル検証用データを自分でつくることを考えましょう!

そうすれば、今あるすべてのサンプルをモデル構築用データにできるわけです。

モデル検証用データをつくるコード・プログラム公開中

下で説明するモデル検証用データのつくり方を、すぐに実現できるプログラムはこちらです。同じ言語であれば、noteでもSPIKEでも同じプログラムです。

MATLAB: note SPIKE

R: note SPIKE

Python: note SPIKE

近いサンプルとの間の中点をモデル検証用データにする

2つのサンプルの間の中点をモデル検証用データにする方法を紹介します。ただすべての2つのサンプルで中点を計算するわけではありません。距離が近い2つのサンプルに限ります(遠い2点のサンプルの中点は、他のサンプルとは全く異なる点になってしまうため使いません)。目的変数があれば、目的変数でも説明変数(記述子・特徴量・入力変数)と同じように2つのサンプルの中点を計算します。

たとえば、モデル構築用サンプルが30あるとして、一つのサンプルにつき距離が最も近い10のサンプルとの間で中点を計算することにしましょう。単純に計算すると、すべての中点の数は30×10=300になりますが、実際には重複する中点が出てきますので、200くらいになります。この200点をモデル検証用データとして使うわけです。

モデル検証用データの誤差が小さくなるように(RMSEが小さくなるように)、PLSの最適成分数を決めたり、SVRのC・εを決めたりできるわけです。近いサンプルとの間の中点をモデル検証用データにすることで、クロスバリデーションより多くのサンプルでモデルを構築することができるため、モデルが安定になり適切なパラメータを選ぶことができます。

教師なし学習にも使える

近いサンプルとの間の中点の利点の一つは、教師なし学習にも応用できるということです。たとえば、SOMのマップサイズ、GTMのマップサイズ・RBFの数・分散などの値を、それぞれモデル検証用データの誤差(写像する前とした後との間のRMSEの値)が、小さくなるように決めることができます。

教師なし学習におけるパラメータの設定は難しく、人によることが多いので、この方法は重宝します。

ここまでお読みくださりありがとうございます。

すぐに実行してモデル検証用データをつくれるプログラムへのリンクは、このブログの上の方にありますので、ぜひご活用ください。

ではでは!

データ解析の質問 募集中!

こちらへお願いします!

ご案内。

オススメ記事セレクション。

twitterでも発信中。

この記事に興味を持っていただけましたら、ぜひフォローをお願いします!


無料メルマガでブログにない情報を配信中。

データ解析・分析に興味がありましたらぜひ登録をお願いします!
無料メルマガの登録はこちら