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創建的分類器。