Successfully reported this slideshow.
独立成分分析 : ICA
超入門 と ダイエット
@0kayu
2014. 6. 14
#tokyoR
自己紹介
- @0kayu 岡
- 早稲田大学 M2 機械系
- 研究 機能的脳画像解析
- 来年 アドテク系の会社で働きます
http://sssslide.com/www.slideshare.net/tojimat/diet-by-r
前回の#tokyoR から
http://sssslide.com/www.slideshare.net/tojimat/diet-by-r
前回の#tokyoR から
私のRをはじめてからの体重の推移(軸省略)
やせよう…
やせよう…
なぜ続かなかった?
データがとれること
なぜ続かなかった?
データがとれること
外に出るのが辛い
そこで…
Perfume ダイエット
Perfumeダイエット
perfumeのダンスを
解析 → やせやすいダ
ンスを特定→その曲
がはいってるBD購入
perfumeのダンスを
解析 → やせやすいダ
ンスを特定→その曲
がはいってるBD購入
変数多そう…
もしかして: ICA
今日話すこと
1. 独立成分分析入門 ̶ {fastICA}
2. perfume への応用例
混ざった「会話」を分ける
元々は独立な会話 (信号)
混ざる
mixed
混ざった「会話」を分ける
混合信号
混ざった「観測値」を分ける
混合信号
神経活動
 内側/外側視覚関連領域
 聴覚関連領域
  Default mode network
