感知器_Python机器学习读书笔记

本文是塞巴斯蒂安的《Python机器学习》中关于感知器一节的读书笔记。文中介绍了Perceptron类的初始化、净输入计算、预测和拟合过程。感知器通过学习率和最大迭代次数调整,确保在两类线性可分情况下能收敛。在非线性可分时,可通过设置最大迭代次数避免无限更新权重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为塞巴斯蒂安所著"python机器学习"感知器一节读书笔记.

class Perceptron(object):
    def __init__(self, eta=0.01, n_iter=50, random_state=1):#初始化
        self.eta = eta# 学习率(between 0.0 and 1.0)
        self.n_iter = n_iter# 最大迭代次数
#只有两个类线性可分,并且学习速率(eta)足够小,这样感知器的收敛性才能得到保证。
#如果两个类不能用线性决策边界分离,可以为训练集设置最大迭代次数,及容忍错误的
#阈值(w_[0]=-θ,不是eta),否则分类感知器将永远都不会停止更新权重        
        self.random_state = random_state# 用于初始化权重的随机数生成器的种子
        
    def net_input(self, X):#计算净输入
#这里X只是参数的名字,实际传入数据集X的一行xi,不是传入整个数据集X,
#参数名字可以自己起
        return np.dot(X, self.w_[1:]) + self.w_[0]#返回第i行的净输入

    def predict(self, X):#返回分类标签
#这里X只是参数的名字,实际传入数据集X的一行xi,不是传入整个数据集X,
#参数名字可以自己起
        return np.where(self.net_input(X) >= 0.0, 1, -1)
        #返回第i行的分类标签   

    def fit(self, X, y):#传入数据集X和正确分类标签y
        rgen = np.random.RandomState(self.random_state)
        self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1 + X.shape[1])#初始化权重
# 总共5个指标,w_[0]=-θ(θ是阈值)对应指标(指标0)值设定为1,
# 花萼长(指标1),花萼宽(指标2),花瓣长(指标3),花瓣宽(指标4)
# 从self.w_[1]到self.w_[4]这四个值是花萼长,花萼宽,花瓣长,花瓣宽这四个指标的权重,即self.w_[1:]
# 定义w_[0]=-θ(θ是阈值),对应指标0(值为1),
# 所以净输入X.dot[w]=  1  *self.w_[0] + np.dot(X, self.w_[1:]) 
        self.errors_ = []#初始化列表,errors_[i]代表第i次迭代的误分类数
        for _ in range(self.n_iter):#最大迭代次数的循环体
            errors = 0#每次迭代开始清零误分类数
            for xi, target in zip(X, y):#遍历X每一行的循环体,一行一行的判断,
#公式 self.w_+=self.eta * (target - self.predict(xi))* xi
#调用predict(xi)方法计算分类标签,注意这里是把数据集的一行传给predict(xi)
                update = self.eta * (target - self.predict(xi))
                self.w_[1:] += update * xi
                self.w_[0] += update #定义w_[0]=-θ(θ是阈值),对应指标0(值为1),就是乘1
                errors += int(update != 0.0)#当分类正确时,
 #update = self.eta * (target - self.predict(xi))=0,取反,即为分类错误的
            self.errors_.append(errors)#将第i次迭代的误分类数记录到列表中
        return self  #返回实例本身,可以实现连续调用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值