==== 課題2 ====
=== 今回のお題 ===
* 予測精度はまだ気にせずに,3種類の学習機械(線形,加法,ロジスティック加法)を比較する
* 予測変数はV86で,契約の成功と失敗を表している.他の変数の説明は[[http://kdd.ics.uci.edu/databases/tic/TicDataDescr.txt|このファイル]]を参照のこと.英語が苦手なら[[http://translate.google.com/translate?sl=en&tl=ja&js=n&prev=_t&hl=en&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fkdd.ics.uci.edu%2Fdatabases%2Ftic%2FTicDataDescr.txt|機械翻訳の結果]]と照らし合わせながら,見ていくと良い.
* レポートの送付先 mailto:data.mining.finale@gmail.com
* レポートファイルの名前の先頭に,半角で学籍番号を付けること.例:0000000_データマイニング_2.doc
* 期限は来週の1限
=== Rのための準備 ===
今回はgamパッケージとMASSパッケージという二つのパッケージの中の関数を用いるので,それらをインストールしておく.
下記の一行で実行できる.
install.packages(c("gam", "MASS"), dependencies = TRUE)
これが実行できない場合には,[[https://appl.stat.inf.uec.ac.jp/doku.php?id=r:how_to:internet_proxy|プロキシの設定]]を試してみるといい.
その1の方が簡単なので,そちらから試すことをお勧めする.
=== データファイルの読み込み ===
{{:dmb:2011:ticdata2000-with-headers.csv.zip|このファイル}}をダウンロードし,中の「ticdata2000-with-headers.csv」というファイルを保存すること.
* Windowsの場合には,保存先のフォルダは「ドキュメント」あるいは「マイドキュメント」がお勧め.
* MacとLinuxの場合には,保存先フォルダは「ホームディレクトリ」がお勧め.
まずR上で
dummy <- rnorm(10, mean=0, sd=1)
dump("dummy")
の2行を実行してから,Windows,Mac,あるいはLinuxで「dumpdata.R」というファイルを探してみると良い.そのファイルが見つかった場所が,Rにとっての「ホームフォルダ」であり,そこに上のファイルを置けば,読み込みは完了する.
うまく保存されれば,次の1行がエラー表示なしに実行完了できる.
# データの読み込み
tic <- read.table("ticdata2000-with-headers.csv", header=T, sep=",")
上の一行の実行時にエラーが表示されるのは,例えば
* ファイルの保存時に,ブラウザで一度表示させ,ファイルメニューの保存を実行して保存すると,拡張子が".txt"となり,アイコンがメモ帳のそれになることがある.(Excelがインストールされていれば,正しく保存するとExcelのアイコンになるし,Excelがインストールされていなければ,アプリケーションに関連づけられていないファイルのアイコンになるはず)
* ファイルの置き場所か,ファイルの置き場所の指定が誤っている
などの状況が考えられる.フォルダを指定して読み込む場合,Windowsでも
tic <- read.table("c:/Users/DMB/ticdata2000-with-headers.csv", header=T, sep=",")
などと,フォルダ名の区切り文字を「¥」ではなく「/」を用いること.
=== 事前加工 ===
今回の課題には,このデータから13個のフィールドのみを用いる.以下の3行で,上のデータから部分データを切り出す.
レコード数は全レコードを用いる.
# 13 個の変数のみ切り出す
tic.sub <- matrix(c(tic$V86, tic$V04, tic$V44, tic$V47, tic$V57,
tic$V58, tic$V59, tic$V76, tic$V78, tic$V79,
tic$V80, tic$V81, tic$V82), ncol=13)
colnames(tic.sub) <- c("V86", "V04", "V44", "V47", "V57",
"V58", "V59", "V76", "V78", "V79",
"V80", "V81", "V82")
tic.sub <- data.frame(tic.sub)
フィールド数とレコード数の確認.
dim(tic.sub)
=== 事前解析 ===
# 契約成功例を見る
table(tic.sub$V86)
hist(tic$V86)
# 成功割合を出す
mean(tic$V86)
# その他の変数について, 各変数ごとの平均を算出する( 小数点3 桁まで)
round(apply(tic.sub, 2, mean),3)
# 散布図行列を描く
pairs(tic.sub)
# 相関係数行列も計算する( 小数点2 桁まで)
round(cor(tic.sub),2)
=== 重回帰分析による線形判別関数の学習 ===
# 重回帰分析による線形判別関数の学習
tic.lm <- lm(V86~., data=tic.sub)
# 学習結果のパラメータを見る
summary(tic.lm)
# 元の学習用のV86 と学習結果に基づく予測結果とを、比較するために散布図とヒストグラムを描く
plot(tic.sub$V86, predict(tic.lm))
hist(predict(tic.lm)[tic.sub$V86==0])
hist(predict(tic.lm)[tic.sub$V86==1])
# 学習用データにおける誤判別数、誤判別率を検討するために、クロス集計も行う。
table(tic.sub$V86, 1*(predict(tic.lm)>0.5))
== summary(tic.lm)の出力の読み方 ==
Call:
lm(formula = V86 ~ ., data = tic.sub)
Residuals:
Min 1Q Median 3Q Max
-0.58156 -0.08172 -0.05578 -0.00842 0.99657
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.001566 0.012368 -0.127 0.899216
V04 0.002496 0.003737 0.668 0.504115
V44 0.013748 0.003783 3.634 0.000282 ***
V47 0.010471 0.001069 9.797 < 2e-16 ***
V57 0.216507 0.079359 2.728 0.006387 **
V58 0.062955 0.025554 2.464 0.013783 *
V59 0.013284 0.003304 4.021 5.86e-05 ***
V76 0.006850 0.008227 0.833 0.405118
V78 -0.447549 0.189817 -2.358 0.018417 *
V79 -0.234240 0.124002 -1.889 0.058941 .
V80 -0.026739 0.011248 -2.377 0.017473 *
V81 0.174599 0.134497 1.298 0.194284
V82 0.287817 0.037417 7.692 1.69e-14 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.2319 on 5809 degrees of freedom
Multiple R-squared: 0.04554, Adjusted R-squared: 0.04357
F-statistic: 23.1 on 12 and 5809 DF, p-value: < 2.2e-16
|Call|lm関数の呼び出され方|
|Residuals|残差:最小値(Min),下側25%値(1Q),中央値(Median),上側25%点(3Q),最大値(Max)|
|Coefficients|学習機械のパラメータ|
|Estimate|推定値(学習結果)|
|Std. Error|標準誤差(このパラメータの推定精度)|
|t value|t値(このパラメータが0という帰無仮説の検定統計量)|
|Pr(>.t.)|P値(t値による検定の結果,0.05以下なら5%有意)|
|Residual standard error|残差の標準偏差|
|degrees of freedom|自由度|
|Multiple R-squared|決定係数(重相関係数)|
|Adjusted R-squared|自由度調整済み決定係数(重相関係数)|
|F-statistic|F統計量(モデルのパラメータがすべて0かどうかの検定統計量)|
|p-value|F検定のP値(この数値が0.05以下なら,モデルは5%有意)|
=== ロジスティック判別による線形判別関数の学習 ===
# ロジスティック判別による線形判別関数の学習
tic.glm <- glm(V86~., data=tic.sub, family="binomial")
# 学習結果のパラメータを見る
summary(tic.glm)
# 元の学習用のV86と学習結果に基づく予測結果とを、比較するために散布図とヒストグラムを描く
plot(tic.sub$V86, predict(tic.glm))
hist(predict(tic.glm)[tic.sub$V86==0])
hist(predict(tic.glm)[tic.sub$V86==1])
# 学習用データにおける誤判別数、誤判別率を検討するために、クロス集計も行う。
table(tic.sub$V86, 1*(predict(tic.glm)>0))
Call:
glm(formula = V86 ~ ., family = "binomial", data = tic.sub)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.2943 -0.3842 -0.2873 -0.1897 2.8694
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.19384 0.25711 -16.311 < 2e-16 ***
V04 0.04677 0.07068 0.662 0.508154
V44 0.25313 0.07146 3.542 0.000397 ***
V47 0.22086 0.02391 9.236 < 2e-16 ***
V57 1.48875 0.96677 1.540 0.123579
V58 0.80334 0.56350 1.426 0.153972
V59 0.21470 0.06186 3.471 0.000519 ***
V76 0.04504 0.11491 0.392 0.695051
V78 -3.17157 2.55699 -1.240 0.214845
V79 -3.43632 3.29457 -1.043 0.296936
V80 -0.47634 0.24686 -1.930 0.053657 .
V81 1.37207 1.36816 1.003 0.315928
V82 1.99639 0.36271 5.504 3.71e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2635.5 on 5821 degrees of freedom
Residual deviance: 2408.5 on 5809 degrees of freedom
AIC: 2434.5
Number of Fisher Scoring iterations: 6
ほとんど結果の読み方は一緒.違うのは
|Null deviance|Nullデビアンス|
|Residual deviance|残差のデビアンス|
|AIC|赤池情報量基準|
の3つで,最初の二つは
anova(tic.glm)
aov(tic.glm)
などのように,分散分析を行う際に用いる.
AICは,この数値が一番小さくなるように,変数の組み合わせを選ぶのに用いる.
今回は今の変数セットのまま,進む.
=== フィッシャーの線形判別分析による線形判別関数の学習 ===
# フィッシャーの線形判別分析による線形判別関数の学習
# MASSパッケージを読み込ませる
library(MASS)
tic.lda <- lda(V86~., data=tic.sub)
# 学習結果のパラメータを見る
tic.lda
# 元の学習用のV86と学習結果に基づく予測結果とを、比較するために散布図とヒストグラムを描く
plot(tic.sub$V86, predict(tic.lda)$x)
plot(tic.lda)
# 学習用データにおける誤判別数、誤判別率を検討するために、クロス集計も行う。
table(tic.sub$V86, 1*(predict(tic.lda)$x>0))
== 結果の読み方 ==
Call:
lda(V86 ~ ., data = tic.sub)
Prior probabilities of groups:
0 1
0.94022673 0.05977327
Group means:
V04 V44 V47 V57 V58 V59 V76 V78
0 2.990318 0.7478992 2.859335 0.01333577 0.02064304 1.782974 0.07307271 0.005845817
1 3.005747 1.1379310 4.718391 0.04597701 0.06896552 2.531609 0.13218391 0.017241379
V79 V80 V81 V82
0 0.004201681 0.5613811 0.0003653635 0.003836317
1 0.011494253 0.7068966 0.0028735632 0.040229885
Coefficients of linear discriminants:
LD1
V04 0.05050244
V44 0.27811236
V47 0.21182486
V57 4.37978016
V58 1.27352740
V59 0.26873381
V76 0.13856260
V78 -9.05361744
V79 -4.73850831
V80 -0.54091586
V81 3.53202496
V82 5.82235211
|Prior probabilities of groups|各群の事前の出現確率(指定していなければ学習用データ中の比率)|
|Group means|各フィールドの群別の平均|
|Coefficients of linear discriminants|線形判別関数のパラメータ|
=== 一般化加法モデル(正規分布)による学習 ===
# gamパッケージを読み込ませる
library(gam)
tic.am <- gam(V86~s(V04)+s(V44)+s(V47)+s(V57)+s(V58)+s(V59)+s(V76)+s(V78)+s(V79)+s(V80)+s(V81)+s(V82),
data=tic.sub, family="gaussian")
これでは次のようなエラーが表示される.
Error in gam.match(data) :
A smoothing variable encountered with 3 or less unique values; at least 4 needed
散布図行列を参考に,V57,V78,V79,V81,V82などからs()という関数を取り除く必要がある.
tic.am <- gam(V86~s(V04)+s(V44)+s(V47)+V57+s(V58)+s(V59)+s(V76)+V78+V79+s(V80)+V81+V82,
data=tic.sub, family="gaussian")
学習結果は
summary(tic.am)
と
win.graph()
par(mfrow=c(3,4))
plot(tic.am)
とで表示できる.
=== 一般化加法モデル(ロジスティック回帰)による学習 ===
library(gam)
tic.gam <- gam(V86~s(V04)+s(V44)+s(V47)+s(V57)+s(V58)+s(V59)+s(V76)+s(V78)+s(V79)+s(V80)+s(V81)+s(V82),
data=tic.sub, family="binomial")
こちらもエラーが表示されるので,
散布図行列を参考に,V57,V78,V79,V81,V82などからs()という関数を取り除く必要がある.
tic.gam <- gam(V86~s(V04)+s(V44)+s(V47)+V57+s(V58)+s(V59)+s(V76)+V78+V79+s(V80)+V81+V82,
data=tic.sub, family="binomial")
学習結果は
summary(tic.am)
と
win.graph()
par(mfrow=c(3,4))
plot(tic.am)
とで表示できる.