加载iris数据集,拟合SVM
时间: 2023-11-25 08:08:06 浏览: 30
好的,让我们来加载Iris数据集,使用Scikit-learn库中的SVM进行拟合。
首先,我们需要导入所需的库和数据集。请确保已经安装了Scikit-learn库。
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
```
现在,我们可以使用Scikit-learn库中的函数来加载Iris数据集。
```python
iris = datasets.load_iris()
```
接下来,我们需要将数据集中的数据和标签分开,以便我们可以将其用于SVM的拟合。在这里,我们将使用前两个特征作为数据,并将前100个样本作为训练集。
```python
X = iris.data[:, :2]
y = iris.target[:100]
```
现在,我们可以创建一个SVM对象,并使用训练数据进行拟合。
```python
svc = svm.SVC(kernel='linear', C=1, gamma=1)
svc.fit(X, y)
```
最后,我们可以使用拟合的模型对数据进行预测,并将结果可视化。
```python
# 生成网格点
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的决策边界。
完整的代码如下所示:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
# 加载Iris数据集
iris = datasets.load_iris()
# 获取数据和标签
X = iris.data[:, :2]
y = iris.target[:100]
# 创建SVM对象并拟合
svc = svm.SVC(kernel='linear', C=1, gamma=1)
svc.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()
```