为了账号安全,请及时绑定邮箱和手机立即绑定
  • panda数据分析库
    df = pd.read_csv(file , header = None)
    df.head(10) 读取10行
    df.loc[0:100 , 4].values 读取0到100行的第四列数据
    iloc主要使用数字来索引数据,而不能使用字符型的标签来索引数据
    而loc则刚好相反,只能使用字符型标签来索引数据,不能使用数字
    来索引数据
    
    plt.scatter绘制散点图
    plt.scatter(X[:50 , 0] , X[:50 , 1] , color='red' , marker='o')
    前50列数据,x轴为0列,y轴为1列数据,画出的点为红圈


  •  X:[   [1,2,3] , [4,5,6]   ]
     y:[        1    ,    -1       ]
     zip(X,y) = [[1,2,3, 1 ] , [4,5,6 , -1]]
     
     np.zero 向量全赋零操作
     np.dot(X , y)  点积  w_[1:]权重w从1到最后
     np.where(x>0 , true , false) 等价于冒号表达式
  • X = np.array
    X:shape[n_samples , n_features]
    X:[ [1 , 2 , 3] , [4 , 5 , 6] ]
    n_samples : 2  n_features : 3
    X.shape[1]就是X的n_samples值,值为2。


  • import numpy as np

    class perceptron(object):

        '''

        eta:学习率

        n_iter:权重向量的训练次数

        w_:神经分叉权重向量  w处理输入x

        errors_:用于记录神经元判断出错次数

        '''

        def _int_(self,eat=0.01,n_iter=10):

            self.eat=eat;

            self.n_iter=n_iter;

            pass

        def fit(self,X,y):

            """

            输入训练数据,培训神经元,X是输入的训练样本,y是对样本的正确分类

            X:shape[n_samples,n_features]

            n_samples:几组数据。n_features:有多少个神经分叉。

            X[[1,2,3],[4,5,6]] 

            n_samples:2

            n_features:3

            y:[1,-1]

            

            """

            '''

            初始化权重向量为0

            w_:是一个一位数组,代表每个神经纤维的权重向量

            X.shape[1]:在计算有几个神经纤维

            加一是因为前面算法提到的w0,也就是步调函数的阈值

            开始的时候阈值  塞它=w0 用w0保存

            '''

            self.w_=np.zero(1+X.shape[1]);

            self.errors=[];

            for _ in range(self.n_iter):

                error=0;

                '''

                X[[1,2,3],[4,5,6]]

                y:[1,-1]

                zip(X,y)=[[1,2,3,1],[4,5,6,-1]]

                

                '''

                for xi,target in zip(X,y):

                    '''

                    target:每组数据,一个个神经元 判断的正确值标准值

                    update=学习率*(y-y')

                    '''

                    update=self.eta*(target-self.predict(xi))

                    '''

                    predict:函数,是用来根据每个神经元输入的一组数据得到自己判断的结果

                    xi 是一个向量

                    update*xi等价:

                    [的它w(1)=x[1]*update,的它w(2)=x[2]*update,的它w(3)=x[3]*update,]

                    '''

                    self.w_[1:] +=update*xi

                    self.w_[0] +=update;

                

                

                

                    errors += int(update != 0.0)

                    self.errors_append(errors)   

                    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


  • 对人类智商和尊严进行全面的碾压...

  • 感知器数据分类算法步骤

    01:28
    看视频
  • file=""
    import pandas as pd
    import matplotlib.pyplot  as plt
    import numpy as np
    df=pd.read_cvs(flie,header=none)//文件第一行即数据第一行
    
    y=df.loc[0:100,4].values//读取数据,将0-100行数据的第四列,作为输出y(vector)
    y=np.where(y=="",1,-1)//将输出字符串转化成数字
    x=df.loc[0:100,[0,2]].values//第0列和第2列作为输入抽取出来
    
    plt.scatter(x[:50,0],x[:50,1],color='red',marker='o',label="xxx")
    plt.scatter(x[50:100,0],x[50:100,1],color='blue',marker='x',label="yyy")
    plt.xlabel('lll')
    plt.ylabel('mmm')
    plt.legend(loc='upper left')//设置图例属性
    plt.show()


    11:23
    看视频
  • 感知器算法 试用范围:

    1. Linearly separable 线性可分割 √

    2. Not linearly separable  线性不可分割的 ×


  • 阈值的更新

        阈值

            一开始是 根据我们的经验,设定一个值

            这个值再后续中要不断的更新。

            就是 w0 的更新。没有x0可以乘。

    θ = -w0 

    wo = w0 + dw0

    dw0 = η * e(y)



  • 权重更新算法:

    wj = wj + dwj

    dwj = η * (y - y^) * xj

           = η * e(y) * xj 

    η:学习率,是[0, 1]间的一个小数。

        需要模型的设计者自己去设定。模型自己训练中不断地调整权重w的取值。然鹅,不同的学习率η,有可能会影响到最后的模型学习效果。




  • 步调函数 & 阈值

    z* = z - theta  (????)

    z* ><  2* theta


  • 感知器 数据分类算法 步骤:

    1. 把权重向量w初始化为0(或[0, 1]间任意小数);

    2. 把训练样本输入感知器,得到分类结果(-1, 或1);

    3. 根据分类结果更新权重向量w 。


    整个机器学习的目的,就是 通过输入的训练样本,反复去更新权重向量w,直到权重向量更新到一定程度之后,我们的整个模型才能有效地对未知输入做出有效的分类和预测。


  • 老师没有把代码贴出来,光看老师讲映像不够深刻,还是要自己动手。同学把自己整理的代码贴出来给大家看看:

    使用PYTHON实现简单的单一神经元

举报

0/150
提交
取消
课程须知
有一定的编程基础,例如掌握C语言。
老师告诉你能学到什么?
1、机器学习的基本概念介绍 2、数据分类算法介绍 3、神经元感知器分类算法并进行实现 4、数据解析和可视化设计 5、使用数据训练神经网络 6、如何使用训练后的神经网络分类数据 7、适应性线性神经元的基本原理并实现 8、适应性线性神经元网络进行数据分类
意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!