Question
Hi I ran a hyperparameter optimization to find the best parameters for a two-class classification problem using fitcensemble. But when I try to use these I get a strange warning: Warning: You must pass 'SplitCriterion' as a character vector 'mse' for regression. What is wrong with my code? The warning comes when I use a boosting ensemble as 'method'. When I remove the 'SplitCriterion' everything works fine, but I cannot understand why Matlab somewhere on the line thinks this is a regression problem when I use fit"c"ensemble. Here is a toy example with arbitrarily chosen settings that you can run to reproduce the Warning/Error. load carsmall X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,Model_Year,Weight,MPG); X.Cylinders(X.Cylinders < 8) = 0; % Create two classes in the Cylinders variable t = templateTree( 'MaxNumSplits', 30,... 'MinLeafSize', 10,... 'SplitCriterion', 'gdi'); classificationEnsemble = fitcensemble(X,'Cylinders',... 'Method', 'LogitBoost', ... 'NumLearningCycles',12,... 'Learners',t,... 'KFold',7,... 'LearnRate',0.1);
Expert Answer
John Williams
PhD Expert
Answered Aug 31, 2026
This is a bug in the search space for hyperparameter optimization in fitcensemble, which will cause it to evaluate some unnecessary points. During the optimization, whenever 'Method' is LogitBoost or GentleBoost, 'SplitCriterion' is always internally set to 'mse'. But the search space is defined in a way that doesn't acknowledge that, so it unnecessarily passes SplitCrierion values of 'gdi' and 'deviance' during the optimization.
So all points that you see with LogitBoost/gdi and LogitBoost/deviance are really just LogitBoost/mse.
Oddly, you are not allowed to explicitly specify 'SplitCriterion','mse' with fitcensemble. Instead, when LogitBoost or GentleBoost are used, you need to omit the SplitCriterion argument entirely.
The optimization results are still valid. You just need to adjust what arguments you pass to fitcensemble at the end. The simple fix in your case is to delete line 8 of your original code sample, which specifies the SplitCriterion. Here's the result:
load carsmall
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,Model_Year,Weight,MPG);
X.Cylinders(X.Cylinders < 8) = 0; % Create two classes in the Cylinders variable
t = templateTree( 'MaxNumSplits', 30,...
'MinLeafSize', 10);
classificationEnsemble = fitcensemble(X,'Cylinders',...
'Method', 'LogitBoost', ...
'NumLearningCycles',12,...
'Learners',t,...
'KFold',7,...
'LearnRate',0.1);
100% Run Guarantee
3-Hour Fast-Track Delivery
Need a Custom Version or Complete Simulation for This Problem?
Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.
Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here
Related AI Questions & Solutions
Browse All →
Explore similar technical troubleshooting questions and verified MATLAB solutions:
Ready-to-Run MATLAB & Simulink Projects
Browse All Projects →