【问题标题】:Perceptron - AND operator感知器 - AND 运算符
【发布时间】:2020-04-18 20:28:44
【问题描述】:

我使用此代码来实现 AND 运算符,但没有正确计算分隔区域的行。它经过点 [1, 0] 和 [0, 1]。怎样做才能正确区分区域?

from sklearn.linear_model import Perceptron
import matplotlib.pyplot as plt
import numpy as np
from itertools import product

data = [[0,0],[1,0],[0,1],[1,1]]
labels_and = [0, 0, 0, 1]

x = [points[0] for points in data]
y = [points[1] for points in data]

plt.scatter(x, y, c = labels_and)
plt.show()

classifier = Perceptron()
classifier.fit(data, labels_and)

print(classifier.score(data, labels_and))

result = classifier.decision_function([[0, 0], [1, 1], [0.5, 0.5]])
print(result)

x_values = y_values = np.linspace(0, 1, 100)
point_grid = list(product(x_values, y_values))
distances = classifier.decision_function(point_grid)
abs_distance = [abs(x) for x in distances]

distance_matrix = np.reshape(abs_distance, (100, 100))

heatmap = plt.pcolormesh(x_values, y_values, distance_matrix)
plt.colorbar(heatmap)
plt.show()

Screenshot here

【问题讨论】:

    标签: python perceptron


    【解决方案1】:

    决策边界是正确的,因为 > 的所有内容都归类为 1 类,<= 的所有内容都归为 0 类。 但是,您将分类器预测结果的绝对值可视化的方式可能具有误导性?


    sklearn 文档参考英文 wiki 文章,该文章使用以下感知器定义:

    由于唯一的 1 类标签是点(1,1),因此我们可以选择右上角即w = [2,2]b=-2 来正确分类(1,1) as 1(0,0), (0,1), (1,0) as 0

    点 (1,0) 和 (0,1) 将位于自 2*0+2*1-2 =0 以来的决策边界上。但是我们也可以选择b=-3,我们的分类问题仍然可以正确解决。不同之处在于点 (1,0) 和 (0,1) 不再直接位于边界上,因为 2*0+2*1-3 <0

    让我们看看我们训练有素的感知器学到了哪些参数!要访问它们,您可以通过sklearn docs

    查看
    w = classifier.coef_[0]  
    b = classifier.intercept_   
    

    如果您打印它们,您可能会获得w=[2,2]b=-2。要导出代表相应决策边界的线,您可以考虑w0*x + w1*y + b == 0 并求解 x 的边缘情况。您将获得:

    所以绘制它会导致这样的结果:

    m = -weight[0]/weight[1]   
    n = -b/weight[1]    
    plt.plot(x_values, m*x_values+n)   
    

    这是您在图片中看到的深蓝色山谷。我们的点 (1,0) 和 (0,1) 也位于边界上。您可以使用b=-3 来获得一条具有更高 y 截距的线,这可能是您所期望的?

    【讨论】:

    • 感谢您的详细说明,您的回答帮助我更好地理解。你是对的,我期待获得更高的 y 截距线,因为我在一些示例中看到了它。我的截距是b = - 2,当我将random_state 更改为默认不为零的某个值时,截距和权重得到了不同的结果。
    【解决方案2】:

    决策边界计算正确,但我预计它会有所不同。这在@v.tralala 对这个问题的回答中得到了彻底的解释。同时我发现如果random_state 被赋予非零值(例如random_state = 100),则会计算不同的截距和权重值,因此决策边界将更接近点(1,1)。 enter image description here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-16
      • 2017-12-14
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多