libsvm安装使用及网格搜索法参数寻优

LIBSVM 是台湾大学林智仁( Chih-Jen Lin)教授开发的。

说明:本教程仅针对电脑为64位的计算机,如果是32位的计算机需要下载C语言编辑器进行手动编译。

1.下载libsvm

①下载地址在其官网:https://www.csie.ntu.edu.tw/~cjlin/libsvm/
在这里插入图片描述
注意:这里需要右击“在新标签页中打开链接”

②解压安装包
在这里插入图片描述

2.安装libsvm

① 将解压好的文件夹粘贴到Matlab的安装路径下的toolbox中
在这里插入图片描述
② 打开matlab设置工具箱
在这里插入图片描述
③添加工具箱文件
在这里插入图片描述
在这里插入图片描述
选择“添加并包含子文件夹”,选择刚才相同的libsvm-3.24
在这里插入图片描述

④ 打开预设进行设置
在这里插入图片描述
点击“更新工具箱路径缓存”
在这里插入图片描述

3.验证是否安装成功

下载测试数据集:https://share.weiyun.com/5LGqTGa
创建脚本输入:

clc;clear;
load heart_scale.mat
model = svmtrain(heart_scale_label,heart_scale_inst, '-c 1 -g 0.07');
[predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);

如果输出如图所示,表明安装成功!
在这里插入图片描述

4.libsvm参数说明

这里首先推荐大家看一下官方给的参考文档:https://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf

如果英文文档看着不舒服,丢到网易有道翻译器中翻译下

这里参考唱一半的歌歌转载的文章进行说明:

4.1训练参数

model = libsvmtrain(training_label, training_label ['libsvm_options']);

training_label:训练集的标签y
training_data:训练集数据x

可选参数libsvm_options选项如下:

-s svm类型:SVM设置类型(默认0)
    0 — C-SVC; 1 –v-SVC; 2 – 一类SVM; 3 — e-SVR; 4 — v-SVR
-t 核函数类型:核函数设置类型(默认2)
    0 – 线性核函数
    1 – 多项式核函数poly
    2 – RBF(径向基)核函数
    3 – sigmoid核函数
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
-g r(gamma):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/k,k为总类别数)
-r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)
-p p:设置e -SVR 中损失函数p的值(默认0.1)
-m cachesize:设置cache内存大小,以MB为单位(默认40)
-e eps:设置允许的终止判据(默认0.001)
-h shrinking:是否使用启发式,0或1(默认1)
-wi weight:设置第几类的参数C为weight*C (C-SVC中的C) (默认1)
-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2

4.2 训练返回参数

在这里插入图片描述

-Parameters: 一个5 x 1的矩阵,从上到下依次表示:
    -s SVM类型(默认0);
    -t 核函数类型(默认2)
    -d 核函数中的degree设置(针对多项式核函数)(默认3);
    -g 核函数中的r(gamma)函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数);
    -r 核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
-nr_class: 表示数据集中有多少类别,比如二分类时这个值即为2。
-totalSV: 表示支持向量的总数。
-rho: 决策函数wx+b中的常数项的相反数(-b)。
-Label: 表示数据集中类别的标签,比如二分类常见的1和-1。
-ProbA: 使用-b参数时用于概率估计的数值,否则为空。
-ProbB: 使用-b参数时用于概率估计的数值,否则为空。
-nSV: 表示每类样本的支持向量的数目,和Label的类别标签对应。如Label=[1; -1],nSV=[63; 67],则标签为1的样本有63个支持向量,标签为-1的有67个。
-sv_coef: 表示每个支持向量在决策函数中的系数。
-SVs: 表示所有的支持向量,如果特征是n维的,支持向量一共有m个,则为m x n的稀疏矩阵。

4.3 预测参数

[predict_label, accuracy, dec_values] = svmpredict(test_label, test_data, model);

test_label:验证集的标签y
test_data:验证集数据x

4.4 预测返回的参数

在这里插入图片描述
在这里插入图片描述

-predicted_label:第一个返回值,表示样本的预测类标号。
-accuracy:第二个返回值,一个3 x 1的数组,表示分类的正确率、回归的均方根误差、回归的平方相关系数。
-decision_values/prob_estimates:第三个返回值,一个矩阵包含决策的值或者概率估计。对于n个预测样本、k类的问题,如果指定“-b 1”参数,则n x k的矩阵,每一行表示这个样本分别属于每一个类别的概率;如果没有指定“-b 1”参数,则为n x k*(k-1)/2的矩阵,每一行表示k(k-1)/2个二分类SVM的预测结果。

