支持向量机加权样本

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习如何在支持向量机(SVM)中绘制加权数据集的决策函数。我们将创建一个考虑样本权重的模型和另一个不考虑样本权重的模型。然后,我们将通过绘制它们的决策函数来比较这两个模型。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

我们将首先导入所需的库。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm

创建数据

我们将创建一个包含 20 个点的数据集,其中前 10 个点属于类别 1,后 10 个点属于类别 -1。

np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10

创建样本权重

我们将创建两组样本权重。第一组样本权重对所有点都是恒定的,第二组样本权重对一些离群点会更大。

sample_weight_last_ten = abs(np.random.randn(len(X)))
sample_weight_constant = np.ones(len(X))
sample_weight_last_ten[15:] *= 5
sample_weight_last_ten[9] *= 15

训练模型

我们将创建两个支持向量机(SVM)模型。第一个模型不考虑样本权重,第二个模型将考虑我们刚刚创建的样本权重。

clf_no_weights = svm.SVC(gamma=1)
clf_no_weights.fit(X, y)

clf_weights = svm.SVC(gamma=1)
clf_weights.fit(X, y, sample_weight=sample_weight_last_ten)

绘制决策函数

我们将绘制刚刚创建的两个模型的决策函数。我们将在左侧绘制第一个模型的决策函数,在右侧绘制第二个模型的决策函数。点的大小将与其权重成正比。

fig, axes = plt.subplots(1, 2, figsize=(14, 6))

xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
Z = clf_no_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

axes[0].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[0].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_constant, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[0].axis("off")
axes[0].set_title("Constant Weights")

Z = clf_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

axes[1].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[1].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_last_ten, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[1].axis("off")
axes[1].set_title("Modified Weights")

plt.show()

总结

在这个实验中,我们学习了如何绘制支持向量机(SVM)中加权数据集的决策函数。我们创建了两个模型,一个考虑样本权重,另一个不考虑样本权重。然后,我们通过绘制它们的决策函数来比较这两个模型。