标签:stand tar line 布尔 cep imp pac soft lis
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets iris = datasets.load_iris() X = iris.data y = iris.target X = X[y<2, :2] y = y[y<2] plt.scatter(X[y==0, 0], X[y==0, 1], color=‘red‘) plt.scatter(X[y==1, 0], X[y==1, 1], color=‘blue‘) plt.show()
from sklearn.preprocessing import StandardScaler standardScaler = StandardScaler() standardScaler.fit(X) X_standard = standardScaler.transform(X)
from sklearn.svm import LinearSVC svc = LinearSVC(C=10**9) svc.fit(X_standard, y)
def plot_decision_boundary(model, axis): x0, x1 = np.meshgrid( np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1), np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1) ) X_new = np.c_[x0.ravel(), x1.ravel()] y_predict = model.predict(X_new) zz = y_predict.reshape(x0.shape) from matplotlib.colors import ListedColormap custom_cmap = ListedColormap([‘#EF9A9A‘,‘#FFF59D‘,‘#90CAF9‘]) plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap) plot_decision_boundary(svc, axis=[-3, 3, -3, 3]) plt.scatter(X_standard[y==0, 0], X_standard[y==0, 1], color=‘red‘) plt.scatter(X_standard[y==1, 0], X_standard[y==1, 1], color=‘blue‘) plt.show()
svc2 = LinearSVC(C=0.01) svc2.fit(X_standard, y) plot_decision_boundary(svc2, axis=[-3, 3, -3, 3]) plt.scatter(X_standard[y==0, 0], X_standard[y==0, 1], color=‘red‘) plt.scatter(X_standard[y==1, 0], X_standard[y==1, 1], color=‘blue‘) plt.show()
# 绘制:决策边界、支撑向量所在的直线 def plot_svc_decision_boundary(model, axis): x0, x1 = np.meshgrid( np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1), np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1) ) X_new = np.c_[x0.ravel(), x1.ravel()] y_predict = model.predict(X_new) zz = y_predict.reshape(x0.shape) from matplotlib.colors import ListedColormap custom_cmap = ListedColormap([‘#EF9A9A‘,‘#FFF59D‘,‘#90CAF9‘]) plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap) w = model.coef_[0] b = model.intercept_[0] plot_x = np.linspace(axis[0], axis[1], 200) up_y = -w[0]/w[1] * plot_x - b/w[1] + 1/w[1] down_y = -w[0]/w[1] * plot_x - b/w[1] - 1/w[1] # 将 plot_x 与 up_y、down_y 的关系以折线图的形式表示出来 # 此处有一个问题:up_y和down_y的结果可能超过了 axis 中 y 坐标的范围,需要添加一个过滤条件: # up_index:布尔向量,元素 True 表示,up_y 中的满足 axis 中的 y 的范围的值在 up_y 中的引索; # down_index:布尔向量,同理 up_index; up_index = (up_y >= axis[2]) & (up_y <= axis[3]) down_index = (down_y >= axis[2]) & (down_y <= axis[3]) plt.plot(plot_x[up_index], up_y[up_index], color=‘black‘) plt.plot(plot_x[down_index], down_y[down_index], color=‘black‘)
plot_svc_decision_boundary(svc, axis=[-3, 3, -3, 3]) plt.scatter(X_standard[y==0, 0], X_standard[y==0, 1], color=‘red‘) plt.scatter(X_standard[y==1, 0], X_standard[y==1, 1], color=‘blue‘) plt.show()
plot_svc_decision_boundary(svc2, axis=[-3, 3, -3, 3]) plt.scatter(X_standard[y==0, 0], X_standard[y==0, 1], color=‘red‘) plt.scatter(X_standard[y==1, 0], X_standard[y==1, 1], color=‘blue‘) plt.show()
机器学习:SVM(scikit-learn 中的 SVM:LinearSVC)
标签:stand tar line 布尔 cep imp pac soft lis
原文地址:https://www.cnblogs.com/volcao/p/9464009.html