如何使用线性感知器中的权重向量绘制一条线? [关闭]

Posted

技术标签:

【中文标题】如何使用线性感知器中的权重向量绘制一条线? [关闭]【英文标题】:How do you draw a line using the weight vector in a Linear Perceptron? [closed] 【发布时间】:2015-09-26 08:20:12 【问题描述】:

我了解以下内容:

在二维空间中,每个数据点都有 2 个特征:x 和 y。 二维空间中的权重向量包含 3 个值 [bias, w0, w1],可以重写为 [w0,w1,w2]。 每个数据点都需要一个人工坐标 [1, x, y] 来计算它与权重向量之间的点积。

用于更新每个错误分类点的权重向量的学习规则是 w := w + yn * xn

我的问题是:如何从权重向量 w = [A, B, C] 中导出两个点以绘制决策边界?

我知道 A + Bx + Cy = 0 是一般形式的线性方程(A、B、C 可以从权重向量中获取),但我不知道如何绘制它。

提前致谢。

【问题讨论】:

这个问题之前被问过,例如stats.stackexchange.com/questions/71335/… 我投票决定将此问题作为离题结束,因为它似乎与编程无关,更适合Cross Validated。 【参考方案1】:

最近我试图实现同样的事情,但是太困惑如何用三个权重 $w_0,w_1,w_2$ 绘制决策边界图。并且基于上面提到的@Joshu解决方案,我编写了matplotlib代码来绘制边界线。

def plot_data(self,inputs,targets,weights):
    # fig config
    plt.figure(figsize=(10,6))
    plt.grid(True)

    #plot input samples(2D data points) and i have two classes. 
    #one is +1 and second one is -1, so it red color for +1 and blue color for -1
    for input,target in zip(inputs,targets):
        plt.plot(input[0],input[1],'ro' if (target == 1.0) else 'bo')

    # Here i am calculating slope and intercept with given three weights
    for i in np.linspace(np.amin(inputs[:,:1]),np.amax(inputs[:,:1])):
        slope = -(weights[0]/weights[2])/(weights[0]/weights[1])  
        intercept = -weights[0]/weights[2]

        #y =mx+c, m is slope and c is intercept
        y = (slope*i) + intercept
        plt.plot(i, y,'ko')

【讨论】:

【参考方案2】:

将您的权重代入一般形式 (w0 + w1x + w2y = 0) 并求解 x, x=0, y, y=0:

x = -(w0 - w2y)/w1  
x = 0 when y = -w0/w2  
y = -(w0 - w1x)/w2  
y = 0 when x = -w0/w1  

现在我们在线上有两个点:(0, -w0/w2) 和 (-w0/w1, 0)

slope = -(w0/w2)/(w0/w1)  
intercept = -w0/w2

【讨论】:

这对我很有用。我正在设计一个简单的感知器,它有两个输入和一个用于偏置的输入,所以在训练后我得到了 3 个权重,w0、w1、w2,而 w0 就是偏置。我在上面的斜率、截距公式中插入了值,它很好地为我的样本数据点绘制了决策边界。谢谢。【参考方案3】:

画线的最佳方法是在显示轴上找到最小 x 值和最大 x 值。使用已知的线性方程 (-(A+BX)/C) 计算 y 值。这导致两个点使用内置的绘图命令来绘制一条线。

【讨论】:

以上是关于如何使用线性感知器中的权重向量绘制一条线? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R Plotly 中用颜色向量绘制一条线

关于感知机的一些问题

机器学习中感知器算法中的权重向量

支持向量机在 R语言中的实现和使用

多层感知器,在 Python 中可视化决策边界 (2D)

如何使用 Cairo 和 Gtk3 在 GtkDrawingArea 中绘制一条线