首先导入相应的模块,
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()
可以看到一个环形的散点图就被创建完毕。接下来我们使用下面的代码块来绘制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()
可以看到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()
我们可以通过调节elev参数去调整垂直方向的观察角度,调节zaim参数调节水平方向的观察角度。