首页 > 其他分享 >支持向量机的参数调整优化

支持向量机的参数调整优化

时间:2024-07-05 22:03:06浏览次数:14  
标签:svm score train 参数 向量 scores 优化 gamma

 一、支持向量机简介

        svm(支持向量机)以感知机为原型,但是它的能力要远远强于感知机,svm在回归,分类和异常检测上都有重要作用,并且可以通过kernel trick实现高维数据的非线性分类。sklearn里面提供了很多svm及其变种,本篇将详细介绍其中的分类器之一svc。

二、SVC变量详解

svc的变量如下所示,显示的皆为默认参数:


C:惩罚系数,用来平衡分类间隔margin和错分样本,默认参数为1.0

kernel:参数选择,有RBF, Linear, Poly, Sigmoid

degree:多项式核函数的阶数

gamma:核函数的系数(只对'Poly', 'RBF' 和 'Sigmoid'生效),如果未专门设置gamma,代表其值为样本特征数的倒数,即1/n_features.

coef0:核函数中的独立项,只对'RBF' and 'Poly'有效,表示其中的参数c

shrinking:是否采用启发式收缩方式,默认为True,用以加速代码运行速度

probablity: 是否启用概率估计。 这必须在调用fit()之前启用,并且会fit()方法速度变慢

tol: svm停止训练的误差精度。这个对泛化能力有影响,可以适当调大,但太大会导致欠拟合。

cache_size:指定训练所需要的内存,单位为MB

class_weight: 是否根据每个类所占据的权重,为不同的类设置不同的惩罚参数C

verbose :是否启用详细输出

max_iter: 最大迭代次数

decision_function_shape:‘ovo’ 一对一, ‘ovr’ 多对多 or None 无

当然,实际操作时上述很多参数均无需调整。依kernel不同产生影响的参数也不相同,影响最终结果的参数如下

核函数需要调整的参数
RBFC,gamma,tol,class_weight
polyC,gamma,tol,degree,coef0,class_weight
sigmoidC, gamma,tol,coef0,class_weight

三、参数优化示例

from sklearn.datasets import make_moons
from sklearn import svm
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split

'''数据预处理'''
X,y = make_moons(n_samples=150, noise=0.15, random_state=42)
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)



# 初始化scores列表,用于存储不同参数组合的召回率平均值
scores = []

# 定义参数范围
c_param_range = [0.01, 0.1, 1, 10, 100]
gamma_param_range = [0.1, 0.5, 1, 5, 10]

# 外层循环遍历C参数
for c in c_param_range:
    # 内层循环遍历gamma参数
    for gamma in gamma_param_range:
        # 创建SVC模型实例,使用当前的C和gamma参数
        clf = svm.SVC(C=c, kernel='rbf', gamma=gamma)
        # 使用交叉验证计算召回率
        score = cross_val_score(clf, x_train, y_train, cv=10, scoring='recall')
        # 计算召回率的平均值
        score_mean = sum(score) / len(score)
        # 将当前参数组合的召回率平均值添加到scores列表中
        scores.append((score_mean, (c, gamma)))
        # 打印当前参数组合和对应的召回率平均值
        print(f"C={c}, gamma={gamma}, Mean Recall={score_mean}")  # 找到最佳参数组合和对应的召回率
    best_score = max(scores, key=lambda x: x[0])
    print(f"最佳参数: C={best_score[1][0]}, gamma={best_score[1][1]}, Best Mean Recall={best_score[0]}")


标签:svm,score,train,参数,向量,scores,优化,gamma
From: https://blog.csdn.net/2301_77444219/article/details/140188725

相关文章

  • 使用Python和scikit-learn实现支持向量机(SVM)
            支持向量机(SupportVectorMachine,SVM)是一种强大的监督学习算法,广泛用于分类和回归问题。它能够有效处理线性和非线性数据,并在复杂数据集中表现出色。本文将介绍如何使用Python和scikit-learn库实现SVM,以及如何通过可视化不同参数设置来理解其工作原理。一、......
  • 蝙蝠优化算法(Bat Algorithm,BA)及其Python和MATLAB实现
    蝙蝠优化算法(BatAlgorithm,简称BA)是一种基于蝙蝠群体行为的启发式优化算法,由Xin-SheYang于2010年提出。该算法模拟了蝙蝠捕食时在探测目标、适应环境和调整自身位置等过程中的行为,通过改进搜索过程来实现优化问题的求解。蝙蝠群体中每一只蝙蝠代表一个潜在解,在搜索过程中,蝙蝠......
  • Python实现ABC人工蜂群优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景人工蜂群算法(ArtificialBeeColony,ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜蜂根......
  • NO.04 Altium Designer组件参数类型
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档@TOCAltiumDesigner组件参数类型前言○由于“BOM、ActiveBOM或Draftsman必须与设计中的组件一致”因此无法直接进行删除BOM、ActiveBOM或Draftsman“其中一项;○不过可以通过设置组件“参数”类型......
  • 【粉丝免费】基于粒子群算法和雾凇算法求解发电机经济负荷调度优化问题,最低成本 含机
    %电力系统参数num_generators=5;%发电机数量load_demand=1000;%负荷需求(MW)%发电机参数generator_capacity=[200,300,250,150,200];%发电机容量(MW)generator_cost=[10,12,11,9,10];%发电机成本($/MWh)%粒子群算法参数num_particles=50;%......
  • C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结
    C++结构体C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中的const的使用场景,以及结构体的案例。1.结构体的定义和使用结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。......
  • 在Linux中,如何给最小化安装系统,进行基础优化?
    在Linux中,尤其是对于最小化安装的系统,进行基础优化可以显著提高系统的性能、稳定性和安全性。以下是一些针对最小化安装的Linux系统进行基础优化的步骤:1.更新系统首先,确保你的系统是最新的,这可以修复已知的安全漏洞和bug。使用以下命令进行更新:#对于基于Debian的系统(如Ubuntu......
  • Mongodb性能优化方法
    学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第82篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。Mongodb与其他数据库类似,当面临大量数据查询时,......
  • P8592 『JROI-8』颅脑损伤 2.0(加强版)(线性 dp + 单调队列优化)
    P8592『JROI-8』颅脑损伤2.0(加强版)线性dp+单调队列优化最优化问题,考虑dp。先离散化,按左端点排序,设\(f_i\)表示考虑完前\(i\)条线段符合条件的染色,最小长度和。转移枚举上一条红色线段\(j\),\(f_i=f_j+len_i\)。当然\(j\)需要满足题目的条件,即\((j,i)\)中的黑色线......
  • Spring Boot应用启动慢的原因分析及优化方法
    在使用SpringBoot进行开发时,快速启动应用程序是一个非常重要的需求。然而,在某些情况下,我们会遇到SpringBoot应用启动缓慢的问题。本文将分析SpringBoot应用启动慢的常见原因,并提供一些优化方法,帮助你提升应用启动速度。一、SpringBoot应用启动慢的常见原因1.过多的自......