Beispiel #1
0
def fastICAall(data,g,dg,resize = True):
    nIC = data.shape[1]

    data = center(data)
    data = mix.whiten(data)
    w = np.array([random_w(nIC) for i in range(nIC)])

    epsilon = 0
    w_temp = np.zeros_like(w)
    while(not converge(epsilon,1e-5)):
        print("Epsilon is currently ", epsilon)
        for i in range(nIC):
            w_temp[i] = newton_step(w[i],data,g,dg)
            w_temp[i] /= np.linalg.norm(w_temp[i])
        W = sym_decorrelation(w_temp)
        epsilon = max(abs(np.diag(np.dot(W, w.T))))
        w = np.copy(W)

    # recover unmixed signals
    dataest = np.array([np.dot(data,w[i]) for i in range(nIC)]) 
    if resize:
        dataest = dataest.T*(256- 127)/np.max(np.abs(dataest), axis = 1)
        return (dataest + 127).T
    else:
        return dataest
Beispiel #2
0
def fastICA(data,g,dg):
    data = center(data)
    data = mix.whiten(data)
    w = random_w(data.shape[1])

    # epsilon is used to know if w converges
    epsilon = 0
    nbsteps = 0

    # max nb of steps. Used to test different functons ( used because 
    # the algorithm might diverge)
    MAX = 100
    while(not converge(epsilon,1e-20) and nbsteps <= MAX):
        w_temp = newton_step(w,data,g,dg)
        w_temp /= np.linalg.norm(w_temp)
        epsilon = np.dot(w,w_temp)
        w = w_temp
        nbsteps += 1

    # if algorithm diverged , the nbsteps is negative
    if nbsteps > MAX:
        nbsteps = -1

    return np.dot(data,w),np.dot(data,np.array([w[1],-w[0]])),nbsteps