差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
mselab:2012:stat:week3:r2 [2012/12/18 10:26] watalumselab:2012:stat:week3:r2 [不明な日付] (現在) – 外部編集 (不明な日付) 127.0.0.1
行 1: 行 1:
 ===== 統計工学実験 第3週 ===== ===== 統計工学実験 第3週 =====
 +==== 連絡 ====
 +
 +  * [[mselab:2012:stat:week3:r2#k-means法による層別_itermax追加_nstart削除|実験室で発生したkmeans関数についての不具合へ対応]]を追記。
 ==== 最終課題 ==== ==== 最終課題 ====
  
行 8: 行 11:
   * 提案した訪問ルールの契約達成率などを、検証用データ(tic.eval)に適用して検討せよ。   * 提案した訪問ルールの契約達成率などを、検証用データ(tic.eval)に適用して検討せよ。
   * 学習用データでモデルを学習し、検証用データで精度を検討する、という縛りの中で、最適な訪問ルールを定めよ。これがこの実験の最終成果物である。   * 学習用データでモデルを学習し、検証用データで精度を検討する、という縛りの中で、最適な訪問ルールを定めよ。これがこの実験の最終成果物である。
 +
 +==== 準備 ====
 +
 +準備。
 +
 +<code>
 +Sys.setenv("http_proxy"="http://130.153.8.66:8080/")
 +install.packages(c("mvtnorm", "mvpart"), dependencies=TRUE)
 +library(mvtnorm)
 +library(mvpart)
 +library(MASS)
 +</code>
 +
 +データがない人は、次のコードも実行する必要がある。
 +
 +<code>
 +tic.learn <- read.table("http://kdd.ics.uci.edu/databases/tic/ticdata2000.txt")
 +tic.eval <- read.table("http://kdd.ics.uci.edu/databases/tic/ticeval2000.txt")
 +tic.test <- read.table("http://kdd.ics.uci.edu/databases/tic/tictgts2000.txt")
 +tic.eval <- cbind(tic.eval, tic.test)
 +colnames(tic.eval)[86] <- "V86"
 +rm(tic.test)
 +</code>
 +
 +さらに先週のレポート課題と同様に、V1とV5のグループ化も済ませるとよいかもしれない。
 +あるいは今週の課題で改めて、グループ化を見直してもよい。
  
 ==== クラスタリング ==== ==== クラスタリング ====
行 261: 行 290:
  
 ==== 層別後の解析 ==== ==== 層別後の解析 ====
- 
-準備。 
-<code> 
-install.packages(c("mvtnorm", "mvpart"), dependencies=TRUE) 
-library(mvtnorm) 
-library(mvpart) 
-library(MASS) 
-</code> 
  
  
行 534: 行 555:
 |提出部数|レポートは各自1通ずつ。{{:mselab:report-header-2012.doc|レポートの表紙}}に、共同実験者の学籍番号と氏名を記すこと。| |提出部数|レポートは各自1通ずつ。{{:mselab:report-header-2012.doc|レポートの表紙}}に、共同実験者の学籍番号と氏名を記すこと。|
  
 +
 +==== 実験当日の修正 ====
 +
 +自分のMacだと問題が発生せず、実験室のPCだとRが落ちる不具合があります。メモリが少ないためかもしれません。Rが勝手に終了する場合には、kmeansのコードは次のように nstart を削除し、iter.max を追加する修正をお願いします。
 +
 +=== k-means法による層別 (iter.max追加、nstart削除) ===
 +
 +k-means法は、数値変数でしか用いられないため、データは「tic.learn[, c(1:85)]」と数値変数のフィールドを指定してkmeans()関数を実行する。
 +<code>
 +tic.learn.kmeans <- kmeans(tic.learn[, c(1:85)], centers=2, iter.max=100)
 +</code>
 +
 +k-means法の結果を適用するには、レコードごとに「centers」の座標とのユークリッド距離を算出し、一番小さくなる層にその変数を割り当てる。
 +
 +<code>
 +date()
 +tic.learn$cluster <- rep(0, dim(tic.learn)[1] )
 +for( i in c(1:dim(tic.learn)[1]) ) {
 +  tic.kmeans.dist <- rep(0, max(tic.learn.kmeans$cluster) )
 +  for( j in c(1:max(tic.learn.kmeans$cluster)) ) {
 +    tic.kmeans.dist[j] <- sum( (tic.learn[i,c(1:85)]-tic.learn.kmeans$center[j,])^2 )
 +  }
 +  tic.learn$cluster[i] <- sort.list(tic.kmeans.dist)[1]
 +}
 +date()
 +</code>
 +
 +念のため、kmeansの結果と比較して、計算に誤りがないことを確認するためにクロス集計を行う。この結果が対角であれば、計算はあっている。
 +
 +<code>
 +table(tic.learn$cluster,tic.learn.kmeans$cluster)
 +</code>
 +
 +centers=に指定する値は、いろいろ変えてみるといい。