5.参数寻优

官方大大给了我们明确的提示,可以利用python和gunplot来进行参数寻优~
在这里插入图片描述
翻译如下:

我们现在为不了解SVM的用户提供了一个简单的脚本(easy.py)。它使一切变得自动化-从数据缩放到参数选择。
参数选择工具grid.py生成以下交叉验证精度轮廓。要使用此工具,您还需要安装python 和 gnuplot。

5.1 下载python和gnuplot

下载python过程略
下载gnuplot:
两种方式:
①官网下载(速度贼慢,外网你懂的)
在这里插入图片描述
②某盘链接提供给你们,就是不是最新版本的gnuplot
链接:https://pan.baidu.com/s/1VE72XqOErGFQqJeuI3lIug
提取码:wel5

5.2 安装gnuplot

找到下载好的安装包进行安装(可以默认路径,但是你一定要记得)
一般软件安装的默认路径为C;\ProgramFiles\gnuplot

5.3 测试寻优过程

①找到自己装的libsvm路径下的tools文件夹下的grid.py
在这里插入图片描述
②打开grid.py(这里我是使用的Pycharm2020)
修改两个地方:

  • self.svmtrain_pathname

在你的libsvm-3.24文件下windows文件夹下游svm-train.exe
将他的路径复制到self.svmtrain_pathname后面

  • self.gnuplot_pathname

在你刚刚安装的gnuplot文件下的bin目录下会有gnuplot.exe
将他的路径复制到self.gnuplot_pathname后面

在这里插入图片描述
③将libsvm-3.24文件夹自带的测试案例heart-scale复制到与grid.py同级目录下(即tools文件夹下)
在这里插入图片描述在这里插入图片描述
④打开cmd命令控制窗口,进入grid.py文件目录下
在这里插入图片描述
输入命令:

python grid.py heart_scale

在这里插入图片描述
结果为:C=2048.0;γ=0.0001220703125;交叉验证精度CV Rate=84.0741%

⑤打开刚刚的tools文件,会发现多出来两个文件
在这里插入图片描述
一个是寻优过程,一个是寻优图像
在这里插入图片描述
当然如果是你熟悉python代码,可以它的源码库进行代码修改,把图片的标题,坐标轴改成你喜欢的样式~

5.4 自己的数据文件寻优

同样的方法,将数据文件放在grid.py文件夹下,然后在cmd中执行
python grid.py xxx(文件名)即可

另外,如果不知道怎么将数据格式转化为libsvm格式的文件,见第六章
在这里插入图片描述

6.Weka软件的使用

Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化(与之对应的是SPSS公司商业数据挖掘产品–Clementine )的,基于JAVA环境下开源的机器学习(machine learning)以及数据挖掘(data mining)软件。【摘自百度百科】

6.1 weka下载

其官网位置:https://www.cs.waikato.ac.nz/ml/weka/
① 点击Download
在这里插入图片描述
② 选择计算机操作系统进行下载
在这里插入图片描述
③ 会自动跳转到下载页进行下载
在这里插入图片描述
(这是下载结束后的)

6.2 weka软件的安装

安装非常简单,选择你的安装目录进行“下一步安装大法”就行。

6.3 数据文件转libsvm

① 将数据文件事先准备好,保存格式为csv格式
在这里插入图片描述

  • 最后一列为标签列
  • 最后一列前面的都是数据维度
  • 第一行需要加索引序号

xlsx的excel文件保存为csv格式

② 打开weka
在这里插入图片描述
在这里插入图片描述
打开直接保存的csv文件
在这里插入图片描述

③ 保存libsvm格式的文件

