感知器中的误分类错误

时间:2016-10-30 14:06:29

标签: python numpy machine-learning classification perceptron

我正在使用Python和Numpy实现感知器。我正在使用this Wikipedia article中描述的算法进行训练,但得到的权重向量不能正确地对样本向量进行分类,甚至不能对训练集进行分类。

我写的这个训练代码:

epochs = 50
unit_step = lambda x: 0 if x < center else (0.5 if x == center else 1)

def train(data_set, labels):
    number_of_samples, dimension = data_set.shape

    # Generate the augmented data set, adding a column of '1's
    augmented_data_set = np.ones((number_of_samples, dimension + 1))
    augmented_data_set[:,:-1] = data_set

    w = 1e-6 * np.random.rand(dimension + 1)

    for _ in xrange(epochs):
        for sample, target in zip(augmented_data_set, labels):
            predicted_output = unit_step(np.dot(w, sample))
            update = (target - predicted_output) * sample
            w += update

    return w

在此之后,我将训练集设置为必要的向量,以学习AND逻辑函数:

training_set = np.array([[0,0],[0,1],[1,0],[1,1]])

及其对应的类标签为:

labels = np.array([-1,-1,-1,1])

其中-1表示False,1表示True。

运行w = train(training_set, labels)后,我测试了生成的权重向量,得到了错误的结果:

  • np.dot(w, [0,0,1]) = -1.0099996334232431
  • np.dot(w, [0,1,1]) = -1.0099991616719257
  • np.dot(w, [1,0,1]) = -1.009999277692496
  • np.dot(w, [1,0,1]) = -1.009999277692496

这里的错误是最后一个案例应该返回一个大于0且接近1的值。我无法清楚地看到这里发生了什么。我错过了什么?

提前致谢

1 个答案:

答案 0 :(得分:0)

最明显的错误是训练集标签(-1和1)与模型输出(0,0.5和1.0)之间缺乏统一。将两者都更改为0和1。