==== 課題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) とで表示できる.