使用SVM算法实现鸾尾花识别功能
时间: 2024-05-05 13:21:35 浏览: 207
实现svm对鸢尾花进行分类
鸢尾花识别问题是一个分类问题,可以使用SVM算法来解决。下面是使用Python和Scikit-learn库实现鸢尾花识别的SVM算法示例代码:
首先导入需要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
```
然后加载鸢尾花数据集:
```python
iris = datasets.load_iris()
X = iris.data[:, :2] # 取前两个特征
y = iris.target
```
将数据集分为训练集和测试集:
```python
# 随机打乱数据集
np.random.seed(0)
indices = np.random.permutation(len(X))
X_train = X[indices[:-10]]
y_train = y[indices[:-10]]
X_test = X[indices[-10:]]
y_test = y[indices[-10:]]
```
创建SVM分类器并训练:
```python
# 创建SVM分类器
C = 1.0 # SVM正则化参数
svc = svm.SVC(kernel='linear', C=C).fit(X_train, y_train)
```
预测测试集并计算准确率:
```python
# 预测测试集
y_pred = svc.predict(X_test)
print("Accuracy:", np.sum(y_pred == y_test) / len(y_test))
```
最后,我们可以将数据点和决策边界可视化:
```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.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
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算法实现鸢尾花识别的过程。
阅读全文