matlab2016版本无法兼容matlab2018版本Classification Learner创建的分类器
在java环境下,使用matlab2016版本调用matlab2018版本Classification Learner创建的分类器,步骤如下:
保持matlab java版本与系统版本一致,eclipse版本可不一致
1. 提取模型:使用显式函数调用模型(类似MATLAB Coder方式,因为java不支持函数句柄)
saveCompactModel(trainedModel.ClassificationEnsemble,'ClassificationLearnerModel')
model = loadCompactModel('ClassificationLearnerModel');
2. 自定义StructToModel,原因:fromStructFcn 函数句柄无法识别
% fromStructFcn = str2func(compactStruct.FromStructFcn);
obj = classreg.learning.classif.CompactClassificationEnsemble.fromStruct(compactStruct);
3. 文件覆盖:使用2018版本文件覆盖2016版本的 %MATLAB_home%\%version%\toolbox\stats\classreg 所有文件
4. 改回相应分类器的mex文件至2016版本
5. 创建jar包一次,根据java错误提示注释分类器m文件中Adapter语句
6. fromStruct无法识别,遂手动保存并读取obj文件
% fromStructFcn = str2func(compactStruct.FromStructFcn);
% obj = classreg.learning.classif.CompactClassificationEnsemble.fromStruct(compactStruct);
obj = load('obj.mat');
obj = obj.obj;
下面就能在matlab2016环境下,用matlab complier创建jar包了,经测试能正常调用matlab2018创建的分类器。