我正在自学机器学习,并遇到了以下感知器的签名:
def ClassicPerceptron(W,X,Y,maxiter=1000,reorder=True): """ClassicPerceptron函数实现了最基本的感知器。
这个算法首先会根据reorder是否为True来重新排序训练样本及其标签。
然后,它会对所有样本进行迭代,直到正确分类所有样本,或者迭代次数达到maxiter为止。
参数
----------
W : numpy数组,元素为浮点数
感知器分类器的初始权重集。
X : numpy数组,元素为浮点数
包含偏置的数据集(第一列为1.0)。
Y : numpy数组,元素为浮点数
X每行的标签(-1.0或1.0)。
maxiter : 整数
允许的最大迭代次数。
reorder : 布尔值
是否重新排序训练样本及其标签。
返回值
-------
W : numpy数组,元素为浮点数
感知器分类器的最终权重集。
niter : 整数
成功前的当前迭代次数,或maxiter。
这只是为了了解收敛所需的迭代次数。
"""
我感到好奇,因为这个算法似乎没有遵循权重的更新,我们之前看到的所有算法都使用了权重更新,实际上我对这个定义不太理解,我以为这个重新排序会打乱训练样本的顺序,但我有点迷惑,不知道如何理解这个算法。附注:请不要用代码回复,我只是想要一个解释。
回答:
嗯,我认为,由于你可以传递reorder=False
,重新排序步骤是可选的,所以当它说
然后,它会对所有样本进行迭代,直到正确分类所有样本,或者迭代次数达到maxiter为止。
似乎是在更新/调整权重,直到找到最优解(用超平面分离类别)或达到maxiter
。换句话说,它似乎是尊重权重更新的。
如果你能提供方法实现的话会很有帮助,这样我们就能理解重新排序训练集背后的概念或想法了。
除了这种训练方法之外,还可以通过解决线性系统来计算bias
和weights
,例如:X * W = Y
。其中X
是训练样本加上额外的偏置列,W
是权重数组加上偏置权重,Y
是训练标签。实际上,我最初以为这就是方法的意图。
在这种情况下,重新排序步骤将有助于将矩阵调整为交错形式或获取一个下三角矩阵。两者都使用集合中的d
个样本,其中d
是维度(特征数量加上一个,用于偏置)。
请注意,为了解决这个线性系统,你需要将X * W
的各个结果(即:X
中的一行与W
中的唯一一列)视为1或-1。你可以通过将所有高于阈值的结果视为1来实现这一点。否则,视为-1。