嵌入式+LoRaWAN智能输液监控系统设计与实现
2026/9/19 6:43:46
第一次做机器学习毕设,我信心满满地打开 MATLAB,三行代码写完fitcsvm,准确率 98%,截图往论文里一贴,以为稳了。结果答辩老师一句“随机种子是多少”直接把我问懵。后来才意识到:
这些“低级错误”其实年年有人犯。本文就把我从踩坑到填坑的完整流程拆给你看,照着做,至少能把“可复现”这三个字写进论文。
先放结论:教学场景、单人毕设、deadline 紧,MATLAB 真香;工业级大模型、多卡分布式,再去拥抱 Python。
| 维度 | MATLAB | Python |
|---|---|---|
| 安装成本 | 学校机房自带,工具箱一键装 | 自己配 conda、CUDA、sklearn 版本 |
| 可视化 | 拖个ClassificationLearner就能出 ROC 曲线 | 得自己调 matplotlib、seaborn |
| 文档友好度 | 官方示例一句一句解释 | Stack Overflow 翻半天 |
| 代码量 | 30 行搞定端到端 | 同样功能 80 行起步 |
一句话:想“快速跑出能写进论文的图”,MATLAB 是最短路径。
下面用 UCI 的鸢尾花数据集演示“标准流程”。每行都带注释,复制即可运行。
图:MATLAB 分类学习器 App 一键出图,省掉手写绘图代码
确保安装:
%% 0. 可复现性种子 clear; clc; close all; rng(2024); % 固定随机流,论文必须写! %% 1. 数据加载 tbl = readtable('iris.csv'); % 首行为表头,末列为标签 X = tbl(:, 1:end-1); % 特征 Y = tbl.(end); % 标签,cellstr 转 nominal Y = categorical(Y); %% 2. 训练/测试划分(分层抽样) cv = cvpartition(Y, 'HoldOut', 0.3, 'Stratify', true); XTrain = X(training(cv), :); YTrain = Y(training(cv), :); XTest = X(test(cv), :); YTest = Y(test(cv), :); %% 3. 归一化(仅拟合训练数据) [Z, mu, sigma] = zscore(XTrain); % 返回参数供测试集使用 XTrainZ = Z; XTestZ = (XTest - mu) ./ sigma; % 防止信息泄露 %% 4. 模型训练:线性 SVM svmMdl = fitcsvm(XTrainZ, YTrain, ... 'KernelFunction','linear', ... 'Standardize',false, ... % 已手动归一化 'ClassNames', categories(Y)); %% 5. 预测与评估 [YPred, score] = predict(svmMdl, XTestZ); C = confusionchart(YTest, YPred); % 混淆矩阵图 title('Test-Set Confusion Matrix'); %% 6. ROC 曲线(多类别:One-vs-All) [~,~,~,AUC] = perfcurve(YTest, score, 'versicolor'); fprintf('AUC for versicolor = %.3f\n', AUC);运行完直接得到:
cvpartition做分层抽样,类别比例一致XTrainZ比x1更易读,Z 代表已归一化.m文件只做一件事,主脚本、绘图、工具函数分开放confusionchart替代confusionmat,老版本机房注意回退print(gcf, '-dpng', '-r300', 'confusion.png')比截图清晰 10 倍fisheriris,无需额外伦理审批”saveas报错,把工程放D:\GradProject\.m而非 Live Scriptsaveas(gcf, 'roc.eps', 'epsc2'),Word 插入不糊git add .,防止最后一晚手抖删库做完这 5 步,你就拥有了“可复现 + 可视化 + 合规”的毕设最小闭环。剩下的就是调参、堆特征、写故事。祝顺利过答辩!