金子邦彦研究室プログラミング主成分分析,次元削減Rシステムを用いた主成分分析,次元削減

Rシステムを用いた主成分分析,次元削減

前準備

Rシステムのインストール

Rシステムを用いた主成分分析,次元削減

主成分スコアのプロット

ラベル付きの数値ベクトルデータをプロットする

d <- iris[,1:4]
pc <- prcomp(d, scale.=T)
plot( pc$x[,"PC1"], pc$x[,"PC2"], pch=21, bg=iris[,5])

[image]

isoMDS サンプル

重みwが変数:相関係数が0のときw、相関係数が1のとき0

library(MASS)
d <- iris[,1:4]
w <- 1
dd <- 1 - cor(t(d))
c <- isoMDS( w * dd + (1 - diag( dim(d)[1] )) * 0.001, k = 2 )
plot.new()
plot(c$points, pch=21, bg=iris[,5])

[image]

sammon サンプル

library(MASS)
d <- iris[,1:4]
w <- 1
dd <- 1 - cor(t(d))
c <- sammon( w * dd + (1 - diag( dim(d)[1] )) * 0.001, k = 2 )
plot.new()
plot(c$points, pch=21, bg=iris[,5])

[image]

クラスターの評価

次のプログラムでシルエット距離を求める.これが1に近いほど、よいクラスタ

library(cluster)
avg_width <- summary( silhouette( as.numeric( iris[,5] ), dist(c$points) ) )$avg.width

[image]

先ほどのMDSで w を求める問題が残っていた。

1/10.0, 2/10.0, ..., 100/10.0 とwを変えてシルエット距離を求める

実行が終わるまでしばらく待つ.

library(MASS)
library(cluster)
len <- 100
avg_width <- rep(0, len)
w <- rep(0, len)

d <- iris[,1:4]
for ( i in 1:len ) {
  w[i] <- i / 10.0
  dd <- 1 - cor(t(d))
  c <- isoMDS( w[i] * dd + (1 - diag( dim(d)[1] )) * 0.001, k = 2 )
  avg_width[i] <- summary( silhouette( as.numeric( iris[,5] ), dist(c$points) ) )$avg.width
}
for ( i in 1:len ) {
  print( sprintf("%f %f", w[i], avg_width[i]) )
}

[image]

今度は sammon

べき乗 0.1 乗から10乗まで

library(MASS)
library(cluster)
len <- 100
avg_width <- rep(0, len)
w <- rep(0, len)

d <- iris[,1:4]
for ( i in 1:len ) {
  w[i] <- i / 10.0
  dd <- 1 - cor(t(d))
  c <- sammon( w[i] * dd + (1 - diag( dim(d)[1] )) * 0.001, k = 2 )
  avg_width[i] <- summary( silhouette( as.numeric( iris[,5] ), dist(c$points) ) )$avg.width
}
for ( i in 1:len ) {
  print( sprintf("%f %f", w[i], avg_width[i]) )
}

[image]