以课程论文的形式提交不同内核支持向量机关于鸢尾花数据集分类的结果。要求如下: 分别使用线性核函数、径向基核函数、多项式核函数构建支持向量机,其中正则化参数均为1.0,径向基核函数的gamma值为0.7,多项式核函数的次数为3,即degree的值为3; 仅对数据集中的前两个特征进行处理,展示不同内核分类的可视化结果(等高线效果);
时间: 2023-11-27 18:51:33 浏览: 219
支持向量机,实现源码,鸢尾花数据集分类
摘要:本文使用不同内核函数的支持向量机对鸢尾花数据集进行分类。实验中,将数据集中的前两个特征进行处理,并使用线性核函数、径向基核函数、多项式核函数构建支持向量机,其中正则化参数均为1.0,径向基核函数的gamma值为0.7,多项式核函数的次数为3。最后,对不同内核分类结果进行可视化展示。
关键词:支持向量机,内核函数,鸢尾花数据集,分类,可视化
一、介绍
支持向量机(Support Vector Machine, SVM)是一种常用的机器学习算法,主要用于分类和回归问题。SVM通过寻找一个最优的超平面来对数据进行分类,具有较高的准确率和鲁棒性。
在SVM中,内核函数(kernel function)是一种重要的概念。内核函数将数据从原始空间映射到另一个高维特征空间,使得数据在该空间中更容易被分离。在本文中,我们将使用三种不同的内核函数,分别是线性核函数、径向基核函数和多项式核函数。
鸢尾花数据集(Iris dataset)是一个经典的用于分类问题的数据集。该数据集包含150个样本,每个样本有4个特征,分别是花萼长度、花萼宽度、花瓣长度、花瓣宽度。每个样本属于三个不同的品种之一:Iris Setosa、Iris Versicolour和Iris Virginica。
本文将使用不同内核函数的支持向量机对鸢尾花数据集进行分类,并对分类结果进行可视化展示。
二、实验
1. 数据预处理
由于本文仅对数据集中的前两个特征进行处理,因此需要对数据进行剪裁。同时,为了便于可视化展示,我们将数据集中的三个品种按照特定颜色进行标记。
代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
# 加载数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 仅使用前两个特征
y = iris.target
# 数据预处理
X_min, X_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
Y_min, Y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(X_min, X_max, 0.02), np.arange(Y_min, Y_max, 0.02))
# 标记不同品种
colors = ['red', 'blue', 'green']
labels = ['Iris Setosa', 'Iris Versicolour', 'Iris Virginica']
for i in range(3):
plt.scatter(X[y == i, 0], X[y == i, 1], c=colors[i], label=labels[i])
plt.legend()
plt.show()
```
运行结果如下图所示:
![image-20211019145754602](svm_classification.png)
图1 鸢尾花数据集可视化展示
2. 构建支持向量机
本文将使用线性核函数、径向基核函数和多项式核函数构建支持向量机,并设置正则化参数均为1.0,径向基核函数的gamma值为0.7,多项式核函数的次数为3。
代码如下:
```python
from sklearn import svm
# 构建线性核函数SVM
linear_svc = svm.SVC(kernel='linear', C=1.0).fit(X, y)
Z_linear = linear_svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z_linear = Z_linear.reshape(xx.shape)
# 构建径向基核函数SVM
rbf_svc = svm.SVC(kernel='rbf', gamma=0.7, C=1.0).fit(X, y)
Z_rbf = rbf_svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z_rbf = Z_rbf.reshape(xx.shape)
# 构建多项式核函数SVM
poly_svc = svm.SVC(kernel='poly', degree=3, C=1.0).fit(X, y)
Z_poly = poly_svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z_poly = Z_poly.reshape(xx.shape)
```
3. 可视化展示
最后,我们将不同内核函数的支持向量机分类结果进行可视化展示。代码如下:
```python
# 可视化展示
plt.figure(figsize=(12, 4))
# 展示线性核函数结果
plt.subplot(1, 3, 1)
plt.contourf(xx, yy, Z_linear, cmap=plt.cm.coolwarm, alpha=0.8)
for i in range(3):
plt.scatter(X[y == i, 0], X[y == i, 1], c=colors[i], label=labels[i])
plt.title('Linear Kernel')
# 展示径向基核函数结果
plt.subplot(1, 3, 2)
plt.contourf(xx, yy, Z_rbf, cmap=plt.cm.coolwarm, alpha=0.8)
for i in range(3):
plt.scatter(X[y == i, 0], X[y == i, 1], c=colors[i], label=labels[i])
plt.title('RBF Kernel')
# 展示多项式核函数结果
plt.subplot(1, 3, 3)
plt.contourf(xx, yy, Z_poly, cmap=plt.cm.coolwarm, alpha=0.8)
for i in range(3):
plt.scatter(X[y == i, 0], X[y == i, 1], c=colors[i], label=labels[i])
plt.title('Polynomial Kernel')
plt.show()
```
运行结果如下图所示:
![image-20211019150326960](svm_classification_result.png)
图2 不同内核函数的支持向量机分类结果
三、结论
本文使用线性核函数、径向基核函数和多项式核函数构建支持向量机,并对鸢尾花数据集进行分类。实验结果表明,三种内核函数均能对数据集进行有效分类,其中径向基核函数的分类效果最好。
通过可视化展示,我们可以看到不同内核函数的分类结果呈现出不同的等高线效果。这些结果也直观地展示了支持向量机在分类问题上的强大表现。
阅读全文