在这里插入图片描述

  • 13
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在使用libsvm中的网格搜索进行调参时,可以按照以下步骤进行操作: 1. 导入所需的库文件和数据集,并对数据进行预处理(例如特征缩放或标准化)。 2. 创建一个参数字典,用于存储需要进行调参的参数及其取值范围。例如,可以包括C(惩罚系数)和gamma(RBF核函数的参数)。 3. 使用GridSearchCV函数来进行网格搜索和交叉验证。该函数需要传入训练集的特征和标签、参数字典、交叉验证的折数等参数。 4. 调用fit方,开始进行网格搜索和交叉验证。该函数将遍历参数字典中每个参数的所有取值,对每一组参数进行交叉验证,并计算模型在验证集上的性能。 5. 在完成网格搜索后,可以使用best_params_属性来获取最佳参数组合。 6. 可以使用cv_results_属性来查看不同参数组合的性能结果,如平均训练时间、平均测试时间、平均训练准确率等指标。 7. 使用最佳参数组合重新训练模型,并进行预测和评估。 需要注意的是,网格搜索会对每一组参数组合进行完整的训练和交叉验证,因此在参数较多或数据集较大时,会比较耗时。可以通过减少参数范围或使用随机搜索等方来进行优化。此外,还需根据实际情况选择最优的评估指标,如准确率、精确率、召回率等。最后,根据模型的预测结果进行模型调优和改进,以提高模型性能。 ### 回答2: 在libsvm中,网格搜索用于选择合适的超参数组合,以提高模型性能。下面是网格搜索的调用步骤: 1. 导入所需的库和模块:使用`import svmutil`导入libsvm库。 2. 加载训练数据集:使用`svmutil.svm_read_problem(filepath)`加载训练数据集,其中`filepath`为数据集文件的路径。 3. 定义超参数的搜索范围:根据问题的需要,定义超参数的候选值列表。例如,可以定义C值范围为\[0.1, 1, 10, 100\],gamma值范围为\[0.01, 0.1, 1\]。 4. 定义交叉验证的折数:使用`svmutil.svm_train`函数进行模型训练时,可以指定交叉验证的折数,例如设置为5折交叉验证。 5. 进行网格搜索使用嵌套循环遍历超参数的候选值组合。对于每一对超参数值,调用`svmutil.svm_train`函数进行训练,并在交叉验证集上评估模型性能。 6. 选择最优模型:根据交叉验证集上的性能指标,选择最优的超参数组合,例如选择分类准确率最高的组合。 7. 使用最优模型进行预测:使用`svmutil.svm_train`函数使用训练集和最优超参数进行模型训练,并使用`svmutil.svm_predict`函数对测试集进行预测。 总结起来,libsvm网格搜索的调用包括导入库、加载数据集、定义超参数搜索范围、交叉验证、网格搜索、选择最优模型和预测等步骤。根据具体的问题和需要,可按照上述步骤进行相应的调用。 ### 回答3: 在libsvm使用网格搜索来调整模型的参数网格搜索是一种通过穷举搜索参数组合来寻找最佳模型参数的方。以下是调用网格搜索的步骤: 1. 导入相关库和数据:首先,导入libsvm库以及需要使用的数据集。 2. 定义参数范围:通过定义参数的范围,设置待搜索的参数值。例如,可以定义一个C参数的范围(如0.01、0.1、1、10、100),以及gamma参数的范围。 3. 创建网格搜索器:使用GridSearchCV函数创建一个网格搜索器对象,并传入要使用SVM模型以及参数范围。 4. 交叉验证:设置交叉验证的折数,然后调用fit函数以及训练集数据来进行交叉验证。 5. 打印最佳参数:通过调用best_params_属性来获取最佳参数组合。 下面是一个例子,展示了如何在libsvm使用网格搜索调整模型参数: ```python from sklearn import svm, datasets from sklearn.model_selection import GridSearchCV # 导入数据集 iris = datasets.load_iris() X = iris.data y = iris.target # 定义参数范围 parameters = {'C':[0.01, 0.1, 1, 10, 100], 'gamma':[0.1, 1, 10, 100]} # 创建网格搜索器 grid_search = GridSearchCV(svm.SVC(), parameters) # 交叉验证 grid_search.fit(X, y) # 打印最佳参数 print(grid_search.best_params_) ``` 上述代码中,我们导入了Iris数据集,定义了C和gamma的不同取值范围。然后,我们创建了一个GridSearchCV对象,并传入SVC模型以及参数范围。接下来,我们使用fit函数将数据集和目标值作为参数进行交叉验证,并通过访问best_params_属性来获取最佳参数组合。 通过以上步骤,我们就可以使用网格搜索来调整libsvm模型的参数,以寻找最佳的模型参数组合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值