感知机算法学习

感知机算法学习

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)

 

 

posted @ 2021-09-01 15:00  wugeshenhuaking  阅读(155)  评论(0)    收藏  举报