Predição com mais resultados do que o esperado

0 respostas
python
mmrosa

Pessoal, fiz um código para simular redes perceptron para tabelas verdades, uso metade de uma matriz(no caso 2 linhas) para treino da rede e o restante(2 linhas) para previsao, a mesma coisa acontece para o target. O algoritmo até funciona, me dá resultado correto porém ele me mostra o resultado como se tivesse passado a matriz inteira(com 4 linhas) e me retorna a previsao para essas 4 linhas porém ele deveria me passar a previsao somente para 2 linhas. Não consigo encontra o erro!

import pandas as arquivo
import numpy as np

class Trainer:

def _init_(self):
    pass

def train(self,X,y,l=1):

    erros = 1

    y = np.asarray(y)
   
    X = np.asarray(X) # transforma vetor em array

    (n,m) = np.shape(X)  # diz a dimensao da matriz
    
    w     = np.zeros(m+1) #dimensao de w eh m numero de colunas (n,2)

    w[0]  = -1
    bias  = np.ones((n,1))
    #print(X.shape)
    #print(bias.shape)
    X = np.concatenate((bias,X),axis=1)
    while erros>0:
    
        erros = 0
        for i,linha in enumerate(X): # ou y,x in zip(y,x)
        
            ychapeu = np.sign(np.dot(w,linha))
            if ychapeu != y[i]:
                w = w + l*y[i]*linha
                erros+=1
                #print("w: ",w)     
                #print("Total de erros:  : ",erros)
    return Predictor(w)
    #print("os pesos finas são: ",w)

class Predictor:

def __init__(self, w):
    self.w = w

def predict (self, X):
    
    X = np.asarray(X)
    
    (n,m) = np.shape(X)
    bias  = np.ones((n,1))
    X = np.concatenate((bias,X),axis=1)
    print("X:",X)
    
    for i,linha in enumerate(X): # ou y,x in zip(y,x)
        y[i] = np.dot(self.w,linha)
    return y

y = [-1,-1,-1,1] #target para AND

X = [[0,0],
[0,1],
[1,0],
[1,1]]

treino = X[:2]
valorTreino = y[:2]
tr = Trainer()

previsor = tr.train(treino,valorTreino)
previsor.predict(X[2:])

Criado 20 de dezembro de 2016
Respostas 0
Participantes 1