Python实现SVM:详解代码及注释249
支持向量机 (Support Vector Machine, SVM) 是一种强大的监督学习算法,广泛应用于分类和回归问题。 Python 提供了多种库来实现 SVM,其中最常用的是 scikit-learn (sklearn)。本文将详细讲解如何使用 sklearn 实现 SVM,并对代码进行详细注释,帮助读者理解其工作原理和使用方法。
我们将从一个简单的例子开始,逐步介绍 SVM 的不同参数和使用方法。我们将使用 sklearn 内置的鸢尾花数据集进行演示。该数据集包含三个不同品种的鸢尾花,每个品种具有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。我们的目标是训练一个 SVM 模型来根据这四个特征预测鸢尾花的品种。
首先,我们需要导入必要的库:```python
import numpy as np
import as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from import SVC
from import accuracy_score, classification_report, confusion_matrix
```
接下来,我们加载鸢尾花数据集:```python
iris = datasets.load_iris()
X = [:, :2] # 使用前两个特征简化问题,方便可视化
y =
```
这里我们只使用了前两个特征 (萼片长度和萼片宽度) 来简化问题,并使其更容易可视化。 你可以根据需要使用所有四个特征。
然后,我们将数据集分割成训练集和测试集:```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
```
test_size=0.3 表示测试集占总数据集的 30%,random_state=0 用于确保每次运行代码时都能得到相同的结果。
现在,我们可以训练 SVM 模型了。我们使用线性核函数 (linear kernel):```python
svm_linear = SVC(kernel='linear', C=1) # C是正则化参数
(X_train, y_train)
```
kernel='linear' 指定使用线性核函数。C 是正则化参数,控制模型的复杂度。较大的 C 值会导致更复杂的模型,更容易过拟合;较小的 C 值会导致更简单的模型,更容易欠拟合。这里我们设置为 1,你可以尝试不同的值。
接下来,我们使用训练好的模型进行预测:```python
y_pred_linear = (X_test)
```
最后,我们评估模型的性能:```python
accuracy_linear = accuracy_score(y_test, y_pred_linear)
print(f"线性核SVM准确率: {accuracy_linear}")
print(classification_report(y_test, y_pred_linear))
print(confusion_matrix(y_test, y_pred_linear))
```
accuracy_score 计算模型的准确率。classification_report 提供更详细的分类报告,包括精确率、召回率和 F1 值。confusion_matrix 显示混淆矩阵。
我们可以尝试其他的核函数,例如径向基核函数 (RBF kernel):```python
svm_rbf = SVC(kernel='rbf', C=1, gamma=0.1) # gamma是RBF核函数的参数
(X_train, y_train)
y_pred_rbf = (X_test)
accuracy_rbf = accuracy_score(y_test, y_pred_rbf)
print(f"RBF核SVM准确率: {accuracy_rbf}")
```
gamma 是 RBF 核函数的参数,控制模型的复杂度。 你可以尝试不同的 C 和 gamma 值来找到最佳模型。
为了更好地理解 SVM 的决策边界,我们可以进行可视化:```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 = ((x_min, x_max, 0.01), (y_min, y_max, 0.01))
Z = (np.c_[(), ()])
Z = ()
(xx, yy, Z, alpha=0.8)
(X[:, 0], X[:, 1], c=y, edgecolors='k')
('线性核SVM决策边界')
('萼片长度')
('萼片宽度')
()
```
这段代码绘制了线性核 SVM 的决策边界。 你可以根据需要修改代码来可视化 RBF 核 SVM 的决策边界。
这个例子展示了如何使用 sklearn 实现 SVM 并进行模型评估和可视化。 记住,你需要根据你的具体问题选择合适的核函数和参数。 通过调整参数和尝试不同的核函数,你可以获得最佳的模型性能。
2025-04-19

Python实现DES加密解密算法详解及代码
https://www.shuihudhg.cn/127260.html

C语言输出详解:从入门到高级技巧
https://www.shuihudhg.cn/127259.html

Java FTP客户端开发详解:连接、上传、下载与错误处理
https://www.shuihudhg.cn/127258.html

PHP 获取域名及地址:全方位解析与最佳实践
https://www.shuihudhg.cn/127257.html

Python 单数与复数处理:函数与方法详解
https://www.shuihudhg.cn/127256.html
热门文章

Python 格式化字符串
https://www.shuihudhg.cn/1272.html

Python 函数库:强大的工具箱,提升编程效率
https://www.shuihudhg.cn/3366.html

Python向CSV文件写入数据
https://www.shuihudhg.cn/372.html

Python 静态代码分析:提升代码质量的利器
https://www.shuihudhg.cn/4753.html

Python 文件名命名规范:最佳实践
https://www.shuihudhg.cn/5836.html