Contenu connexe
Similaire à 独立成分分析とPerfume (13)
独立成分分析とPerfume
- 38. 準備 ラプラス分布に従う変数
rlaplace <- function(n) {
u <- log(runif(n))
v <- ifelse(runif(n)>1/2, 1, -1)
return(u*v)
}
rnorm(2)
!
S <- cbind( rlaplace(4000), 0.5 * rlaplace(4000))
!
!
A <- matrix(c(-1.5, 0.8 , 0.5, -1.8),
2, 2, byrow = TRUE)
X <- S %*% A
#混合行列
- 39. {fastICA}
> fastICA <- fastICA(X, 2, alg.typ = "parallel", fun = "logcosh",
alpha = 1,
method = "R", row.norm = FALSE, maxit = 200,
tol = 0.0001, verbose = TRUE)
!
Centering
Whitening
Symmetric FastICA using logcosh approx. to neg-entropy function
Iteration 1 tol = 0.0299405
Iteration 2 tol = 0.02635252
Iteration 3 tol = 0.002078679
Iteration 4 tol = 7.392618e-06
- 41. {fastICA} - fastICA()
fastICA(X, #[サンプル] x [観測値] の行列
n.comp, #分解するICの数
alg.typ = c(“parallel","deflation"), #ICを同時に推定するか
fun = c("logcosh","exp"), #G関数の形を決める
alpha = 1.0, #neg-entropyの形が"logcosh"のときに設定
#1~2 の間の定数
#αの値によって収束するまでの早さが変わる
method = R, #R→R言語で計算、C→C言語で計算
row.norm = FALSE, #Xが規格化されているかどうか
maxit = 200, #イテレーションの回数のリミット値
tol = 1e-04, #un-mixing matrixが収束したか決めるときのしきい値
verbose = FALSE, #結果をコンソールに表示するかどうか
w.init = NULL #非混合行列の初期値
)
- 42. {fastICA} - fastICA()
fastICA(X, #[サンプル] x [観測値] の行列
n.comp, #分解するICの数
alg.typ = c(“parallel","deflation"), #ICを同時に推定するか
fun = c("logcosh","exp"), #G関数の形を決める
alpha = 1.0, #neg-entropyの形が"logcosh"のときに設定
#1~2 の間の定数
#αの値によって収束するまでの早さが変わる
method = R, #R→R言語で計算、C→C言語で計算
row.norm = FALSE, #Xが規格化されているかどうか
maxit = 200, #イテレーションの回数のリミット値
tol = 1e-04, #un-mixing matrixが収束したか決めるときのしきい値
verbose = FALSE, #結果をコンソールに表示するかどうか
w.init = NULL #非混合行列の初期値
)
- 53. {fastICA} - fastICA()
fastICA(X, #[サンプル] x [観測値] の行列
n.comp, #分解するICの数
alg.typ = c(“parallel","deflation"), #ICを同時に推定するか
fun = c("logcosh","exp"), #G関数の形を決める
alpha = 1.0, #neg-entropyの形が"logcosh"のときに設定
#1~2 の間の定数
#αの値によって収束するまでの早さが変わる
method = R, #R→R言語で計算、C→C言語で計算
row.norm = FALSE, #Xが規格化されているかどうか
maxit = 200, #イテレーションの回数のリミット値
tol = 1e-04, #un-mixing matrixが収束したか決めるときのしきい値
verbose = FALSE, #結果をコンソールに表示するかどうか
w.init = NULL #非混合行列の初期値
)
- 56. 主成分分析 overview
定式化 & ポイント
!
- 主成分は互いに相関はない(でも独立ではない)
- 主成分は、すべて正規分布に沿っている
正規分布の場合、相関が0なら独立性が保証される
使われ方
- 次元を削減する方法として用いられる
- ICA では、PCAを白色化のときに用いている。PCAの次
元が独立成分の要素の数に一致する
- 70. perfume , モーションキャプチャ
HIERARCHY
ROOT Hips
{
OFFSET 0.000000 0.000000 0.000000
CHANNELS 6 Xposition Yposition Zposition Yrotation Xrotation
Zrotation
JOINT Chest
{
OFFSET 0.000000 10.678932 0.006280
CHANNELS 3 Yrotation Xrotation Zrotation
…,
}
MOTION
Frames: 2820
Frame Time: 0.025000
20.126024 83.31402 -18.424651 -9.129106 -6.517021 -0.118878
0.085519 9.753561 -0.537233 -0.010346 -5.417462 -0.070241 0.024747
1.596753 -0.097771 0.076825 0.255045 0.028866 -2.676143 13.137455
-0.003003 -4.902355 -11.317583 0.237067 0.227179 0.185755 0.125412
-0.119016 -11.836501 1.407777 2.313914 -7.359847 2.184012 7.121591
-4.059673 0.32346 0.027243 -2.476878 -0.074028 -0.097043 -7.619834
0.032649 -60.980338 -2.129588 -0.11772 0.245169 0.021119 9.869842
0.042872 8.453526 -4.572724 -3.248217 1.906954 -0.671854 2.029124
-4.900362 6.1163 0.030989 -0.279999 -0.068954 -11.233479
-12.051593 0.062998 1.140721 1.950329 1.686051 -0.00394 -4.658935
-8.5305 0.029141 -0.060092 0.0284
- 72. perfume データ準備
notch <- read.table("notch.dat", header = F)
aachan <- read.table("aachan.dat", header = F)
kashiyuka <- read.table("kashiyuka.dat", header = F)
X <- cbind(notch[,1], aachan[,1], kashiyuka[,1])
notch Y rot aachan Y rot kashiyuka Y rot
- 73. 主成分分析
Newperfume1 = {}
Newperfume2 = {}
!
for( i in c(1:ncol(notch))){
X <- cbind(notch[,i], aachan[,i], kashiyuka[,i])
PCA <- prcomp(X)
Newperfume1 <- cbind(Newperfume1,PCA$x[,1])
Newperfume2 <- cbind(Newperfume2,PCA$x[,2])
}
write.table(x=round(Newperfume1,6), file="Newperfume1_PCA.bvh",row.names=F,
col.names=F)
write.table(x=round(Newperfume2,6), file="Newperfume2_PCA.bvh",row.names=F,
col.names=F)
!
- 78. 独立成分分析
Newperfume1 = {}
Newperfume2 = {}
for( i in c(1:ncol(notch))){
X <- cbind(notch[,i], aachan[,i], kashiyuka[,i])
fastICA <- fastICA(X, 2, alg.typ = "parallel", fun = "logcosh", alpha = 1,
method = "R", row.norm = FALSE, maxit = 200,
tol = 0.0001, verbose = TRUE)
matplot(fastICA$S, type = "l", lty = 1)
fastICA$S[,1] = mean(fastICA$A[1,])*fastICA$S[,1]+mean(X)
fastICA$S[,2] = mean(fastICA$A[2,])*fastICA$S[,2]+mean(X)
Newperfume1 <- cbind(Newperfume1, fastICA$S[,1])
Newperfume2 <- cbind(Newperfume2, fastICA$S[,2])
}