感知器算法是一个简单的二分算法,相当于signoid函数的应用?
具体原理参考下文:感知器学习
以下代码来自书中2.2节,付我的注释理解:
1. 定义感知算法
eta:即 η \eta η ,学习率
n_iter: 初始迭代次数
random_state:随机生成的权重
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
class Perceptron(object):
def __init__(self, eta=0.01, n_iter=50, random_state=1):
"""初始化,为学习率、迭代次数和权重赋初值"""
self.eta = eta
self.n_iter = n_iter
self.random_state = random_state
def fit(self, X, y):
rgen = np.random.RandomState(self.random_state)
# 伪随机数生成,产生一个随机状态种子
#rdm = numpy.random.RandomState(seed=None),seed应该是种子编号,跟生成随机数没有关系,例如1号种子,2号种子等等。
rdm = numpy.random.RandomState(seed=1)
self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1 + X.shape[1])
#0为均值,0.01为标准差的正态分布,规模是X的列数(样品特征数)+1 加一是因为有一个偏置
self.errors_ = []
for _ in range(self.n_iter):#表示即将进行n_iter次循环,n_iter已经设定好了是训练次数
errors = 0
for xi, target in zip(X, y):
#zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同。
#xi表示一个数组,这