感知机算法学习
感知机算法学习
1.1 感知机模型
1.2 感知机学习策略
1.3 感知机学习算法
1.4 感知机作业例题
首先说明作业是李航编写的统计学习算法P40页,例2.1,题目就不再介绍了,直接附上代码实现内容,ide用的jupyter。
1 # !/usr/bin/python 2 # -*- coding: utf-8 -*- 3 """ 4 @File : Perceptron.ipynb 5 @Time : 2021/09/01 11:08:14 6 @Author : Comp1ex 7 @Version : 1.0 8 @Contact : None 9 @License : (C)Copyright 2021-Forever 10 @Desc : None 11 """ 12 13 import numpy as np 14 class PerceptionMethod(object): # 定义 感知机学习 类 15 ''' 16 __init__为类中的构造函数 17 self为传入的对象实例,就好像java中的对象实例一样 18 ''' 19 20 def __init__(self, X, Y, eta): # 类中参数是 X,Y(X,Y)均为numpy数组,eta,eta是学习率 21 if X.shape[0] != Y.shape[0]: # 要求X,Y中的数目一样,即一个x对应一个y,否则返回错误 22 raise ValueError('Error,X and Y must be same when axis=0 ') 23 else: # 给实例传参 24 self.X = X 25 self.Y = Y 26 self.eta = eta 27 28 def ini_Per(self): # 感知机的原始形式 29 weight = np.zeros(self.X.shape[1]) # 初始化weight,b 30 b = 0 31 number = 0 # 记录训练次数 32 mistake = True # mistake是变量用来说明分类是否有错误 33 while mistake is True: # 当有错时 34 mistake = False # 开始下一轮纠错前需要将mistake变为False,用来判断这一轮是否有错误 35 for index in range(self.X.shape[0]): # 循环开始 36 if self.Y[index] * (weight @ self.X[index] + b) <= 0: # 错误判断条件,@为python中的矩阵乘法运算符,当两者都是向量时为点积运算 37 weight += self.eta * self.Y[index] * self.X[index] # 进行更新weight,b,这里求出来的weight是一个向量 38 b += self.eta * self.Y[index] 39 number += 1 40 print(weight, b) 41 mistake = True # 此轮检查出错误,表明mistake为true,进行下列一轮 42 break # 找出第一个错误后调出循环 43 return weight, b # 返回值
X = np.array([[3, 3], [4, 3], [1, 1]]) Y = np.array([1, 1, -1]) PER = PerceptionMethod(X, Y, 1) print(PER.ini_Per())
输出结果
[3. 3.] 1 [2. 2.] 0 [1. 1.] -1 [0. 0.] -2 [3. 3.] -1 [2. 2.] -2 [1. 1.] -3 (array([1., 1.]), -3)