| p1 | p2 |    …    | p54 |
1 | 3 | 1 | … | 4 |
2 | 4 | 4 | … | 2 |
: | : | : | : | : |
50 | 5 | 14 | … | 1 |
tg <- read.csv("koku09group.csv", header=T, row.names=1); tg | # csv データ読み込み |
mkmat <- function(wg){ | # 0 - 1 行列を作成する関数の定義 |
n <- length(wg) | # ベクトルの長さ(画像数) |
maxg <- max(wg) | # グループ最大値 |
ming <- min(wg) | # グループ最小値(普通は1) |
if(!ming){ | # 最小値が 0 のときの処置 |
ming <- 1; maxg <- maxg+1; wg <- wg+1 | # グループ数を 1 つ増やす |
} | # |
gmat <- matrix(0, nrow=n, ncol=maxg) | # n × maxg 行列(値は 0) |
for(i in ming:maxg){ | # グループごとの処理 |
ng <- (1:n)[wg == i] | # グループ i に所属する行番号(画像番号) |
gmat[ng, i] <- 1 | # 上の行番号と i 列の値を 1 にする |
} | # |
return(gmat) | # |
} | # |
w <- mkmat(tg[1, ]); w | # 1 番目の学生のグルーピング行列 |
apply(w, 2, sum) | # 各グループのメンバー数 |
対象間の類似関係もしくは非類似関係が与えられると, 多次元尺度法(MDS: Multi-Dimensional Scaling)により対象全体の構造が視覚化できる. これは,類似した対象どうしを近く,類似していない対象どうしを遠くに配置させることにより, 対象の布置を求める手法である.
n <- ncol(tg) | # 画像の数 |
m <- nrow(tg) | # 学生の数 |
S <- matrix(0, nrow=n, ncol=n) | # 類似度行列の定義 |
for(i in 1:m){ | # |
w <- mkmat(tg[i, ]) | # 学生ごとのグルーピング行列 |
S <- S + w %*% t(w) | # 学生ごとの類似度行列を加える |
} | # |
D <- max(S) - S | # 非類似度行列への変換 |
tcmd <- cmdscale(D, k=4, eig=TRUE, add=TRUE) | # 多次元尺度法(MDS) |
tcmd$eig | # MDS の固有値 |
x <- tcmd$points | # MDS の座標を x に格納 |
dimnames(x) <- list(as.character(1:n), paste("MDS", 1:4, sep="")) | # x の列と行の名前を定義 |
plot(x[,1:2], type="n") | # 1軸と2軸 |
text(x[,1:2], rownames(x), cex=0.8) | # 画像番号表示 |
title(main="東京国際大学景観画像の MDS による布置") | # |
tg <- read.csv("kawagoe.csv", header=T, row.names=1); tg # 川越グルーピングデータ読み込み |