анимированная граничная визуализация персептрона - PullRequest
0 голосов
/ 22 апреля 2020

Я с нуля строю класс персептрона в python, и теперь я пытаюсь сделать анимированную визуализацию границы решения на каждой итерации учебного процесса. Проблема в том, что мой код не работает, потому что Похоже, "animation_fun c" не вызывается, я не знаю почему. Вы можете мне помочь.

class Perceptron:
def __init__(self,X=None, y=None,lr=0.001, niter=1000):
    self.lr = lr
    self.niter = niter
    self.w = None
    self.b = None


def fit(self,X,y):
    for indice,X_i in enumerate(X):
        self.w += self.lr*(y_[indice]-self.predic(X_i))* X_i

def animar_perceptron(self,X,y,niter):
    samples,features = X.shape
    self.w = np.zeros(features)
    self.b = 0
    y_ = np.array([1 if i>0 else 0 for i in y])    
    x0_1 = np.amin(X[:,0])
    x0_2 = np.amax(X[:,0])
    ymin = np.amin(X[:,1]) 
    ymax= np.amax(X[:1])    
    fig, ax = plt.subplots()
    ax.scatter(X[:,0], X[:,1],marker='o', c=y )
    boundary, =ax.plot([X0_1, X0_2],[0, 0],'k')
    def animation_func(_):
        self.fit(X,y)
        x1_1 = (-self.w[0]*x0_1-self.b )/self.w[1]
        x1_2 = (-self.w[0]*x0_2-self.b )/self.w[1]
        boundary.set_ydata([x1_1,x1_2])
        return boundary,

    return FuncAnimation(fig, func=animation_func, frames=np.arange(1,niter), interval=50)


def predic(self, X):
    y_hat = np.dot(X,self.w) + self.b
    y_hat =self.activate_fun(y_hat)
    return y_hat

def activate_fun(self,z):
    return np.where(z>0, 1,0)

def score(self, y_true, y_pred):
    accuracy = np.sum(y_true == y_pred)/len(y_true)
    return accuracy



p = Perceptron()
animacion = animar_perceptron(X,y,1000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...