题目一:采用 scikit-learn 中的线性 SVM 对 iris 数据集进行二分类。 具体内容: (1)选取两个特征和两类数据使用 scikit-learn 中的 SVM 进行二分类。 (2)输出:决策边界的参数和截距、支持向量等。 (3)可视化:通过散点图可视化数据样本(之前选择的两个特征),并画出决策边界和 2 个最 大间隔边界,标出支持向量
时间: 2024-02-19 20:03:29 浏览: 114
好的,我来给您讲解一下如何实现这个任务。
首先,我们需要加载iris数据集,选取其中两个特征(sepal length和petal length),并将数据集分为两类(iris setosa和iris versicolor)。可以使用如下代码实现:
```python
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:, [0, 2]] # 取 sepal length 和 petal length 两个特征
y = iris.target
X = X[y != 2] # 只选取 iris setosa 和 iris versicolor 两类
y = y[y != 2]
```
接下来,我们可以使用scikit-learn中的SVM模型进行建模。在这里,我们选择使用线性SVM,可以使用LinearSVC类来实现。代码如下:
```python
from sklearn.svm import LinearSVC
svm = LinearSVC()
svm.fit(X, y)
```
训练完成后,我们可以输出决策边界的参数和截距、支持向量等。代码如下:
```python
print("决策边界的参数:", svm.coef_)
print("决策边界的截距:", svm.intercept_)
print("支持向量:", svm.support_)
print("支持向量的个数:", svm.n_support_)
```
最后,我们可以通过散点图可视化数据样本,并画出决策边界和2个最大间隔边界,标出支持向量。代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=y)
# 绘制决策边界和最大间隔边界
w = svm.coef_[0]
b = svm.intercept_[0]
x0 = np.linspace(4, 7, 100)
decision_boundary = -w[0]/w[1] * x0 - b/w[1]
margin = 1/w[1]
gutter_up = decision_boundary + margin
gutter_down = decision_boundary - margin
# 绘制决策边界、最大间隔边界和支持向量
svs = svm.support_vectors_
plt.plot(x0, decision_boundary, "k-", linewidth=2)
plt.plot(x0, gutter_up, "k--", linewidth=2)
plt.plot(x0, gutter_down, "k--", linewidth=2)
plt.scatter(svs[:, 0], svs[:, 1], s=180, facecolors="#FFAAAA")
plt.xlabel("Sepal length")
plt.ylabel("Petal length")
plt.show()
```
这样,我们就完成了对iris数据集进行二分类的任务,并且可视化了决策边界和支持向量。
阅读全文