运行视频中的代码有问题

来源:3-4 神经网络对数据实现分类(上)

qq_懿琳_0

2017-07-27 16:38

运行 In [5] plt.plot(range(1, len(ppn.errors_) + 1), ppn.errors_, marker='o') 报错    'module' object has no attribute 'scatter'   什么意思

写回答 关注

2回答

  • 慕粉3810876
    2017-09-08 21:48:58

    这一节有问题,运行时有错误,解决方法如下:

    import numpy as np
    class Perceptron(object):

        def __init__(self, eta=0.01, n_iter=10):
            self.eta=eta
            self.n_iter=n_iter

        def fit(self, X, y):
            self.w_=np.zeros(1+X.shape[1])
            self.errors_ = []

            for _ in range(self.n_iter):
                errors =0
                for xi,target in zip(X,y):
                    update = self.eta * (target - self.predict(xi))
                    self.w_[1:] += update * xi
                    self.w_[0] += update
                    errors += int(update != 0.0)
                self.errors_.append(errors)
            return self

        def net_input(self, X):
            """Calculate net input"""
            return np.dot(X, self.w_[1:]) + self.w_[0]

        def predict(self, X):
            """Return class label after unit step"""
            return np.where(self.net_input(X) >= 0.0, 1, -1)
        
    ppn = Perceptron(eta=0.1,n_iter=10)
    ppn.fit(X,y)
    print('Totalnumberofmisclassifications:%dof100'%(y!=ppn.predict(X)))
    plt.plot(range(1,len(ppn.errors_) + 1),ppn.errors_,marker='o')
    plt.xlabel('Epochs')
    plt.ylabel('errorclassifynumber')
    plt.show()

    意思就是把这个类和ppn=.... 放在一起,同时,这个类还要改一下,你可以发现我这个类和视频里的有一点点不一样,但没有影响

  • 乘龙
    2017-07-27 21:06:00

    # -*-coding: utf-8
    import numpy as np
    class Perceptron(object):
       """
       eta:学习率
       n_iter:权重向量的训练次数
       w_:神经分叉权重向量
       errors:用于记录神经元判断出错次数
       """
       def __init__(self,eta=0.01,n_iter=10):
           self.eta=eta
           self.n_iter=n_iter
           pass
       def fit(self,X,y):
           """
           :param X:训练样本,电信号向量;
           X:shape(n_samples,n_features)X中的样本个数,接收电信号的个数
           X:[[1,2,3],[4,5,6]] n_samples:2;n_features:3
           :param y:样本对应的分类
           y:[1,-1]
           zip(X,y)=[[1,2,3,1],[4,5,6,-1]]
           初始化权重向量
           加一是因为将阈值作为w0
           """
           self.w_=np.zeros(1+X.shape[1])
           self.errors_=[]
           for _ in range(self.n_iter):
               errors=0
               for xi,target in zip(X,y):
                   """
                   update = eta*(y-y')
                   xi是一个向量,更新权重
                   """
                   update=self.eta*(target-self.predict(xi))
                   self.w_[1:] += update * xi
                   self.w_[0] += update  # 更新阈值
                   errors+=int(update)
                   self.errors_.append(errors)
                   pass
               pass
           pass

       def net_input(self, X):
           return np.dot(X,self.w_[1:])+self.w_[0]
           pass
       def predict(self,X):
           return np.where(self.net_input(X) >=0.0, 1,-1)
           pass
       pass


    import pandas as pd
    import matplotlib.pyplot as plt

    file='/home/bokebi/competition/tianchi_speed_prediction/learn_project/LSTM-Neural-Network-for-Time-Series-Prediction/imoocdata.csv'
    df=pd.read_csv(file,header=None)
    y=df.loc[0:100,4].values
    y=np.where(y=='Iris-setosa',-1,1)
    x=df.loc[0:100,[0,2]].values

    from matplotlib.colors import ListedColormap
    def plot_decision_regions(X,y,classifier,resolution=0.02):
       markers=('s','x','o','v')
       colors=('red','blue','lightgreen','gray','cyan')
       cmap=ListedColormap(colors[:len(np.unique(y))])
       pass

       x1_min,x1_max=x[:,0].min()-1,x[:,0].max()
       x2_min,x2_max=x[:,1].min()-1,x[:,1].max()

       xx1,xx2=np.meshgrid(np.arange(x1_min,x1_max,resolution),np.arange(x2_min,x2_max,resolution))
       classifier.fit(X,y)
       Z=classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
       Z=Z.reshape(xx1.shape)
       plt.contourf(xx1,xx2,Z,alpha=0.4,cmap=cmap)
       plt.xlim(xx1.min(),xx1.max())
       plt.xlim(xx2.min(),xx2.max())
       for idx,c1 in enumerate(np.unique(y)):
           plt.scatter(x=X[y==c1,0],y=X[y==c1,1],alpha=0.8,c=cmap(idx),marker=markers[idx],label=c1)
       pass

    ppn=Perceptron()
    plot_decision_regions(x,y,ppn,resolution=0.02)
    plt.xlabel('len1')
    plt.ylabel('len2')
    plt.legend(loc='upper left')
    plt.show()

机器学习-实现简单神经网络

人工智能时代,你准备好成为抓住机遇的那百分之二吗。

66868 学习 · 182 问题

查看课程

相似问题