SlideShare une entreprise Scribd logo
1  sur  81
Télécharger pour lire hors ligne
独立成分分析 : 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 <- cbind( rlaplace(4000), 0.5 * rlaplace(4000))
準備 ラプラス分布に従う変数
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
#混合行列
{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
{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) #独立成分
{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 #非混合行列の初期値
)
{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 #非混合行列の初期値
)
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を同時に推定するか
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 #非混合行列の初期値
)
復習
#結果の描画
> 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) #独立成分
中心化 白色化 回転
独立 成分 分析 ?
主 成分 分析 ?
因 子 分析 ?
主成分分析 overview
定式化 & ポイント
!
-  主成分は互いに相関はない(でも独立ではない)
-  主成分は、すべて正規分布に沿っている
 正規分布の場合、相関が0なら独立性が保証される
使われ方
- 次元を削減する方法として用いられる
- ICA では、PCAを白色化のときに用いている。PCAの次
元が独立成分の要素の数に一致する
くわしくは
http://www.slideshare.net/sanoche16/tokyor31-22291701
!
独立成分分析 vs 主成分分析
散布図で見ると
PCAは分散が最大の方向に
基底をとる
次の基底はその基底に直交
するようにとる
第
一
主
成
分
第
二
主
成
分
独立成分分析 vs 主成分分析
散布図で見ると
基底同士は直交
しなくてもよい
独立成分分析を極めるなら
入門 独立成分分析
村田 昇
詳解 独立成分分析―信号解析の新しい世界
Aapo Hyvarinen , Juha Karhunen, Erkki Oja
基本的な解法, 他の分析法との違い
基本的な解法, ノイズ有のICA
他の分析法との違い
今日話すこと
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 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
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 <- read.table("kashiyuka.dat", header = F)
X <- cbind(notch[,1], aachan[,1], kashiyuka[,1])
notch Y rot aachan Y rot kashiyuka Y rot
主成分分析
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)
!
主成分分析
!
→ 分散が大きい方向
に主成分
チェック!
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])
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])
}
チェック!
http://game.akjava.com/creator/
のっち
IC1
IC2
人間っぽい
 ENJOY !

Contenu connexe

Tendances

MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
. .
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカット
Tsubasa Hirakawa
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
Yohei Sato
 
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
horihorio
 

Tendances (20)

Chapter2.3.6
Chapter2.3.6Chapter2.3.6
Chapter2.3.6
 
強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習
 
機械学習を用いた異常検知入門
機械学習を用いた異常検知入門機械学習を用いた異常検知入門
機械学習を用いた異常検知入門
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
 
劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章
 
ファクター投資と機械学習
ファクター投資と機械学習ファクター投資と機械学習
ファクター投資と機械学習
 
顕著性マップの推定手法
顕著性マップの推定手法顕著性マップの推定手法
顕著性マップの推定手法
 
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
 
PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門
 
カルマンフィルタ入門
カルマンフィルタ入門カルマンフィルタ入門
カルマンフィルタ入門
 
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカット
 
深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
 
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
 
EMアルゴリズム
EMアルゴリズムEMアルゴリズム
EMアルゴリズム
 
マルコフ連鎖モンテカルロ法と多重代入法
マルコフ連鎖モンテカルロ法と多重代入法マルコフ連鎖モンテカルロ法と多重代入法
マルコフ連鎖モンテカルロ法と多重代入法
 

Similaire à 独立成分分析とPerfume

Similaire à 独立成分分析とPerfume (13)

TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
 
Simulation_assignment9
Simulation_assignment9Simulation_assignment9
Simulation_assignment9
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
 
機械学習 / Deep Learning 大全 (3) 時系列 / リコメンデーション編
機械学習 / Deep Learning 大全 (3) 時系列 / リコメンデーション編機械学習 / Deep Learning 大全 (3) 時系列 / リコメンデーション編
機械学習 / Deep Learning 大全 (3) 時系列 / リコメンデーション編
 
Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
R -> Python
R -> PythonR -> Python
R -> Python
 
拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化
 
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
 
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回
 

独立成分分析とPerfume