查看: 145|回复: 0|关注: 0

[未答复] 较高版本支持向量机的函数fitcsvm使用问题

[复制链接]

新手

16 麦片

财富积分


050


5

主题

30

帖子

0

最佳答案
  • 关注者: 1
发表于 2020-8-2 14:39:29 | 显示全部楼层 |阅读模式
前提:本人使用R2018a版本,需要做支持向量机先分类再拟合,使用的代码是Faruto大神的libsvm-3.1[FarutoUltimate3.1Mcode]工具箱,自己对其中的SVR和SVC进行了修改,可以导出建好的模型,分别为SVRMd和SVCMd。

问题1:本人需要在遥感影像分类的基础上,对其中某一类样本进行拟合回归,但结果差强人意。分类分的不够细致,在两种地物边缘分类不清楚,针对这种问题,该如何改进?是需要重新提取训练集吗?

问题2:我查看了fitcsvm函数的说明文档,其中仅有关于分类的说明,而我在csdn上查到了回归案例,对比了分类和回归的代码,没有发现关于classification或regression的字样,那么问题来了,该函数是如何分辨执行的任务是分类还是回归呢?
  1. %用于回归的代码:
  2. load carsmall
  3. rng 'default'  % For reproducibility
  4. X = [Horsepower Weight];
  5. Y = MPG;
  6. % 使用5-fold交叉验证对两个SVM回归模型进行交叉验证。
  7. % 对于这两种模型,请指定以标准化预测变量。 对于其中一个模型,
  8. % 指定使用默认线性核进行训练,而对于另一个模型,则指定使用高斯核。
  9. MdlLin = fitrsvm(X,Y,'Standardize',true,'KFold',5)
  10. MdlGau = fitrsvm(X,Y,'Standardize',true,'KFold',5,'KernelFunction','rbf')
  11. mseLin = kfoldLoss(MdlLin)
  12. mseGau = kfoldLoss(MdlGau)
  13. % 使用fitrsvm自动优化超参数。通过使用自动超参数优化,找到使交叉验证损失减少五倍的超参数。
  14. rng default
  15. Mdl = fitrsvm(X,Y,'OptimizeHyperparameters','auto',...
  16.     'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
  17.     'expected-improvement-plus'))
  18. % 预测
  19. fit = predict(Mdl,X)
  20. % plot(Y,fit,'.')
复制代码
  1. %用于分类的代码(来自说明文档)
  2. load ionosphere
  3. rng(1); % For reproducibility
  4. SVMModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF',...
  5.     'KernelScale','auto');
  6. CVSVMModel = crossval(SVMModel);
  7. classLoss = kfoldLoss(CVSVMModel)
复制代码

问题3:在我使用的Faruto大神的工具箱中,针对拟合和回归的c、g选优,可以选择使用PSO等,如何对其进行改造,仍使用这些方法进行参数寻优,并将最优cg放入fitcsvm中?

问题4:我在使用随机森林时,发现可以使用parpool进行并行计算,其调用方法如下。在TreeBagger函数的说明文档中,没有关于'Options',paroptions的说明,于是我照猫画虎放入fitcsvm中,提示报错。那么该如何将其进行并行运算加快计算速度?
  1.     %随机森林训练
  2. paroptions = statset('UseParallel',true); %设置开启parpool
  3. %训练
  4. RfMod = TreeBagger(...
  5.         ntrees,...
  6.         xTra,yTra,...
  7.         'Method','regression',...
  8.         'oobvarimp','on',...
  9.         'surrogate',surrogate,...
  10.         'minleaf',leaf,...
  11.         'FBoot',fboot,...
  12.         <font color="Red">'Options',paroptions</font>...
  13.     );
复制代码
  1. %照猫画虎SVM
  2. load ionosphere
  3. rng(1); % For reproducibility
  4. SVMModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF',...
  5. 'KernelScale','auto',<font color="Red">'Options',paroptions</font>);
  6. CVSVMModel = crossval(SVMModel);
  7. classLoss = kfoldLoss(CVSVMModel)

  8. <font color="Red">错误使用 classreg.learning.FitTemplate/fillIfNeeded (line 612)
  9. Options is not a valid parameter name.

  10. 出错 classreg.learning.FitTemplate.make (line 124)
  11.             temp = fillIfNeeded(temp,type);

  12. 出错 ClassificationSVM.template (line 235)
  13.             temp = classreg.learning.FitTemplate.make('SVM','type','classification',varargin{:});

  14. 出错 ClassificationSVM.fit (line 239)
  15.             temp = ClassificationSVM.template(varargin{:});

  16. 出错 fitcsvm (line 316)
  17.     obj = ClassificationSVM.fit(X,Y,RemainingArgs{:});</font>

复制代码





回复主题 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表