Tokyo.R#22で発表してきましたロジスティック回帰について

2012年4月28日のTokyo.Rで発表してきました。ロジスティック回帰の話でした。


この記事では補足で、サンプルコードの解説を行います。
なお、サンプルコードはいつも参考にしている金森先生の本のサンプルスクリプトを元にしています。以下のサイトから無料でダウンロード可能なので、本を購入して(もしなくても)、ダウンロードして触ってみてください。

パターン認識 (Rで学ぶデータサイエンス 5)

パターン認識 (Rで学ぶデータサイエンス 5)



1.ロジスティック回帰で判別を行う。


パッケージはstatsです。新しくライブラリをインストールしなくても使用できます。


ロジスティック回帰は一般化線形モデルの一種です。一般化線形モデルの構築には関数としてはglmを使用します。
glm関数の使い方は以下の通りです。下記の例では、irisデータを使用して、Speciesをそれ以外の変数を使って予測しています。

model<-glm(Species~., iris, family=binominal)

最初の引数、formulaはモデルの形状を指定します。
一次式の場合はSpecies~.
つまり、Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Widthのこと
二次式の場合はSpecies ~.*.
つまり、(Sepal.Length + Sepal.Width + Petal.Length + Petal.Width)^2のこと


2番目の引数はデータです。

familyはモデル詳細を特定するパラメータです。ロジスティック回帰にはbinominalを指定します。


返り値にはモデルを表す引数そのものが返されます。予測を行うときにはこの返り値とデータをpredict関数に代入します。

model<-predict(model, x)

2.ニューラルネットワークで判別を行う。

ライブラリはnnetです。そして、モデル構築の関数もnnetになります。nnet関数は1層の隠れ層を含むニューラルネットワークです。
下記の例だと、Species以外のすべての変数を入力にして、6つユニットからなる1層の隠れ層を用いて、出力変数を予測することになります。

model<-nnet(Species~., iris, size=6)


predictを使って予測する箇所はglmと同一です。


補足:質問であった多値判別問題のRでの解き方は、例えばirisデータの場合、3つのクラス判別問題ですが、これは各クラスの値に属するか属さないかという事後確率を3つ計算することで判別するようです。そのためにはnnetライブラリのmulticom関数を用います。

model<-multinom(Species~., iris[index, ])
preditc(model, iris, type="probs")


詳しくは、上記の参考文献(名著や!)をご参照ください。