
以下是一个包含 支持向量机(SVM)算法实现的完整 Python 代码示例。这个代码实现了 SVM 分类任务,并且使用了 sklearn
库来加载数据集、训练模型以及评估模型的性能。为了便于理解,我会将整个过程合并在一起,包括数据加载、模型训练、预测、评估和可视化。
1. 安装依赖
如果你还没有安装 scikit-learn
或 matplotlib
,可以通过以下命令安装它们:
pip install scikit-learn matplotlib
2. 完整代码示例
# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data # 特征数据
y = iris.target # 标签数据
# 切分数据集,70%训练,30%测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建支持向量机分类器
svm_clf = SVC(kernel='linear', random_state=42)
# 训练SVM模型
svm_clf.fit(X_train, y_train)
# 在测试集上做预测
y_pred = svm_clf.predict(X_test)
# 打印预测准确度
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.4f}')
# 可视化支持向量机决策边界 (仅使用前两个特征进行可视化)
# 使用PCA将数据降到2D,以便于可视化
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X)
# 切分降维后的数据
X_train_2d, X_test_2d, y_train, y_test = train_test_split(X_2d, y, test_size=0.3, random_state=42)
# 创建并训练 SVM 分类器
svm_clf_2d = SVC(kernel='linear', random_state=42)
svm_clf_2d.fit(X_train_2d, y_train)
# 创建网格来绘制决策边界
import numpy as np
xx, yy = np.meshgrid(np.linspace(X_2d[:, 0].min(), X_2d[:, 0].max(), 100),
np.linspace(X_2d[:, 1].min(), X_2d[:, 1].max(), 100))
Z = svm_clf_2d.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 绘制决策边界
plt.figure(figsize=(10, 8))
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X_2d[:, 0], X_2d[:, 1], c=y, edgecolors='k', marker='o', cmap=plt.cm.Paired, s=60)
plt.title("SVM Decision Boundary (using first two PCA components)")
plt.xlabel("PCA Component 1")
plt.ylabel("PCA Component 2")
plt.colorbar()
plt.show()
3. 代码解释
数据加载与切分:
- 使用
load_iris()
加载鸢尾花数据集,其中X
是特征矩阵,y
是标签。 - 使用
train_test_split()
将数据集切分为 70% 的训练数据和 30% 的测试数据。
- 使用
SVM 分类器:
- 创建一个支持向量机分类器
SVC
,并指定核函数为linear
(线性核),可以根据需要调整为rbf
等其他核函数。 - 使用
fit()
方法在训练集上训练模型。 - 使用
predict()
方法对测试集进行预测。
- 创建一个支持向量机分类器
模型评估:
- 使用
accuracy_score()
计算预测的准确性并输出。
- 使用
可视化:
- 使用 主成分分析(PCA) 将数据降到 2D,以便可视化。PCA 选择前两个主成分作为新的特征进行降维。
- 创建网格并计算每个点的分类标签,以绘制决策边界。
- 使用
matplotlib
绘制决策边界,并将样本点按类别标记不同的颜色。
4. 可视化效果
代码将展示 SVM 分类器在降维后的数据上的决策边界,决策边界区域的颜色与分类标签对应,而每个样本点则会根据其真实的类别用不同颜色显示。
5. 总结
这段代码展示了如何在 Python 中使用支持向量机(SVM)进行分类任务,并通过可视化的方式帮助理解 SVM 的决策边界。你可以通过更改 kernel
参数尝试不同类型的核函数,如 rbf
(径向基核)或者 poly
(多项式核)等,从而优化模型的表现。