Ejemplo n.º 1
0
Archivo: elm.py Proyecto: ryukinix/svm
def train(X, y, q=Q, activation=None):
    """Algoritmo de treinamento para ELM (Extreme Learning Machine)

    Parâmetros
    ---------
    X: Vetor de características
    y: Vetor de rótulos
    q: número de neurônios ocultos

    Return
    ------
    W: pesos aleatórios da camada oculta

    """
    # rótulos
    # torna vetor linha em coluna
    n, p = X.shape
    D = y.T

    # training
    # Pesos aleatórios da camada oculta
    W = np.random.randn(q, p + 1)
    # Adicionar bias
    X = processing.add_bias(X)
    # Calcular saída da camada oculta
    Z = W @ X.T
    if activation is not None:
        Z = activation(Z)
    Z = processing.add_bias(Z, axis=0)
    # Calcular pesos M para camada de saída (aprendizado)
    # M = D @ (Z.T @ (np.linalg.inv(Z @ Z.T)))
    M, *_ = np.linalg.lstsq(Z.T, D.T, rcond=None)

    return W, M.T
Ejemplo n.º 2
0
def predict(X, W):
    """Função de predição baseado na memória W da Rede Neural Perceptron.

    X é a matriz de features e não deve conter o bias, pois é
    adicionado nessa função.
    """
    X = processing.add_bias(X)
    u = W.T @ X.T
    return processing.encode_label(u.T)
Ejemplo n.º 3
0
def predict(X, T, G, activation=None):
    """Algoritmo de predição para ELM (Extreme Learning Machine)

    Parâmetros
    ----------
    T: Centróides da camada oculta
    G: Vetor de pesos da camada de saída para

    Return
    ------
    np.array

    """
    X = processing.add_bias(X)
    PHI = phi(X, T)
    if activation is not None:
        PHI = activation(PHI)
    PHI = processing.add_bias(PHI, axis=1)
    Y = G @ PHI.T

    return Y.T
Ejemplo n.º 4
0
Archivo: elm.py Proyecto: ryukinix/svm
def predict(X, W, M, activation=None):
    """Algoritmo de predição para ELM (Extreme Learning Machine)

    Parâmetros
    ----------
    W: Vetor de pesos da camada oculta utilizados no treinamento
    M: Vetor de pesos da camada de saída para

    Return
    ------
    np.array

    """
    X = processing.add_bias(X)
    Z = W @ X.T
    if activation is not None:
        Z = activation(Z)
    Z = processing.add_bias(Z, axis=0)
    Y = M @ Z

    return Y.T
Ejemplo n.º 5
0
def train(X, y, q=Q, activation=None):
    """Algoritmo de treinamento para Rede Neural RBF

    Parâmetros
    ---------
    X: Vetor de características
    y: Vetor de rótulos
    q: número de neurônios ocultos

    Return
    ------
    T: Centróides da camada oculta com tamanho q
    G: Matriz de pesos da camada de saída.


    """
    # rótulos
    n, p = X.shape
    index = np.arange(0, n - 1)
    D = y

    # Adicionar bias
    X = processing.add_bias(X)

    # training
    # Centróides aleatórios da camada oculta
    T = X[np.random.choice(index, q)]

    # Calcular saída da camada oculta
    PHI = phi(X, T)
    if activation is not None:
        PHI = activation(PHI)
    PHI = processing.add_bias(PHI, axis=1)
    # Calcular pesos G para camada de saída (aprendizado)
    # Utiliza-se mínimos quadrados
    # FIXME: G = D @ (PHI.T @ (np.linalg.inv(PHI @ PHI.T)))
    # Singular Matrix! Usando mínimos quadrados optimizados do Numpy
    G, *_ = np.linalg.lstsq(PHI, D)

    return T, G.T
Ejemplo n.º 6
0
def train(X, y, learning_rate=0.01, max_iterations=100):
    """Função de treinamento da Rede Neural Perceptron.

    Função de ativação no neurônio é a sigmoid.
    """
    X = processing.add_bias(X)
    n, m = X.shape
    _, c = y.shape
    W = np.zeros((m, c))

    epochs = 0
    while epochs <= max_iterations:
        deltaW_sum = 0
        for xi, d in zip(X, y):
            x = processing.column_vector(xi)
            yi = processing.sigmoid(W.T @ xi)  # activation
            e = d - yi
            deltaW = learning_rate * e * x
            W = W + deltaW
            deltaW_sum += abs(deltaW).sum()
        if deltaW_sum == 0:  # convergence condition
            break
        epochs += 1
    return W