基于LightGBM算法的数据回归预测 LightGBM回归 matlab代码 注:暂无Matlab版本要求 -- 推荐 2018B 版本及以上 注:仅支持 Windows 64位系统
直接开整,咱们今天聊点实在的——用Matlab搞LightGBM回归预测。虽然官方没明说版本限制,但实测2018B之后的版本兼容性更稳,尤其是Windows系统下跑起来不容易报妖蛾子。
环境配置先走起
- 到LightGBM官网下Windows预编译包,解压扔到Matlab能找着的路径
- 在Matlab命令行敲
mex -setup确认C++编译器可用(没装的先去装VS2015以上) - 把lgbm.dll扔进系统环境变量或者当前工作目录
上代码不废话
% 数据准备(以波士顿房价为例) data = readtable('boston.csv'); X = table2array(data(:,1:end-1)); y = data.medv; [train_X, test_X, train_y, test_y] = train_test_split(X, y, 0.8); % 转成LightGBM需要的格式 lgb_train = lgbm.Dataset(train_X, train_y); lgb_val = lgbm.Dataset(test_X, test_y, 'reference', lgb_train); % 参数设置(重点看注释) params = struct(... 'objective', 'regression',... % 回归任务 'metric', {'l2'},... % 用MSE评估 'num_leaves', 31,... % 单棵树复杂度控制 'learning_rate', 0.05,... % 步子别太大容易扯 'feature_fraction', 0.9,... % 防过拟合神器 'verbosity', -1); % 闭嘴模式 % 开练! model = lgbm.train(params, lgb_train, 500, lgb_val); % 预测与评估 preds = model.predict(test_X); mse = mean((preds - test_y).^2); fprintf('实测MSE: %.4f\n', mse);参数调优三板斧
num_leaves别超过特征数量的2倍,32-256之间试mindatain_leaf设个20-100防止过拟合featurefraction和baggingfraction搭配使用效果更佳
避坑指南
遇到过Invalid data format报错?八成是数据没转double型。用X = double(X)强制转换解决。预测时如果出现负值,试试在参数里加'mindatainleaf':20和'lambdal1':0.1约束下输出范围。
可视化部分可以上Matlab传统艺能:
scatter(test_y, preds); hold on; plot([min(test_y), max(test_y)], [min(test_y), max(test_y)], 'r--'); xlabel('实际值'); ylabel('预测值'); title('LightGBM回归效果');这张散点图能直观看出预测值和真实值的贴合程度,点越靠近红色虚线说明预测越准。