ESL-ICA
来源:互联网 发布:怎么在淘宝上买av种子 编辑:程序博客网 时间:2024/05/17 06:40
- Independent Component Analysis
- ICA Maximum Likelihood
- Sigmoid function
- FastICA
- Whiten
- Python Implement
- ICA Maximum Likelihood
Independent Component Analysis
假设
这里提到一个概念,自由(Independent)与不相关的关系(uncorrelated):
p(x,y) = p(x)p(y) => E[x,y] = E[x]E[y]
前者是自由的充要条件,后者是uncorrelated的条件。
ICA与PCA的区别在于,对于ICA,
ICA & Maximum Likelihood
欲求s,我们需要求解
记:
则有:
Sigmoid function
我们并不确定
记data set,
SGD迭代的方式为:
FastICA
算法流程如下:
Whiten
白化的定义:
设x是一个随机变量,存在一个线性变换V将它变换成z:
那么
Python Implement
#!/usr/bin/env python#FastICA from ICA book, table 8.4 import mathimport randomimport matplotlib.pyplot as pltfrom numpy import *%matpltlibn_components = 2def f1(x, period = 4): return 0.5*(x-math.floor(x/period)*period)def create_data(): #data number n = 500 #data time T = [0.1*xi for xi in range(0, n)] #source S = array([[sin(xi) for xi in T], [f1(xi) for xi in T]], float32) #mix matrix A = array([[0.8, 0.2], [-0.3, -0.7]], float32) return T, S, dot(A, S)def whiten(X): #zero mean X_mean = X.mean(axis=-1) X -= X_mean[:, newaxis] #whiten A = dot(X, X.transpose()) D , E = linalg.eig(A) D2 = linalg.inv(array([[D[0], 0.0], [0.0, D[1]]], float32)) D2[0,0] = sqrt(D2[0,0]); D2[1,1] = sqrt(D2[1,1]) V = dot(D2, E.transpose()) return dot(V, X), V
def _logcosh(x, fun_args=None, alpha = 1): gx = tanh(alpha * x, x); g_x = gx ** 2; g_x -= 1.; g_x *= -alpha return gx, g_x.mean(axis=-1)
返回的是g(x)和E(g’(x))
def do_decorrelation(W): #black magic s, u = linalg.eigh(dot(W, W.T)) return dot(dot(u * (1. / sqrt(s)), u.T), W)
这里用到一些技巧:
def do_fastica(X): n, m = X.shape; p = float(m); g = _logcosh #black magic X *= sqrt(X.shape[1]) #create w W = ones((n,n), float32) for i in range(n): for j in range(i): W[i,j] = random.random() #compute W maxIter = 200 for ii in range(maxIter): gwtx, g_wtx = g(dot(W, X)) W = dot(gwtx, X.T) / p - g_wtx[:, newaxis] * W
W1 = do_decorrelation(W)
lim = max( abs(abs(diag(dot(W1, W.T))) - 1) ) W = W1 if lim < 0.0001: break return Wdef show_data(T, S): plt.plot(T, [S[0,i] for i in range(S.shape[1])], marker="*") plt.plot(T, [S[1,i] for i in range(S.shape[1])], marker="o") plt.show()def main(): T, S, D = create_data() Dwhiten, K = whiten(D) W = do_fastica(Dwhiten) #Sr: reconstructed source Sr = dot(dot(W, K), D) show_data(T, D) show_data(T, S) show_data(T, Sr)if __name__ == "__main__": main()
0 0
- ESL-ICA
- ICA
- ICA
- ICA
- ICA
- ICA
- ESL Overview
- esl 简介
- Citrix ICA
- Undercomplete ICA
- PCA ICA
- PCA ICA
- PCA&ICA
- ESL学习笔记
- ESL学习之kNN
- ESL-chapter5 Smoothing Splines
- ESL-chapter6 Kernel Smoother
- ESL-chapter7-交叉验证
- 导入第三方Jar包到Nexus私服
- 结构型模式02-装饰者模式(动态为一个对象添加职责,就增加功能而言,装饰模式比生成子类更加灵活)
- The system is running in low-graphics mode [ubuntu 14.04]
- Mac下使用python实现简单的目录树展示
- 【qscoj】喵哈哈村的秘境探险(二)
- ESL-ICA
- CoordinateLayout 自定义Behavior 仿百度外卖效果 实践
- 郑州培训 <山路崎岖>(最小生成树)
- Win Server 2008 R2
- 第三章 ListView的用法
- 通过插件实现VIM编辑的自动补齐功能
- 运算符作业
- 应用回到主界面再返回应用导致Fragment.getActivity()为空的解决方法。
- mybatis调用视图和存储过程