如何使用线性感知器中的权重向量绘制一条线? [关闭]
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 值。这导致两个点使用内置的绘图命令来绘制一条线。
【讨论】:
以上是关于如何使用线性感知器中的权重向量绘制一条线? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章