、题目一:采用 scikit-learn 中的线性 SVM 对 iris 数据集进行二分类。 具体内容: (1)选取两个特征和两类数据使用 scikit-learn 中的 SVM 进行二分类。 (2)输出:决策边界的参数和截距、支持向量等。 (3)可视化:通过散点图可视化数据样本(之前选择的两个特征),并画出决策边界和 2 个最 大间隔边界,标出支持向量,用pycharm写,用IPython解释器
时间: 2024-02-22 18:56:28 浏览: 117
好的,我理解了您的问题。下面是答案:
首先,需要导入 iris 数据集和 SVM 模型:
```python
from sklearn import datasets
from sklearn import svm
import matplotlib.pyplot as plt
iris = datasets.load_iris()
X = iris.data[:, 2:4] # 选取 petal length 和 petal width 两个特征
y = iris.target
```
然后,使用 SVM 进行训练并输出决策边界的参数和截距、支持向量等:
```python
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X, y)
print('Coefficients:', clf.coef_)
print('Intercept:', clf.intercept_)
print('Support Vectors:', clf.support_vectors_)
```
最后,可视化数据样本和决策边界:
```python
# 画出数据样本
plt.scatter(X[:, 0], X[:, 1], c=y)
# 画出决策边界和最大间隔边界
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(2, 8)
yy = a * xx - (clf.intercept_[0]) / w[1]
plt.plot(xx, yy, 'k-')
yy_down = a * xx + (clf.intercept_[0] - 1) / w[1]
yy_up = a * xx + (clf.intercept_[0] + 1) / w[1]
plt.plot(xx, yy_down, 'k--')
plt.plot(xx, yy_up, 'k--')
# 标出支持向量
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,
linewidth=1, facecolors='none', edgecolors='k')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.show()
```
完整代码如下:
阅读全文