-
2019-09-23 09:09:32
SVM参数优化
导入包
from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV
将SVM的C值和gamma调参,C值范围为 2 − 5 {2^{-5}} 2−5到 2 15 {2^{15}} 215, gamma值范围为 2 − 15 {2^{-15}} 2−15到 2 3 {2^{3}} 23.
lmh_svm = SVC(decision_function_shape="ovo", random_state=0) C = [] for i in range(-5, 15 + 1, 2): C.append(2**i) gamma = [] for i in range(-15, 3 + 1, 2): gamma.append(2**i) parameters = {'C': C,'gamma': gamma}
GridSearchCV通过网格搜索,将每个参数进行尝试,最后安装准确度来判断最优参数
# 网格搜索 clf = GridSearchCV(lmh_svm, parameters, cv=5, iid=True,scoring="accuracy", return_train_score=False, n_jobs=-1)
最优参数
clf.best_params_
最优的准确率
clf.best_score_
更多相关内容 -
基于改进的网格搜索法的SVM参数优化 (2012年)
2021-05-22 01:46:38具体分析了网格法、遗传算法和粒子群算 法在 SVM参数优化方面的性能以及优缺点,提出了一种改进的网格法. 先在较大范围内进行搜索,在得到的优化结果 附近区域再进行精确搜索. 实验表明改进的网格搜索法耗时短,更适用... -
基于混合仿生算法的SVM参数优化 (2011年)
2021-05-22 03:11:07本文提出一种SVM参数优化的新方法。应用遗传算法先对SVM参数进行初步的优化,把得到的优化结果邻近的一段区域再作为粒子群算法的搜索区间进行二次优化,以提高支持向量机的泛化能力,缩短sVM参数寻优的时间。仿真... -
网格搜索法SVM参数优化在主扇风机故障诊断中的应用
2020-06-05 09:19:44为了提高煤矿主扇风机故障诊断的准确性,将网格搜索法和支持向量机(SVM)应用到主扇风机的故障诊断中。首先,建立主扇风机运行故障的知识库,并...实验结果表明,网格搜索法SVM参数优化非常适合于煤矿主扇风机的故障系统中。 -
SVM参数优化程序(MATLAB)
2014-02-28 12:45:19本程序有算例分析,详细介绍了三种优化SVM方法:遗传算法、PSO、网格搜索法 -
SVM的参数优化问题
2019-03-22 08:46:52SVM的参数优化问题,对比随机参数与优化后的参数对网络性能的影响 -
基于多特征提取和SVM参数优化的车型识别
2021-02-08 16:06:53提出了一种基于多特征提取和支持向量机(support vector machines,SVM)参数优化的车型识别方法,此方法...实验结果表明:提出的多特征提取和SVM参数优化相结合的车型识别方法能够取得很好的识别效果,识别率达到90%以上。 -
svm参数优化及相关优化算法代码.zip
2019-12-01 17:44:52svm参数优化及相关优化算法代码 svm参数优化及相关优化算法代码!svm参数优化及相关优化算法代码 -
论文研究-基于人工鱼群算法的SVM参数优化及应用 .pdf
2019-08-15 16:57:36基于人工鱼群算法的SVM参数优化及应用,杨利红,白静,在支持向量机的应用中发现其学习性能的好坏与核函数及其参数选择有着直接的关系,但由于应用不同,各类特征有很大的差别,并且无 -
论文研究-改进的粒子群算法及其SVM参数优化应用.pdf
2019-09-10 23:41:34从论域中各个元素之间所具有的客观关系出发,利用集值映射的原理在论域上得到一个覆盖,构造了一种新的覆盖粗糙集模型;研究了与之相关的基本性质,并将其与现有的5种主要的覆盖粗糙集模型进行比较研究。... -
SVM神经网络中的参数优化---提升分类器性能(matlab实现).zip
2021-08-24 11:10:00SVM神经网络中的参数优化---提升分类器性能(matlab实现),包含源代码和测试数据 -
改进蚁群算法在SVM参数优化研究中的应用.pdf
2019-10-27 15:42:56一篇关于蚁群算法优化SVM参数的论文,具有很好的参考价值 -
SVM参数优化_提升分类器的性能_GA_PSO_matlab
2022-04-12 22:52:08资源名:SVM参数优化_提升分类器的性能_GA_PSO_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手... -
基于引力搜索算法的SVM参数优化及应用 (2013年)
2021-04-29 08:59:33为了提高支持向量机(SVM)模型的拟合精度和泛化能力,以最小化输出量的均方误差为目标,采用基于万有引力定律的优化机制,提出了一种基于引力搜索算法的SVM参数优化方法。通过仿真实验验证,基于引力搜索算法的SVM回归... -
SVM的参数优化——如何更好的提升分类器的性能.7z
2021-08-29 15:43:51SVM的参数优化——如何更好的提升分类器的性能.7z本章要解决的问题就是仅仅利用训练集找到分类的最佳参数,不但能够高准确率的预测训练集而且要合理的预测测试集,使得测试集的分类准确率也维持在一个较高水平,即... -
研究论文-基于改进的网格搜索法的SVM参数优化.pdf
2019-08-07 15:25:04具体分析了网格法、遗传算法和粒子群算法在SVM参数优化方面的性能以及优缺点,提出了一种改进的网格法. 先在较大范围内进行搜索,在得到的优化结果附近区域再进行精确搜索. 实验表明改进的网格搜索法耗时短,更适用... -
一种有效的SVM参数优化选择方法
2013-04-28 22:14:42一种有效的SVM参数优化选择方法支持向量机(support vector machines,SVM) 是在统计学习理论的基础之上发展起来的新一代 机器学习算法 -
opencv SVM参数优化
2018-01-09 17:45:29SVM(支持向量机)是机器学习算法里用得最多的一种算法。SVM最常用的是用于分类,不过SVM也可以用于回归,我的实验中就是用SVM来实现SVR(支持向量回归)。 对于功能这么强的算法,opencv中自然也是有集成好了...SVM(支持向量机)是机器学习算法里用得最多的一种算法。SVM最常用的是用于分类,不过SVM也可以用于回归,我的实验中就是用SVM来实现SVR(支持向量回归)。
对于功能这么强的算法,opencv中自然也是有集成好了,我们可以直接调用。OpenCV中的SVM算法是基于LibSVM软件包开发的,LibSVM是台湾大学林智仁(Lin Chih-Jen)等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包。
网上讲opencv中SVM使用的文章有很多,但讲SVM参数优化的文章却很少。所以在这里不重点讲怎么使用SVM,而是谈谈怎样通过opencv中自带的库优化SVM中的各参数。
相信用SVM做过实验的人都知道,SVM的各参数对实验结果有很大的影响,比如C,gama,P,coef等等。下面就是CvSVMParams类的原型。
C++: CvSVMParams::CvSVMParams()
C++: CvSVMParams::CvSVMParams(int svm_type,
int kernel_type,
double degree,
double gamma,
double coef0,
double Cvalue,
double nu,
double p,
CvMat* class_weights,
CvTermCriteria term_crit
)
<1> svm_type:指定SVM的类型(5种):- CvSVM::C_SVC : C类支持向量分类机。 n类分组 (n≥2),允许用异常值惩罚因子C进行不完全分类。
- CvSVM::NU_SVC :
类支持向量分类机。n类似然不完全分类的分类器。参数为
取代C(其值在区间【0,1】中,nu越大,决策边界越平滑)。
- CvSVM::ONE_CLASS : 单分类器,所有的训练数据提取自同一个类里,然后SVM建立了一个分界线以分割该类在特征空间中所占区域和其它类在特征空间中所占区域。
- CvSVM::EPS_SVR :
类支持向量回归机。训练集中的特征向量和拟合出来的超平面的距离需要小于p。异常值惩罚因子C被采用。
- CvSVM::NU_SVR :
类支持向量回归机。
代替了 p。
<2>kernel_type:SVM的内核类型(4种):
- CvSVM::LINEAR : 线性内核,没有任何向映射至高维空间,线性区分(或回归)在原始特征空间中被完成,这是最快的选择。
.
- CvSVM::POLY : 多项式内核:
.
- CvSVM::RBF : 基于径向的函数,对于大多数情况都是一个较好的选择:
.
- CvSVM::SIGMOID : Sigmoid函数内核:
.
<3> degree:内核函数(POLY)的参数degree。<4> gamma:内核函数(POLY/ RBF/ SIGMOID)的参数。
<5> coef0:内核函数(POLY/ SIGMOID)的参数coef0。<6> Cvalue:SVM类型(C_SVC/ EPS_SVR/ NU_SVR)的参数C。<7> nu:SVM类型(NU_SVC/ ONE_CLASS/ NU_SVR)的参数。
<8> p:SVM类型(EPS_SVR)的参数。
<9> class_weights:C_SVC中的可选权重,赋给指定的类,乘以C以后变成。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类别的误分类数据的惩罚项就越大。
<10> term_crit:SVM的迭代训练过程的中止条件,解决部分受约束二次最优问题。您可以指定的公差和/或最大迭代次数。当然对于一个特定的SVM训练器,里面的所有参数不一定全用。比如我用的svm_type为EPS_SVR,那么我要用到的参数主要就是p,c,gama这三个参数。下面是设置参数的代码
设置参数后就可以用CvSVM.train()进行训练了,下面是train的原型C++: bool CvSVM::train(const Mat& trainData,
const Mat& responses,
const Mat& varIdx=Mat(),
const Mat& sampleIdx=Mat(),
CvSVMParams params=CvSVMParams()
)
我在用train完成训练预测时出现了过拟合的情况,即对于训练集的数据有很好的预测结果,但对不在训练集的测试集预测值都一样(我在网上看到很多网友也遇到这个问题)。于是我开始调整参数,调了半天也没个好结果。后面我发现其实opencv中SVM类是提供了优化参数值功能的,瞬间感觉世界美好了。下面讲讲具体的做法。要让svm自动优化参数,那么训练时就不能再用train函数了,而应该用train_auto函数。下面是train_auto的函数原型C++: bool CvSVM::train_auto(const Mat& trainData,
const Mat& responses,
const Mat& varIdx,
const Mat& sampleIdx,
CvSVMParams params,
int k_fold=10,
CvParamGrid Cgrid=CvSVM::get_default_grid(CvSVM::C), CvParamGrid gammaGrid=CvSVM::get_default_grid(CvSVM::GAMMA), CvParamGrid pGrid=CvSVM::get_default_grid(CvSVM::P), CvParamGrid nuGrid=CvSVM::get_default_grid(CvSVM::NU), CvParamGrid coeffGrid=CvSVM::get_default_grid(CvSVM::COEF), CvParamGrid degreeGrid=CvSVM::get_default_grid(CvSVM::DEGREE),
bool balanced=false
)
- 前5个参数参考构造函数的参数注释。
- k_fold: 交叉验证参数。训练集被分成k_fold的自子集。其中一个子集是用来测试模型,其他子集则成为训练集。所以,SVM算法复杂度是执行k_fold的次数。
- *Grid: (6个)对应的SVM迭代网格参数。
- balanced: 如果是true则这是一个2类分类问题。这将会创建更多的平衡交叉验证子集。
自动训练函数的使用说明- 这个方法根据CvSVMParams中的最佳参数C, gamma, p, nu, coef0, degree自动训练SVM模型。
- 参数被认为是最佳的交叉验证,其测试集预估错误最小。
- 如果没有需要优化的参数,相应的网格步骤应该被设置为小于或等于1的值。例如,为了避免gamma的优化,设置gamma_grid.step = 0,gamma_grid.min_val, gamma_grid.max_val 为任意数值。所以params.gamma 由gamma得出。
- 最后,如果参数优化是必需的,但是相应的网格却不确定,你可能需要调用函数CvSVM::get_default_grid(),创建一个网格。例如,对于gamma,调用CvSVM::get_default_grid(CvSVM::GAMMA)。
- 该函数为分类运行 (params.svm_type=CvSVM::C_SVC 或者 params.svm_type=CvSVM::NU_SVC) 和为回归运行 (params.svm_type=CvSVM::EPS_SVR 或者 params.svm_type=CvSVM::NU_SVR)效果一样好。如果params.svm_type=CvSVM::ONE_CLASS,没有优化,并指定执行一般的SVM。
这里需要注意的是,对于需要的优化的参数虽然train_auto可以自动选择最优值,但在代码中也要先赋初始值,要不然编译能通过,但运行时会报错。下面是示例代码
用上面的代码的就可以自动训练并优化参数。最后,若想查看优化后的参数值,可以使用CvSVM::get_params()函数来获得优化后的CvSVMParams。下面是示例代码: -
一种面向语音识别的抗噪SVM参数优化方法
2021-02-24 06:27:33一种面向语音识别的抗噪SVM参数优化方法 -
matlab SVM的参数优化——如何更好的提升分类器的性能
2018-02-01 14:42:11利用matlab对SVM算法的参数进行优化,从而更好的提升分类性能 -
改进的遗传算法在SVM参数优化中的应用 (2012年)
2021-05-18 03:18:43遗传算法是一种具有随机、高度并行、自适应特点的...文章利用改进的遗传算法优化SVM 参数,提高SVM分类器的学习能力和推广能力,实验仿真表明,优化的SVM不仅能高准确地预测训练集,而且使分类准确率维持在一个较高的水平。 -
基于GPU的SVM参数优化并行算法.pdf
2021-09-25 17:44:04基于GPU的SVM参数优化并行算法.pdf -
基于IPSO的混合核函数SVM参数优化及应用 (2009年)
2021-04-29 08:49:52针对混合核函数支持向量机(SVM)在建模中的重要参数值选择问题,提出利用具有较强全局搜索能力的改进粒子群优化算法,对混合核函数SVM建模过程中的重要参数进行优化调整,给出应用该方法的具体步骤,通过仿真实验验证... -
论文研究-基于MCS的SVM参数优化研究.pdf
2019-07-22 21:29:09由于优化杜鹃算法是利用了鸟类特殊的利维飞行模式的群体智能算法, 并且增加了粒子间的信息交流, 故将该算法引入支持向量机惩罚系数和核参数的自动寻优中。给出了实现方式, 并讨论了概率参数的设置对收敛性的影响。... -
改进的粒子群算法及其SVM参数优化应用.pdf
2021-09-29 09:55:15改进的粒子群算法及其SVM参数优化应用.pdf -
基于自适应均值粒子群算法的SVM参数优化方法.pdf
2021-09-28 23:44:16基于自适应均值粒子群算法的SVM参数优化方法.pdf -
基于佳点集粒子群算法的SVM参数优化方法.pdf
2021-09-28 23:35:02基于佳点集粒子群算法的SVM参数优化方法.pdf -
OpenCV中的SVM参数优化
2017-06-29 15:47:51SVM(支持向量机)是机器学习算法里用得最多的一种算法。SVM最常用的是用于分类,不过SVM也可以用于回归,我的实验中就是用SVM来实现SVR(支持向量回归)。 对于功能这么强的算法,OpenCV中自然也是有集成好了...SVM(支持向量机)是机器学习算法里用得最多的一种算法。SVM最常用的是用于分类,不过SVM也可以用于回归,我的实验中就是用SVM来实现SVR(支持向量回归)。
对于功能这么强的算法,OpenCV中自然也是有集成好了,我们可以直接调用。opencv中的SVM算法是基于LibSVM软件包开发的,LibSVM是台湾大学林智仁(Lin Chih-Jen)等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包。
网上讲opencv中SVM使用的文章有很多,但讲SVM参数优化的文章却很少。所以在这里不重点讲怎么使用SVM,而是谈谈怎样通过opencv中自带的库优化SVM中的各参数。
相信用SVM做过实验的人都知道,SVM的各参数对实验结果有很大的影响,比如C,gama,P,coef等等。下面就是CvSVMParams类的原型。
C++: CvSVMParams::CvSVMParams()
C++: CvSVMParams::CvSVMParams(int svm_type,
int kernel_type,
double degree,
double gamma,
double coef0,
double Cvalue,
double nu,
double p,
CvMat* class_weights,
CvTermCriteria term_crit
)
<1> svm_type:指定SVM的类型(5种):- CvSVM::C_SVC : C类支持向量分类机。 n类分组 (n≥2),允许用异常值惩罚因子C进行不完全分类。
- CvSVM::NU_SVC :
类支持向量分类机。n类似然不完全分类的分类器。参数为
取代C(其值在区间【0,1】中,nu越大,决策边界越平滑)。
- CvSVM::ONE_CLASS : 单分类器,所有的训练数据提取自同一个类里,然后SVM建立了一个分界线以分割该类在特征空间中所占区域和其它类在特征空间中所占区域。
- CvSVM::EPS_SVR :
类支持向量回归机。训练集中的特征向量和拟合出来的超平面的距离需要小于p。异常值惩罚因子C被采用。
- CvSVM::NU_SVR :
类支持向量回归机。
代替了 p。
<2>kernel_type:SVM的内核类型(4种):
- CvSVM::LINEAR : 线性内核,没有任何向映射至高维空间,线性区分(或回归)在原始特征空间中被完成,这是最快的选择。
.
- CvSVM::POLY : 多项式内核:
.
- CvSVM::RBF : 基于径向的函数,对于大多数情况都是一个较好的选择:
.
- CvSVM::SIGMOID : Sigmoid函数内核:
.
<3> degree:内核函数(POLY)的参数degree。<4> gamma:内核函数(POLY/ RBF/ SIGMOID)的参数。
<5> coef0:内核函数(POLY/ SIGMOID)的参数coef0。<6> Cvalue:SVM类型(C_SVC/ EPS_SVR/ NU_SVR)的参数C。<7> nu:SVM类型(NU_SVC/ ONE_CLASS/ NU_SVR)的参数。
<8> p:SVM类型(EPS_SVR)的参数。
<9> class_weights:C_SVC中的可选权重,赋给指定的类,乘以C以后变成。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类别的误分类数据的惩罚项就越大。
<10> term_crit:SVM的迭代训练过程的中止条件,解决部分受约束二次最优问题。您可以指定的公差和/或最大迭代次数。当然对于一个特定的SVM训练器,里面的所有参数不一定全用。比如我用的svm_type为EPS_SVR,那么我要用到的参数主要就是p,c,gama这三个参数。下面是设置参数的代码
设置参数后就可以用CvSVM.train()进行训练了,下面是train的原型C++: bool CvSVM::train(const Mat& trainData,
const Mat& responses,
const Mat& varIdx=Mat(),
const Mat& sampleIdx=Mat(),
CvSVMParams params=CvSVMParams()
)
我在用train完成训练预测时出现了过拟合的情况,即对于训练集的数据有很好的预测结果,但对不在训练集的测试集预测值都一样(我在网上看到很多网友也遇到这个问题)。于是我开始调整参数,调了半天也没个好结果。后面我发现其实opencv中SVM类是提供了优化参数值功能的,瞬间感觉世界美好了。下面讲讲具体的做法。要让svm自动优化参数,那么训练时就不能再用train函数了,而应该用train_auto函数。下面是train_auto的函数原型C++: bool CvSVM::train_auto(const Mat& trainData,
const Mat& responses,
const Mat& varIdx,
const Mat& sampleIdx,
CvSVMParams params,
int k_fold=10,
CvParamGrid Cgrid=CvSVM::get_default_grid(CvSVM::C), CvParamGrid gammaGrid=CvSVM::get_default_grid(CvSVM::GAMMA), CvParamGrid pGrid=CvSVM::get_default_grid(CvSVM::P), CvParamGrid nuGrid=CvSVM::get_default_grid(CvSVM::NU), CvParamGrid coeffGrid=CvSVM::get_default_grid(CvSVM::COEF), CvParamGrid degreeGrid=CvSVM::get_default_grid(CvSVM::DEGREE),
bool balanced=false
)
- 前5个参数参考构造函数的参数注释。
- k_fold: 交叉验证参数。训练集被分成k_fold的自子集。其中一个子集是用来测试模型,其他子集则成为训练集。所以,SVM算法复杂度是执行k_fold的次数。
- *Grid: (6个)对应的SVM迭代网格参数。
- balanced: 如果是true则这是一个2类分类问题。这将会创建更多的平衡交叉验证子集。
自动训练函数的使用说明- 这个方法根据CvSVMParams中的最佳参数C, gamma, p, nu, coef0, degree自动训练SVM模型。
- 参数被认为是最佳的交叉验证,其测试集预估错误最小。
- 如果没有需要优化的参数,相应的网格步骤应该被设置为小于或等于1的值。例如,为了避免gamma的优化,设置gamma_grid.step = 0,gamma_grid.min_val, gamma_grid.max_val 为任意数值。所以params.gamma 由gamma得出。
- 最后,如果参数优化是必需的,但是相应的网格却不确定,你可能需要调用函数CvSVM::get_default_grid(),创建一个网格。例如,对于gamma,调用CvSVM::get_default_grid(CvSVM::GAMMA)。
- 该函数为分类运行 (params.svm_type=CvSVM::C_SVC 或者 params.svm_type=CvSVM::NU_SVC) 和为回归运行 (params.svm_type=CvSVM::EPS_SVR 或者 params.svm_type=CvSVM::NU_SVR)效果一样好。如果params.svm_type=CvSVM::ONE_CLASS,没有优化,并指定执行一般的SVM。
这里需要注意的是,对于需要的优化的参数虽然train_auto可以自动选择最优值,但在代码中也要先赋初始值,要不然编译能通过,但运行时会报错。下面是示例代码
用上面的代码的就可以自动训练并优化参数。最后,若想查看优化后的参数值,可以使用CvSVM::get_params()函数来获得优化后的CvSVMParams。下面是示例代码:载自 http://blog.csdn.net/computerme/article/details/38677599 -
基于混合Q PSO的L S-SVM参数优化及其应用 (2011年)
2021-05-09 15:05:47针对最小二乘支持向量机(LS-SVM)的参数寻优问题,提出一种基于混合量子粒子群算法(HQPSO)的 LS-SVM参数选择方法,以提高 LS-SVM模型的学习性能和泛化能力。该算法结合 QPSO算法的全局优化能力和 Powell的局部寻优能力,...