支持向量机:Python错误信息

我对机器学习相对来说还是个新手,决定先研究一些理论,然后再用代码进行实践。在这个过程中,我遇到了很多错误信息,大多数我都设法解决了,但这个错误让我迷茫。我对Python也相对比较新手,所以我确定这是一个与语法相关的错误,但这次我没能找出具体问题(Python 2.7.15)。以下是完整的代码:

但我一直收到以下错误信息:

Traceback (most recent call last): File “C:\Users…\Support Vector Machine (from scratch).py”, line 134, in x2=[ w[0],w[1],-w[1],w[0] ] NameError: name ‘w’ is not defined

希望有更有经验的人能帮我解决。谢谢。


回答:

首先,你在方法svm_sgd_plot中定义了w,但该方法在你明确调用它之前不会执行任何操作。

你可以通过添加一行w = svm_sgd_plot(X,Y)来调用它,例如在绘制测试数据之后,这样你的代码就会变成

#绘制训练数据for d, sample in enumerate(X):    # 绘制负样本if d < 2:    plt.scatter(sample[0], sample[1], s=120, marker='_', linewidths=2)    # 绘制正样本else:    plt.scatter(sample[0], sample[1], s=120, marker='+', linewidths=2)#绘制测试数据# 添加我们的测试样本plt.scatter(2,2, s=120, marker='_', linewidths=2, color='yellow')plt.scatter(4,3, s=120, marker='+', linewidths=2, color='blue')plt.show()#调用你的方法w = svm_sgd_plot(X,Y)

然后你只需要可视化你的方法提供的分类。我添加了你的两个测试数据观察点,以便你可以看到你的SVM方法如何正确地对它们进行分类。注意,黄色点和蓝色点被你的SVM方法生成的线分隔开来。

# 打印由svm_sgd()计算出的超平面x2=[ w[0],w[1],-w[1],w[0] ]x3=[ w[0],w[1],w[1],-w[0] ]x2x3 = np.array([x2,x3])X,Y,U,V = zip(*x2x3)ax = plt.gca()ax.quiver(X,Y,U,V,scale=1, color='blue')#我添加了以下三行,以便你可以看到你的SVM方法如何对测试数据进行分类plt.scatter(2,2, s=120, marker='_', linewidths=2, color='yellow')plt.scatter(4,3, s=120, marker='+', linewidths=2, color='blue')plt.show()

enter image description here

Related Posts

关于k折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注