LIBSVM 是一个广泛使用的支持向量机(SVM)工具包,支持分类、回归和分布估计等任务。以下是其基本使用方法和关键参数注释,帮助用户快速上手。
1. 安装与使用步骤
1.1 安装
- 下载地址: LIBSVM官网
- 编译:
# Linux/Mac 下编译 make # Windows 使用预编译的 .exe 文件
1.2 数据准备
- 数据格式: 每行对应一个样本,格式为
标签 特征1:值1 特征2:值2 ...
例如:1 1:0.5 2:0.3 3:0.7 -1 1:0.1 2:0.9 3:0.2
1.3 训练与预测
# 训练模型
svm-train [参数] 训练数据文件 [模型文件]
# 示例: svm-train -c 10 -g 0.1 data.txt model.txt# 使用模型预测
svm-predict 测试数据文件 模型文件 预测结果文件
# 示例: svm-predict test.txt model.txt predict.txt
2. 核心参数注释
2.1 SVM类型 (-s
)
参数值 | 类型 | 适用场景 |
---|---|---|
0 | C-SVC (默认) | 多类分类 |
1 | nu-SVC | 分类,支持 nu 参数 |
2 | one-class SVM | 异常检测 |
3 | epsilon-SVR | 回归任务 |
4 | nu-SVR | 回归,支持 nu 参数 |
2.2 核函数类型 (-t
)
参数值 | 核函数 | 公式 |
---|---|---|
0 | 线性核 (Linear) | ( K(x_i, x_j) = x_i^T x_j ) |
1 | 多项式核 | ( (γ x_i^T x_j + r)^d ) |
2 | RBF核 (默认) | ( \exp(-γ |x_i - x_j|^2) ) |
3 | Sigmoid核 | ( \tanh(γ x_i^T x_j + r) ) |
2.3 常用参数
参数 | 说明 | 默认值 |
---|---|---|
-c | 惩罚系数 ©,控制过拟合 | 1 |
-g | 核函数参数 gamma (RBF核关键参数) | 1/特征数 |
-d | 多项式核的阶数 (degree) | 3 |
-r | 核函数中的截距项 (coef0) | 0 |
-n | nu 参数 (nu-SVC, nu-SVR) | 0.5 |
-p | epsilon 参数 (epsilon-SVR) | 0.1 |
-e | 停止准则的容忍误差 (epsilon) | 0.001 |
-m | 内存缓存大小 (MB) | 100 |
3. 关键参数调优建议
-
RBF核 (默认):
- 优先调节
-c
(惩罚系数) 和-g
(gamma)。 - 过拟合时:降低
-c
,增大-g
;欠拟合时:增大-c
,降低-g
。
- 优先调节
-
交叉验证:
使用网格搜索 (grid.py
) 寻找最优-c
和-g
:python grid.py -log2c -5,5,1 -log2g -5,5,1 数据文件
-
数据归一化:
使用svm-scale
对数据归一化到 [0,1] 或 [-1,1],避免特征量纲差异影响模型。
4. 示例代码
# 数据归一化
svm-scale -l -1 -u 1 -s range.txt data.txt > data.scaled# 训练模型 (RBF核,C=10, gamma=0.5)
svm-train -s 0 -t 2 -c 10 -g 0.5 data.scaled model.txt# 预测
svm-predict test_data.scaled model.txt predictions.txt
5. 注意事项
- 默认核函数: 未指定
-t
时使用 RBF 核,需调参。 - 回归任务: 使用
-s 3
(epsilon-SVR) 或-s 4
(nu-SVR)。 - 类别不平衡: 通过
-wi
参数调整类别权重,例如-w1 10
提高类别1的权重。
建议结合官方文档 (LIBSVM Guide) 深入理解参数交互和调优策略。