SVM 分类器的分类超平面的绘制

这里写图片描述

0.库的导入

# Load libraries
from sklearn.svm import LinearSVC
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
import numpy as np
from matplotlib import pyplot as plt

1.加载IrisFlower 数据集

# Iris flower 数据集有三个类别,四个特征
# 这里只导入两个类别和两个特征的数据
iris = datasets.load_iris()
X = iris.data[:100,:2]
y = iris.target[:100]

2.特征标准化

# Standarize features
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

3.训练支持向量分类器

# Create support vector classifier
svc = LinearSVC(C=1.0)

# Train model
model = svc.fit(X_std, y)

4.绘制决策边界超平面

所有类别 0 为黑色,类别1 为浅灰色

超平面是决定新的观察值分类结果的决策边界

这条线上的划分为类别0,这条线下的划分为类别1

# 绘制数据点,不同类别不同颜色
color = ['black' if c == 0 else 'lightgrey' for c in y]
plt.scatter(X_std[:,0], X_std[:,1], c=color)

# 创建超平面(根据SVC的参数,求出直线的斜率与截距)
w = svc.coef_[0]
a = - w[0]/w[1]
xx = np.linspace(-2.5, 2.5)
yy = a * xx - (svc.intercept_[0])/w[1]

# Plot the hyperplane
plt.plot(xx, yy)
plt.axis("off"), plt.show();

output

5.说明

翻译自ChrisAlbon的博客
原文地址

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SVM(Support Vector Machine)是一种二分类模型,它的目标是找到一个最优的平面,把数据集分成两类。在Python中,可以使用scikit-learn库中的SVM模块实现SVM分类。下面是一个使用SVM分类进行鸢尾花数据集分类的示例代码: ```python from sklearn import svm, datasets import matplotlib.pyplot as plt # 导入数据集 iris = datasets.load_iris() X = iris.data[:, :2] # 只取前两个特征 y = iris.target # 训练SVM分类 C = 1.0 # SVM正则化参数 svc = svm.SVC(kernel='linear', C=C).fit(X, y) # 绘制决策边界 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02)) Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) # 将结果可视化 Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm) plt.xlabel('Sepal length') plt.ylabel('Sepal width') plt.xlim(xx.min(), xx.max()) plt.ylim(yy.min(), yy.max()) plt.xticks(()) plt.yticks(()) plt.show() ``` 这段代码导入鸢尾花数据集,提取前两个特征,使用线性核函数训练SVM分类,并将结果可视化。如果你需要使用其他核函数,比如高斯核函数,可以在SVC()函数的参数中设置kernel='rbf'。 ### 回答2: Python SVM分类是一种基于支持向量机(Support Vector Machine)算法的分类SVM算法是一种监督式学习算法,用于处理分类和回归问题。 SVM通过将数据映射到高维空间中,找到一个平面,将不同类别的数据分开。在这个过程中,SVM会找到一些支持向量,这些支持向量是离平面最近的数据点。支持向量可以帮助我们确定分类的边界,并对新的数据点进行分类。 在使用Python SVM分类时,首先需要导入相应的库,例如sklearn.svm。然后我们可以创建一个SVM分类的对象,通过设置不同的参数来调整分类的性能。 常用的参数包括C(正则化参数,控制模型的复杂度)、kernel(核函数,用于将数据映射到高维空间)、gamma(核函数的系数,影响数据点与平面之间的距离)等。 接下来,我们可以使用fit方法拟合训练数据,并使用predict方法对新的数据进行分类。在进行分类之前,需要对数据进行预处理,例如特征缩放(feature scaling)等。 除了二分类问题,Python SVM分类还可以用于多分类问题。常见的方法是一对一(one-vs-one)和一对多(one-vs-rest)方法。 在使用Python SVM分类之前,我们还可以使用交叉验证等技术来评估模型的性能,并进行参数调优,以提高分类的准确性。 总结来说,Python SVM分类是一种强大的分类,可以处理不同的分类问题。它通过寻找支持向量和平面来实现分类,并可通过调整参数来提高性能。 ### 回答3: Python中的支持向量机(Support Vector Machine,SVM分类是一种常用的机学习算法,用于进行二分类任务。SVM通过找到一个最优的平面来将不同类别的样本分开,使得不同类别的样本距离平面的间隔最大化。下面是关于Python中SVM分类的几个方面的介绍。 首先,要使用SVM分类,我们需要安装并导入相应的Python库,如Scikit-learn(sklearn)库。Sklearn库提供了一个SVM分类的实现,可以直接使用。 其次,我们需要准备好用于训练SVM分类的数据集。数据集通常由输入特征和对应的类别标签组成。我们可以使用NumPy库加载数据集,并将其拆分为训练集和测试集。 然后,我们可以创建SVM分类的实例。在Sklearn库中,svm模块下的SVC类可以用于创建SVM分类对象。我们可以指定不同的参数来调整SVM分类的行为,如核函数类型、正则化参数等。 接下来,我们可以使用训练数据对SVM分类进行训练。通过调用创建的SVM分类对象的fit()方法,并传入训练集的输入特征和对应的类别标签,可以训练模型。 最后,我们可以使用训练好的SVM分类对测试数据进行预测。通过调用创建的SVM分类对象的predict()方法,并传入测试集的输入特征,可以获取预测的类别标签。 除了以上介绍的基本使用方法,Sklearn库中的SVM分类还提供了其他功能,如支持多分类问题、提供不同的核函数选择等。 通过以上步骤,我们可以使用Python中的SVM分类进行二分类任务的训练和预测。当然,在实际应用中,我们还需要进行数据的预处理、参数的调优等工作,以获得更好的分类结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值