这个是一本书上的线性SVM算法在blobs数据集的三个二分类器的分类直线的可视化代码,可以看到在画直线时y=-(x*w[0]+b)/w[1],这是为什么,线性SVM的分类置信方程不是y=w[0]*x[0]+w[1]*x[1]+b吗?求解答
import mglearn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.datasets import make_blobs
if __name__ == '__main__':
X, y = make_blobs(random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
linear_svm = LinearSVC().fit(X_train, y_train)
'''画数据点'''
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
'''画三个二分类器的直线'''
line = np.linspace(-15, 15)
for coef, intercept, color in zip(linear_svm.coef_, linear_svm.intercept_, ['b', 'r', 'g']):
'''为什么y=-(x*w[0]+b)/w[1],分类置信方程不是y=w[0]*x[0]+w[1]*x[1]+b吗??'''
plt.plot(line, -(line*coef[0]+intercept)/coef[1], c=color)
'''绘图设置'''
plt.ylim(-10, 15)
plt.xlim(-10, 8)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")
plt.legend(['Class 0', 'Class 1', 'Class 2', 'Lineclass 0', 'Lineclass 1', 'Lineclass 2'], loc=(1.01, 0.3))
plt.show()