位置: IT常识 - 正文

Sklearn GridSearchCV跑SVM很慢或卡死解决办法,SVM线性核函数卡死

编辑:rootadmin
Sklearn GridSearchCV跑SVM很慢或卡死解决办法,SVM线性核函数卡死

推荐整理分享Sklearn GridSearchCV跑SVM很慢或卡死解决办法,SVM线性核函数卡死,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

今天跑人工智能SVM实验,想试一下线性核函数,结果卡死了,很久也不出结果,但之前使用高斯核函数是没问题的。历经千辛万苦终于找到了原因,记录一下,希望对后人有帮助。本人只是个做作业的小菜菜,如有不对欢迎指正!

参考了以下文章:

关于Python Sklearn SVM 为什么运行很慢得到结果的原因 https://blog.csdn.net/zhike5110/article/details/88878812

大致原因

SVM需要不断寻找最能区分数据的超平面,直至收敛。我们以线性(Linear)核函数为例,如果数据间有明显的线性关系时,SVM就能很快找到这个超平面,达到收敛。但如果数据间无明显的线性关系,即使数据量很小,也很难找到这个超平面,导致迟迟不收敛。具体解释请看上面附的原文章。

解决方法原代码

我原来的代码如下。使用的是线性核函数。

import timefrom sklearn.metrics import accuracy_scorefrom sklearn.metrics import f1_scorefrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import GridSearchCVfrom sklearn.svm import SVC# 读取训练集并切分X, Y = load_data() X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0)# 参数parameters = [ { 'kernel': ['linear'], # 线性核函数 'C': [1 * 10**i for i in range(-3, 11)], 'class_weight': ['balanced'] #样本均衡度 }]# 参数调优 clf = GridSearchCV(estimator=SVC(), param_grid=parameters, cv=8, n_jobs=5, scoring='f1_macro')start = time.time()clf.fit(X_train, y_train)elapsed = time.time() - startprint("Fitting finished in %d min %d s" % (elapsed / 60, elapsed % 60))print("Best set score:{:.2f}".format(clf.best_score_))print("Best parameters:{}".format(clf.best_params_))print("Test set score:{:.2f}".format(clf.score(X_test, y_test)))

使用上面的参数跑了很久也不出结果,把参数组合数量调少也不行。

方法一:限制最大迭代次数

设置最大迭代次数参数max_iter。max_iter默认为-1,表示直至计算出收敛的超平面才停止。将其设为一个合适的正整数即可。

设置max_iter参数:

