工商注册深圳,google关键词seo,辽宁建设工程信息网怎么报名,网站 自适应js前言
前面几篇博客对SVM的原理以及决策边界和损失函数是怎么来的做了详细的说明,下面希望用代码来可视化这个过程。
标题
数据集
这里通过make_blobs这个聚类数据生成器来生成数据。
关于make_blobs参数: n_samples:生成的样本的总数 n_…
前言
前面几篇博客对SVM的原理以及决策边界和损失函数是怎么来的做了详细的说明,下面希望用代码来可视化这个过程。
标题
- 数据集
这里通过make_blobs这个聚类数据生成器来生成数据。
关于make_blobs参数:
n_samples:生成的样本的总数
n_features:每个样本的特征数
centers:类别数(簇个数)
cluster_std:每个簇的方差
# 50个样本,每个样本特征数为2,2个类别
X, y = make_blobs(n_samples=50, n_features=2, centers=2, random_state=0, cluster_std=0.6)
- 绘制样本点
将二维特征,一个特征作为横坐标,一个作为纵坐标,类别用不同颜色来区分
plt.scatter(X[:, 0], X[:, 1], c=y, s=80, cmap='coolwarm')
plt.show()
效果图:
- 完整代码
from sklearn.datasets import make_blobs
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np# 制作数据集
# 50个样本,每个样本特征数为2
X, y = make_blobs(n_samples=50, n_features=2, centers=2, random_state=0, cluster_std=0.6)
# 绘制样本点
plt.scatter(X[:, 0], X[:, 1], c=y, s=80, cmap='coolwarm')ax = plt.gca() # 获取当前子图
xlim = ax.get_xlim()
ylim = ax.get_ylim()
axisx = np.linspace(xlim[0], xlim[1], 30)
axisy = np.linspace(ylim[0], ylim[1], 30)
axisy, axisx = np.meshgrid(axisy, axisx)
xy = np.vstack([axisx.ravel(), axisy.ravel()]).T
# print(xy.shape)
# plt.scatter(xy[:, 0], xy[:, 1], s=1, cmap='coolwarm')# 建模
clf = SVC(kernel="linear").fit(X, y)
Z = clf.decision_function(xy).reshape(axisx.shape)
# 绘制决策边界和平行于它的两个超平面
# 虚线 实线(决策边界) 虚线
ax.contour(axisx, axisy,Z, colors="k",levels=[-1, 0, 1], alpha=0.5,linestyles=["--", "-", "--"])
ax.set_xlim(xlim)
ax.set_ylim(ylim)
plt.show()
效果图:
meshgrid和vstack
关于上述代码中的meshgrid和vstack,以一个小例子来说明其作用:
import numpy as np
"""meshgrid和vstack"""
"""
meshgrid把两个特征向量其中一个作横坐标,
另一个作纵坐标,组合成坐标点,这些坐标点可以用来画图
"""
m = np.array([1, 2, 3])
n = np.array([7, 9])
# m和n组合,有6个坐标
# (1, 7)(1, 9)(2, 7)(2, 9)(3, 7)(3, 9)
x, y = np.meshgrid(m, n)
print("x = ", x)
print("y = ", y)
print(x.ravel()) # 降维
print(y.ravel())
xy = np.vstack([x.ravel(), y.ravel()]).T
print(xy)
输出结果:
x = [[1 2 3][1 2 3]]
y = [[7 7 7][9 9 9]]
[1 2 3 1 2 3]
[7 7 7 9 9 9]
[[1 7][2 7][3 7][1 9][2 9][3 9]]
meshgrid就是把两个特征向量其中一个作横坐标,另一个作纵坐标,组合成坐标点,用这些坐标点来画图。