从分类到回归:用LibSVM+Matlab搞定你的第一个机器学习项目(附完整代码与数据集)

发布时间:2026/6/2 15:43:08

从分类到回归:用LibSVM+Matlab搞定你的第一个机器学习项目(附完整代码与数据集) 从分类到回归用LibSVMMatlab搞定你的第一个机器学习项目机器学习不再是实验室里的神秘黑箱而是每个工程师和研究者工具箱里的实用利器。当你手握LibSVM这样强大的支持向量机库配合Matlab的交互式环境就能快速验证各种机器学习想法。本文将带你完整走通一个微型项目流程从鸢尾花分类到波士顿房价回归用实际代码演示如何让LibSVM解决真实问题。1. 项目准备与环境配置虽然我们假设读者已经完成LibSVM的基本安装但这里有几个实战中容易忽略的配置细节值得注意% 检查LibSVM是否在Matlab路径中 if exist(libsvmtrain, file) ~ 3 error(请先将LibSVM的matlab目录添加到路径); end % 设置随机种子保证实验可复现 rng(42);关键工具准备清单Matlab R2018b或更新版本LibSVM 3.25 (建议使用最新版)数据集UCI Iris和Boston Housing可视化工具Matlab统计与机器学习工具箱提示在长期项目中建议创建专门的实验环境配置脚本记录所有依赖库的版本信息。2. 分类实战鸢尾花物种识别2.1 数据加载与探索我们从UCI获取经典的鸢尾花数据集这个三分类问题非常适合入门% 加载数据 load fisheriris X meas; % 150x4的特征矩阵 Y grp2idx(species); % 将类别标签转为数字 % 查看数据分布 figure gscatter(X(:,1), X(:,2), species, rgb, osd); xlabel(花萼长度); ylabel(花萼宽度); title(鸢尾花前两维特征分布);特征统计摘要特征均值标准差最小值最大值花萼长度5.8430.8284.3007.900花萼宽度3.0570.4362.0004.400花瓣长度3.7581.7651.0006.900花瓣宽度1.1990.7620.1002.5002.2 模型训练与评估我们使用RBF核函数进行多分类% 划分训练测试集(70%-30%) cv cvpartition(Y, HoldOut, 0.3); X_train X(cv.training,:); Y_train Y(cv.training); X_test X(cv.test,:); Y_test Y(cv.test); % 训练模型 model libsvmtrain(Y_train, X_train, -s 0 -t 2 -c 10 -g 0.5); % 预测测试集 [pred, acc, ~] libsvmpredict(Y_test, X_test, model);参数选择经验-c(惩罚系数)从小值(如0.1)开始尝试逐步增大-g(gamma)通常设为特征数的倒数附近-t 2表示使用RBF核适合大多数非线性问题3. 回归实战波士顿房价预测3.1 数据预处理回归任务需要不同的数据处理方式% 加载数据 load boston.mat % 包含housing数据和price标签 % 数据标准化 X zscore(housing); Y price; % 检查离群值 boxplot(Y); title(房价分布箱线图);特征工程技巧对偏态分布的特征取对数对分类特征进行独热编码使用PCA降维消除多重共线性3.2 回归模型实现使用ε-SVR进行房价预测% 设置SVR参数 params -s 3 -t 2 -c 5 -g 0.1 -p 0.5; % 5折交叉验证 mse libsvmcrossval(Y, X, params, 5); % 全数据训练 model libsvmtrain(Y, X, params); % 预测效果可视化 pred libsvmpredict(Y, X, model); plot(Y, pred, bo); hold on; plot([min(Y) max(Y)], [min(Y) max(Y)], r--); xlabel(实际价格); ylabel(预测价格);4. 模型优化与调参技巧4.1 网格搜索实现自动化参数搜索能显著提升模型性能% 定义搜索范围 c_range 2.^(-5:2:15); g_range 2.^(-15:2:3); % 初始化最佳参数 best_acc 0; best_c 0; best_g 0; % 网格搜索 for c c_range for g g_range acc libsvmcrossval(Y_train, X_train, ... sprintf(-s 0 -t 2 -c %f -g %f, c, g), 5); if acc best_acc best_acc acc; best_c c; best_g g; end end end4.2 高级优化策略贝叶斯优化示例% 定义优化目标函数 obj_fun (params) -libsvmcrossval(Y_train, X_train, ... sprintf(-s 0 -t 2 -c %f -g %f, exp(params.logc), exp(params.logg)), 5); % 设置优化参数 params struct(logc, 0, logg, 0); results bayesopt(obj_fun, params, Verbose, 1);模型选择参考表问题类型推荐-s参数适用核函数典型应用场景多分类0 (C-SVC)RBF (-t 2)图像分类、物种识别回归3 (ε-SVR)线性 (-t 0)房价预测、销量预估异常检测2 (One-class)多项式 (-t 1)工业缺陷检测5. 结果可视化与报告生成5.1 分类决策边界可视化能直观理解模型工作原理% 选择两个特征进行可视化 [~,~,~,auc] perfcurve(Y_test, pred, 1); fprintf(AUC: %.2f\n, auc); % 绘制决策边界 d 0.02; [x1,x2] meshgrid(min(X(:,1)):d:max(X(:,1)), ... min(X(:,2)):d:max(X(:,2))); X_grid [x1(:), x2(:), repmat(mean(X(:,3:4),1), numel(x1), 1)]; pred_grid libsvmpredict(ones(size(X_grid,1),1), X_grid, model);5.2 回归诊断图检查回归模型的残差分布residuals Y - pred; figure subplot(1,2,1); plot(pred, residuals, o); xlabel(预测值); ylabel(残差); title(残差图); subplot(1,2,2); normplot(residuals); title(残差正态性检验);在真实项目中我通常会保存关键图表和参数设置到项目报告里。一个实用的技巧是使用Matlab的publish功能自动生成HTML报告options struct(format, html, outputDir, ./report); publish(svm_project.m, options);

相关新闻