如何对非线性【SVM】进行三维可视化

首先导入相应的模块,

from sklearn.datasets import make_blobs
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np

我们使用make_circles()函数创建散点图,并将散点图中的点的横纵坐标赋值给x,y,其中x是特征矩阵,y是标签:

from sklearn.datasets import make_circles
X,y = make_circles(100, factor=0.1, noise=.1,random_state=42) # 100个样本,factor=0.1表示内外圈之间的距离,noise表示噪声
X.shape
y.shape
plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap="rainbow")
plt.show()

如何对非线性【SVM】进行三维可视化_第1张图片

可以看到一个环形的散点图就被创建完毕。接下来我们使用下面的代码块来绘制3D图:

r = np.exp(-(X**2).sum(1)) # 二维数据,先对每个样本求平方,然后按行求和,再取负指数
 
rlim = np.linspace(min(r),max(r),100) # 生成100个等差数列
 
from mpl_toolkits import mplot3d
 
#定义一个绘制三维图像的函数
#elev表示上下旋转的角度
#azim表示平行旋转的角度
def plot_3D(elev=30,azim=30,X=X,y=y):
    ax = plt.subplot(projection="3d")
    ax.scatter3D(X[:,0],X[:,1],r,c=y,s=50,cmap='rainbow') # 
    ax.view_init(elev=elev,azim=azim)
    ax.set_xlabel("x")
    ax.set_ylabel("y")
    ax.set_zlabel("r")
    plt.show()
    
plot_3D()

如何对非线性【SVM】进行三维可视化_第2张图片

可以看到3D图被我们绘制出来了。但是我们还可以通过运行下述代码绘制可以调节角度的图:

from ipywidgets import interact,fixed
interact(plot_3D,elev=[0,30,60,90,120],azip=(-180,180),X=fixed(X),y=fixed(y))
plt.show()

如何对非线性【SVM】进行三维可视化_第3张图片如何对非线性【SVM】进行三维可视化_第4张图片

如何对非线性【SVM】进行三维可视化_第5张图片

如何对非线性【SVM】进行三维可视化_第6张图片

我们可以通过调节elev参数去调整垂直方向的观察角度,调节zaim参数调节水平方向的观察角度。

你可能感兴趣的:(支持向量机,算法,机器学习)