使用libsvm时遇到MATLAB has encountered an internal problem and needs to close

最近在MATLAB中使用libsvm跑别人的程序,该程序在大部分数据集上可以正常运行,但在有一个数据集上运行时MATLAB会报“MATLAB has encountered an internal problem and needs to close”的错误:

凭直觉猜应该是数据集有啥问题,但又很奇怪为什么数据集有问题会导致MATLAB本身出错。查了一下程序,感觉应该是调用的libsvm所致。于是仔细排查了一下,发现错误是因为某些训练集是空集所致。为了验证我的猜想,我写了个程序复现了一下这个错误:

%demo_libsvm_error
clear;clc;close all;
X = rand(10,3);
y = (rand(10,1)>0.5)*2-1;

%normal case
svmmodel = svmtrain(y, X, '-q');
y_predict = svmpredict(ones(10,1), X, svmmodel);

%error case
idx = (y==0);%nonexist case
X_s = X(idx,:);
y_s = y(idx);
svmmodel_s = svmtrain(y_s, X_s, '-q');
y_predict = svmpredict(ones(10,1), X, svmmodel_s);

代码开头是生成了一个二分类数据集,X是特征矩阵(每行是一个示例),y是标记向量(+1和-1两个类别);然后是正常使用libsvm训练分类模型并进行预测,这里要保证将libsvm软件包中windows文件夹下的svmtrain.mexw64和svmpredict.mexw64与上面代码文件放在同一个目录下;最后是复现出错的场景,“idx = (y==0)”是为了产生一个空集,然后基于它从生成的训练集中选样本,肯定选出来的X_s和y_s也是空集,然后再使用libsvm基于X_s和y_s进行训练,这里也是不报错的,最后一行是使用训练所得模型做预测,然后就会产生本文开头所说的error。

本错误与libsvm版本无关,错误是在我一直用的libsvm上发现的(记不清是哪个版本了),我使用最新版的libsvm (Version 3.34, August 2024)进行了测试,也会出现一样的错误。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值