+
頭の動き
+
拍動
etc…
観測値
混合信号
観測値
混ざった「観測値」を分ける
Kelly, R. E., Alexopoulos, et.al. (2010). 189(2), 233–45.
共通点 混ざった信号を分ける
元々は独立
な会話(信号)
独立
成分
分析
定式化
定式化
観測値xは、独立な成分s1(t)とs2(t)を足し合わせたもの
定式化
観測値xは、独立な成分s1(t)とs2(t)を足し合わせたもの
混合行列
独立成分
観測値
で、独立成分分析?!
次の仮定を元に、
混合行列Aと信号sを
推定すること
仮定
統計的に独立であること
独立成分が正規分布に従わないこと
(非ガウス的)
仮定
統計的に独立であること
独立成分が正規分布に従わないこと
(非ガウス的)
統計的に独立
相関が 0
片方の変数がどのような値をとってももう
片方の分布は変わらないこと
例えば、xとyが統計的に独立なら、以下の
式が成り立つ
仮定
統計的に独立であること
独立成分が正規分布に従わないこと
(非ガウス的)
仮定
統計的に独立であること
独立成分が正規分布に従わないこと
(非ガウス的)
正規分布に従わない
正規分布に従わない
ラプラス分布 ガンマ分布
とりあえず
見てみよう
準備 ラプラス分布に従う変数
rlaplace <- function(n) {
u <- log(runif(n))
v <- ifelse(runif(n)>1/2, 1, -1)
return(u*v)
}
rnorm(2)
!
S <-...
準備 ラプラス分布に従う変数
rlaplace <- function(n) {
u <- log(runif(n))
v <- ifelse(runif(n)>1/2, 1, -1)
return(u*v)
}
rnorm(2)
!
S <-...
{fastICA}
> fastICA <- fastICA(X, 2, alg.typ = "parallel", fun = "logcosh",
alpha = 1,
method = "R", row.norm = FALSE, max...
{fastICA}
#結果の描画
> par(mfrow=c(1,3))
> plot(fastICA$X, main = "Pre-processed data", cex=0.1) #中心化
> plot(fastICA$X %*% fas...
{fastICA} - fastICA()
fastICA(X, #[サンプル] x [観測値] の行列
n.comp, #分解するICの数
alg.typ = c(“parallel","deflation"), #ICを同時に推定するか
f...
{fastICA} - fastICA()
fastICA(X, #[サンプル] x [観測値] の行列
n.comp, #分解するICの数
alg.typ = c(“parallel","deflation"), #ICを同時に推定するか
f...
G 関数 … ?
negentropy ?
entropy ?
negentropy ?
entropy ?
アルゴリズム
の流れ
{fastICA} アルゴリズム
1. 前処理パート
1. 中心化 各観測値の平均を0
2. 白色化 分散を等方的にする
2. 非ガウス性を最大に
回転して、正規分布からかけ離れ
た分布にする
{fastICA} アルゴリズム
1. 前処理パート
1. 中心化 各観測値の平均を0
2. 白色化 分散を等方的にする
2. 非ガウス性を最大に
回転して、正規分布からかけ離れ
た分布にする
{fastICA} アルゴリズム
1. 前処理パート
1. 中心化 各観測値の平均を0
2. 白色化 分散を等方的にする
2. 非ガウス性を最大に
回転して、正規分布からかけ離れ
た分布にする
ど う や っ て ?
negentropy
entropy ?
ネゲントロピー
ある確率変数Xと、同じ分散をもつ正規確率変数
Nのエントロピーの差
情報エントロピーH(X)が
最大 → ばらつきが大き
い
情報エントロピーH(X)が
最小 → ばらつきが小さい
ネゲントロピー :近似
G関数を用いて近似することにより、計算が容易
になる
さっきのは
これ
{fastICA} - fastICA()
fastICA(X, #[サンプル] x [観測値] の行列
n.comp, #分解するICの数
alg.typ = c(“parallel","deflation"), #ICを同時に推定するか
f...
復習
#結果の描画
> par(mfrow=c(1,3))
> plot(fastICA$X, main = "Pre-processed data", cex=0.1) #中心化
> plot(fastICA$X %*% fastICA$K,...
独立 成分 分析 ?
主 成分 分析 ?
因 子 分析 ?
主成分分析 overview
定式化 & ポイント
!
-  主成分は互いに相関はない(でも独立ではない)
-  主成分は、すべて正規分布に沿っている
 正規分布の場合、相関が0なら独立性が保証される
使われ方
- 次元を削減する方法として用い...
くわしくは
http://www.slideshare.net/sanoche16/tokyor31-22291701
!
独立成分分析 vs 主成分分析
散布図で見ると
PCAは分散が最大の方向に
基底をとる
次の基底はその基底に直交
するようにとる
第
一
主
成
分
第
二
主
成
分
独立成分分析 vs 主成分分析
散布図で見ると
基底同士は直交
しなくてもよい
独立成分分析を極めるなら
入門 独立成分分析
村田 昇
詳解 独立成分分析―信号解析の新しい世界
Aapo Hyvarinen , Juha Karhunen, Erkki Oja
基本的な解法, 他の分析法との違い
基本的な解法, ノイズ有の...
今日話すこと
1. 独立成分分析入門 ̶ {fastICA}
2. perfume への応用例
Perfume (復習)
Perfume (復習)
!
!
ん … ?
ん … ?
http://perfume-global.com/project.html
Perfume global project # 001 	

モーションキャプチャーデータを配布
perfume , モーションキャプチャ
重要な参考文献
3相主成分分析を用いた解析
http://researchmap.jp/?action=cv_download_main&upload_id=42728
perfume + ダンス
主成分分析
perfume , モーションキャプチャ
HIERARCHY
ROOT Hips
{
OFFSET 0.000000 0.000000 0.000000
CHANNELS 6 Xposition Yposition Zposition Yrot...
perfume , モーションキャプチャ
お尻の位置x y z 角度Zrot Yrot Xrot 肩Yrot Xrot Zrot
perfume データ準備
notch <- read.table("notch.dat", header = F)
aachan <- read.table("aachan.dat", header = F)
kashiyuka <- rea...
主成分分析
Newperfume1 = {}
Newperfume2 = {}
!
for( i in c(1:ncol(notch))){
X <- cbind(notch[,i], aachan[,i], kashiyuka[,i])
PC...
主成分分析
!
→ 分散が大きい方向
に主成分
チェック!
http://game.akjava.com/creator/
のっち
PCA1
PCA2
浮いてる… ?
perfume + ダンス
独立成分分析
独立成分分析
Newperfume1 = {}
Newperfume2 = {}
for( i in c(1:ncol(notch))){
X <- cbind(notch[,i], aachan[,i], kashiyuka[,i])
fas...
チェック!
http://game.akjava.com/creator/
のっち
IC1
IC2
人間っぽい
 ENJOY !
独立成分分析とPerfume
独立成分分析とPerfume
Upcoming SlideShare
Loading in …5
×

独立成分分析とPerfume

15,847 views

Published on

第40回 tokyoRの資料です。

  • 着想といい使用データといい自分にとっては斬新で面白かったです!!何より説明が分かりやすかったです。ためになりました。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

独立成分分析とPerfume

  1. 1. 独立成分分析 : ICA 超入門 と ダイエット @0kayu 2014. 6. 14 #tokyoR
  2. 2. 自己紹介 - @0kayu 岡 - 早稲田大学 M2 機械系 - 研究 機能的脳画像解析 - 来年 アドテク系の会社で働きます
  3. 3. http://sssslide.com/www.slideshare.net/tojimat/diet-by-r 前回の#tokyoR から
  4. 4. http://sssslide.com/www.slideshare.net/tojimat/diet-by-r 前回の#tokyoR から
  5. 5. 私のRをはじめてからの体重の推移(軸省略)
  6. 6. やせよう…
  7. 7. やせよう…
  8. 8. なぜ続かなかった? データがとれること
  9. 9. なぜ続かなかった? データがとれること 外に出るのが辛い
  10. 10. そこで…
  11. 11. Perfume ダイエット
  12. 12. Perfumeダイエット
  13. 13. perfumeのダンスを 解析 → やせやすいダ ンスを特定→その曲 がはいってるBD購入
  14. 14. perfumeのダンスを 解析 → やせやすいダ ンスを特定→その曲 がはいってるBD購入
  15. 15. 変数多そう…
  16. 16. もしかして: ICA
  17. 17. 今日話すこと 1. 独立成分分析入門 ̶ {fastICA} 2. perfume への応用例
  18. 18. 混ざった「会話」を分ける 元々は独立な会話 (信号) 混ざる mixed
  19. 19. 混ざった「会話」を分ける 混合信号
  20. 20. 混ざった「観測値」を分ける 混合信号 神経活動  内側/外側視覚関連領域  聴覚関連領域   Default mode network + 頭の動き + 拍動 etc… 観測値
  21. 21. 混合信号 観測値 混ざった「観測値」を分ける Kelly, R. E., Alexopoulos, et.al. (2010). 189(2), 233–45.
  22. 22. 共通点 混ざった信号を分ける 元々は独立 な会話(信号) 独立 成分 分析
  23. 23. 定式化
  24. 24. 定式化 観測値xは、独立な成分s1(t)とs2(t)を足し合わせたもの
  25. 25. 定式化 観測値xは、独立な成分s1(t)とs2(t)を足し合わせたもの 混合行列 独立成分 観測値
  26. 26. で、独立成分分析?! 次の仮定を元に、 混合行列Aと信号sを 推定すること
  27. 27. 仮定 統計的に独立であること 独立成分が正規分布に従わないこと (非ガウス的)
  28. 28. 仮定 統計的に独立であること 独立成分が正規分布に従わないこと (非ガウス的)
  29. 29. 統計的に独立 相関が 0 片方の変数がどのような値をとってももう 片方の分布は変わらないこと 例えば、xとyが統計的に独立なら、以下の 式が成り立つ
  30. 30. 仮定 統計的に独立であること 独立成分が正規分布に従わないこと (非ガウス的)
  31. 31. 仮定 統計的に独立であること 独立成分が正規分布に従わないこと (非ガウス的)
  32. 32. 正規分布に従わない
  33. 33. 正規分布に従わない ラプラス分布 ガンマ分布
  34. 34. とりあえず 見てみよう
  35. 35. 準備 ラプラス分布に従う変数 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))
  36. 36. 準備 ラプラス分布に従う変数 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 #混合行列
  37. 37. {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
  38. 38. {fastICA} #結果の描画 > par(mfrow=c(1,3)) > plot(fastICA$X, main = "Pre-processed data", cex=0.1) #中心化 > plot(fastICA$X %*% fastICA$K, main = "PCA components", cex=0.1) #白色化 > plot(fastICA$S, main = "ICA components", cex=0.1) #独立成分
  39. 39. {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 #非混合行列の初期値 )
  40. 40. {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 #非混合行列の初期値 )
  41. 41. G 関数 … ?
  42. 42. negentropy ? entropy ?
  43. 43. negentropy ? entropy ?
  44. 44. アルゴリズム の流れ
  45. 45. {fastICA} アルゴリズム 1. 前処理パート 1. 中心化 各観測値の平均を0 2. 白色化 分散を等方的にする 2. 非ガウス性を最大に 回転して、正規分布からかけ離れ た分布にする
  46. 46. {fastICA} アルゴリズム 1. 前処理パート 1. 中心化 各観測値の平均を0 2. 白色化 分散を等方的にする 2. 非ガウス性を最大に 回転して、正規分布からかけ離れ た分布にする
  47. 47. {fastICA} アルゴリズム 1. 前処理パート 1. 中心化 各観測値の平均を0 2. 白色化 分散を等方的にする 2. 非ガウス性を最大に 回転して、正規分布からかけ離れ た分布にする ど う や っ て ?
  48. 48. negentropy entropy ?
  49. 49. ネゲントロピー ある確率変数Xと、同じ分散をもつ正規確率変数 Nのエントロピーの差 情報エントロピーH(X)が 最大 → ばらつきが大き い 情報エントロピーH(X)が 最小 → ばらつきが小さい
  50. 50. ネゲントロピー :近似 G関数を用いて近似することにより、計算が容易 になる さっきのは これ
  51. 51. {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 #非混合行列の初期値 )
  52. 52. 復習 #結果の描画 > par(mfrow=c(1,3)) > plot(fastICA$X, main = "Pre-processed data", cex=0.1) #中心化 > plot(fastICA$X %*% fastICA$K, main = "PCA components", cex=0.1) #白色化 > plot(fastICA$S, main = "ICA components", cex=0.1) #独立成分 中心化 白色化 回転
  53. 53. 独立 成分 分析 ? 主 成分 分析 ? 因 子 分析 ?
  54. 54. 主成分分析 overview 定式化 & ポイント ! -  主成分は互いに相関はない(でも独立ではない) -  主成分は、すべて正規分布に沿っている  正規分布の場合、相関が0なら独立性が保証される 使われ方 - 次元を削減する方法として用いられる - ICA では、PCAを白色化のときに用いている。PCAの次 元が独立成分の要素の数に一致する
  55. 55. くわしくは http://www.slideshare.net/sanoche16/tokyor31-22291701 !
  56. 56. 独立成分分析 vs 主成分分析 散布図で見ると PCAは分散が最大の方向に 基底をとる 次の基底はその基底に直交 するようにとる 第 一 主 成 分 第 二 主 成 分
  57. 57. 独立成分分析 vs 主成分分析 散布図で見ると 基底同士は直交 しなくてもよい
  58. 58. 独立成分分析を極めるなら 入門 独立成分分析 村田 昇 詳解 独立成分分析―信号解析の新しい世界 Aapo Hyvarinen , Juha Karhunen, Erkki Oja 基本的な解法, 他の分析法との違い 基本的な解法, ノイズ有のICA 他の分析法との違い
  59. 59. 今日話すこと 1. 独立成分分析入門 ̶ {fastICA} 2. perfume への応用例
  60. 60. Perfume (復習)
  61. 61. Perfume (復習) ! !
  62. 62. ん … ?
  63. 63. ん … ?
  64. 64. http://perfume-global.com/project.html Perfume global project # 001 モーションキャプチャーデータを配布
  65. 65. perfume , モーションキャプチャ
  66. 66. 重要な参考文献 3相主成分分析を用いた解析 http://researchmap.jp/?action=cv_download_main&upload_id=42728
  67. 67. perfume + ダンス 主成分分析
  68. 68. 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
  69. 69. perfume , モーションキャプチャ お尻の位置x y z 角度Zrot Yrot Xrot 肩Yrot Xrot Zrot
  70. 70. 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
  71. 71. 主成分分析 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) !
  72. 72. 主成分分析 ! → 分散が大きい方向 に主成分
  73. 73. チェック! http://game.akjava.com/creator/
  74. 74. のっち PCA1 PCA2 浮いてる… ?
  75. 75. perfume + ダンス 独立成分分析
  76. 76. 独立成分分析 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]) }
  77. 77. チェック! http://game.akjava.com/creator/
  78. 78. のっち IC1 IC2 人間っぽい
  79. 79.  ENJOY !

×