parameters = [ { 'kernel': ['linear'], # 线性核函数 'C': [1 * 10**i for i in range(-3, 11)], 'class_weight': ['balanced'], # 样本均衡度 'max_iter': [1000000] # 限制最多迭代1000000次 },]

跑了有5分多钟,得到结果:

方法二:改用其他的核函数Sklearn GridSearchCV跑SVM很慢或卡死解决办法,SVM线性核函数卡死

改用非线性的核函数,比如常用的高斯核函数(也叫径向基核函数)、多项式核函数,可能能够正常收敛。

采用高斯核函数(Radial Basis Function,RBF)

采用高斯核函数,参数如下:

parameters = [ { 'kernel': ['rbf'], # 高斯核函数 'C': [1 * 10**i for i in range(-3, 11)], 'gamma': [1 * 10**i for i in range(-10, 4)], 'class_weight': ['balanced'] # 样本均衡度 }]

参数组合数量翻倍了,需要耐心等待。训练时间56分钟,结果:

采用多项式核函数(Polynomial Kernel)

我又尝试了多项式核函数,但对于我的数据仍然不好收敛,因此,只好也加上max_iter参数:

parameters = [ { 'kernel': ['poly'],# 多项式核函数 'C': [1 * 10**i for i in range(-3, 11)], 'degree': range(2, 10), 'class_weight': ['balanced'], #样本均衡度 'max_iter': [1000000]# 限制最多迭代1000000次 }]

参数组合数量仍然比较多。训练时间85分钟。结果如下:

换核函数还是不行?

原因是不同的参数组合也会影响收敛的速度。比如在我的实验中,采用高斯核函数,如果gamma设置过小也迟迟不出结果。建议解决方法如下:

先使用少的参数组合数量,降低试错成本。先不要刚上来就设置过多的参数组合数量,要不然跑的太慢,你无法知道是正常在跑还是收敛慢了,最后跑了几个小时跑不出来才发现不对劲。如果用少量的参数组合很快跑出来了,就尝试加多参数组合数量,看还能不能跑出来;也可以设置一个较大的max_iter参数。这样的话能防止收敛慢的参数组合无限制地跑下去,正常收敛的参数组合也不会受影响。SVM教程推荐

推荐浙江大学胡浩基老师的SVM课程,讲的非常清楚:

浙大胡浩基老师SVM: https://www.bilibili.com/video/BV1jt4y1E7BQ/?spm_id_from=333.337.search-card.all.click&vd_source=44f1ad5d101e28cd116fe2918182d1b6

B站也有胡老师完整的机器学习课程视频,感兴趣的同学可以去找找。

本文链接地址:https://www.jiuchutong.com/zhishi/299197.html 转载请保留说明!

上一篇:ZED2跑ORB-SLAM3+双目相机、IMU联合标定+显卡驱动与cuda/cudnn安装

下一篇:【node进阶】浅析Koa框架---ejs模板|文件上传|操作mongoDB(node教程)

  • 石油税费是多少
  • 建筑业一般纳税人可以开3%的发票吗
  • 异地预缴的企业所得税可以抵扣吗
  • 公司账户进账必须交税吗
  • 发票未到已验收什么意思
  • 核定征收率怎么算的
  • 计提工资需要纳税调整吗
  • 房企视同买断销售的所得税处理
  • 房产租赁合同印花税
  • 卖二手车怎么做账务处理
  • 固定资产一次性扣除政策2023
  • 某企业月末由仓库转来发料凭证汇总表
  • 小规模纳税人月超15万季度不超45万
  • 蔬菜批发公司销售蔬菜是否免税
  • 资源税扣缴义务人代扣代缴税款的纳税义务发生时间
  • 安全生产费用包含哪些
  • 专用发票的开票人收款人复核人都要开齐吗
  • 水利建设基金多交可以退么
  • 面粉厂怎样做帐,税率是多少?
  • 一次发放数月的高温津贴如何计算个税?
  • 工厂的劳务加工有哪些
  • mac安装软件提示需要更高版本
  • win7系统中如何让未响应的程序继续运行
  • 贴现利息会计处理
  • windows11怎么设置默认应用
  • 个人所得税专项扣除夫妻双方都填吗?
  • 如何删除文档中多余的页
  • 多付货款退回的法律依据
  • 哪一年底,由linux基金会成立?
  • 公司一直没有收入怎么办
  • thinkphp批量修改
  • 商业汇票的承兑银行必须具备下列条件
  • php sha1加密 解密
  • 简述时期指标和时点指标的特点
  • 一天撸一个财务APP系统【安卓端+前端+后端】
  • 机器学习期末复习题
  • 命令启动服务管理
  • 帝国cms功能
  • 取得了水电费发票怎么做
  • 培训机构账务处理
  • 中药饮片盘点误差范围
  • 差额纳税的劳务派遣安保服务征收率
  • 税率开错了会影响贷款吗
  • 劳务派遣人员保险
  • 个税没有达到起征点能摇号吗
  • 库存现金总分类账
  • 存货计提减值准备对所得税的影响
  • 递延所得税资产和负债账务处理
  • 收到其他企业投资是属于其他业务收入吗
  • 小规模纳税人附加税减半征收
  • 母公司代发子公司工资,子公司申报个税
  • 职工教育经费住宿费用可以抵扣吗
  • mysql int(3)与int(11)的区别详解
  • sql server数据库使用
  • windows2008关闭ie增强
  • win2008r
  • 怎样取消开机磁盘自动检查
  • 苹果mac最新的系统
  • linux使用范围
  • ServiceLayer.exe - ServiceLayer是什么进程 有什么用
  • w10系统有什么好处
  • win8初始登录账号密码
  • 安装与配置linux操作系统
  • linux怎样使用
  • cocos2djs教程
  • js实现图片放大功能
  • ExtJS4中的requires使用方法示例介绍
  • javascript零基础学要学多久
  • js oncontextmenu事件使用详解
  • 搭建入门
  • nodejs示例
  • python socket模块
  • 江西烟草公司局长
  • 农机行业的市场前景
  • 学费报销找学校哪个部门
  • 税收科研工作思路
  • 汽车公司户转个人户
  • 重庆国税电子税务局
  • 手撕发票查询真伪平台
  • 国税湖南电子税务局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设