最新文章:

首页 机器学习

Python实现感知器对象

发布时间:2017年07月21日 评论数:抢沙发 阅读数:151

    Anaconda Navigator - Jupyter


    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):
            """
            输入训练数据,培训神经元,x输入样本向量,对应样本分类
            
            X :shape[n_samples, n_features]
            X : [[1, 2, 3],[4, 5, 6]]
            n_samples : 2
            n_features : 3
            
            y : [1, -1]
            """
            
            """
            初始化权重向量为0
            加一事因为前面算法提到的w0,也就是步调函数阈值
            """
            self.w_ = np.zeros(1 + X.shape[1])#np为一个数学库 初始化全为0
            self.errors_ = []
            
            for _ in range(self.n_iter):
                errors = 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):
                    """
                    update = η * (y - y')
                    """
                    update = self.eta * (target - self.predict(xi))
                    
                    """
                    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
            pass
        def net_input(self,X):
            """
             z = W0*1 + W1*X1 + W2*X2 + ...... Wn*Xn
             """  
            return np.dot(X,self.w_[1:]) + self.w_[0]
        def predict(self, X):
            return np.where(self.net_input(X) >= 0.0 , 1,-1)
        pass
    


二维码加载中...
本文作者:HDC      文章标题: Python实现感知器对象
本文地址:http://hdcin.cn/?post=280
版权声明:若无注明,本文皆为“小胖Blog's”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论