SnapCrab_2016-12-25_9-29-59_No-00

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

データ解析の手順』における 「5.回帰モデルもしくはクラス分類モデルを作る」についてです。

公開中のプログラム・コード一覧(実用的かつ実践的なデータ解析・機械学習・データマイニング) : 大学教授のブログ (データ分析相談所)

k最近傍法 (k-Nearest Neighbors, kNN) によりクラス分類や回帰分析を行うことができます。

kNN(クラス分類)のプログラムを簡単に入手できます!

それぞれのURLからお求めください!noteでもSPIKEでもAnyPayでも言語が同じであれば同じものです。

MATLAB: note SPIKE AnyPay

R: note SPIKE AnyPay

Python: note SPIKE AnyPay

kNN(回帰)のプログラムを簡単に入手できます!

それぞれのURLからお求めください!

R: note SPIKE AnyPay

Python: note SPIKE AnyPay

k最近傍法 (k-Nearest Neighbors, kNN)

kNNは回帰分析にもクラス分類にも使うことができます。kNNのメリットは、やはりそのシンプルさにあります。目的変数の値もしくはカテゴリを推定したいサンプルがあったとき、モデル構築用データセットの中から、そのサンプルと距離が近いk個のサンプルを取り出します。回帰分析のときは、k個の目的変数の値の平均値が推定値であり、クラス分類のときは、k個のクラス(カテゴリ)の多数決で推定されるクラスを決めます。

距離としてはユークリッド距離が使われることが多いです。変数(記述子・特徴量)間の相関を考慮したマハラノビス距離を使うなど、柔軟に距離を設定することも可能です。

kNNは非線形の方法です。各変数の重みを計算することはできません。モデルの解釈をするときは、最も距離の近いk個のサンプルを検討することになります。

kNNは以下の手順で行います。

  1. 説明変数をオートスケーリングする
    オートスケーリングとは各変数から平均値を引いて平均を0にし、各変数を標準偏差で割って標準偏差を1にする操作です。
  2. 最近傍点の個数の最大値を決める
    最大値をNとすると、最近傍点の個数の候補は、
    1, 2, 3, …, N
    になります。
  3. 最近傍点の個数のそれぞれの候補においてクロスバリデーションにより目的変数の推定されたクラス分類結果(推定値)を得る
  4. すべての候補において、目的変数の実測値とクロスバリデーション推定値との間で、回帰問題であればRoot-Mean-Squared Error (RMSE) を、クラス分類問題であれば誤分類率を計算する
  5. RMSEもしくは誤分類率の値が最も小さい候補を選択する
  6. 最適化された候補を用いてkNNモデルを構築する
  7. 目的変数の計算値と実測値との間で、回帰問題であれば決定係数・RMSE (r2C・ RMSEC)を、クラス分類問題であれば混同行列を計算する
    r2Cは目的変数の持つ情報の何割を説明できるモデルかを表します。
    RMSECはモデルのもつ平均的な誤差を表します。
    回帰問題であれば、目的変数の実測値と計算値とのプロットも確認します。
  8. 目的変数のクロスバリデーション推定値と実測値との間で、回帰問題であれば決定係数・RMSE (r2CV・ RMSECV)を、クラス分類問題であれば混同行列を計算する
    r2CVは目的変数のもつ情報の何割を新しいデータに対して推定できる可能性があるかを表します。
    RMSECVは新しいデータを推定した場合に平均的な誤差はどれくらいになるかを表します。
    回帰問題であれば、目的変数の実測値と推定値とのプロットを確認します。
  9. [新しいデータの推定をするとき] 説明変数の新しいデータから、オートスケーリングした時の説明変数の平均値を引き、標準偏差で割る
  10. [新しいデータの推定をするとき] 上の6.で得られたkNNモデルにより目的変数の推定値を計算する

新しいデータを推定する際に工夫が必要なのは、最終的に得られたkNNモデルは、説明変数がオートスケーリングされた後のモデルであるためです。
そこで、新しく推定したい説明変数のデータがあれば、そのデータからオートスケーリングした時の説明変数の平均値を引き、標準偏差で割ってから、kNNモデルにより目的変数の推定値を計算する必要があります。

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

こちらへお願いします!

ご案内。

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

twitterでも発信中。

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


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

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