机器学习是比较宽泛的概念,从国赛历年优秀论文来看,机器学习越来越成为优秀论文不可或缺的因素之一。因此,从本篇开始将进入到机器学习的简单应用。此篇博文将简单记录机器学习的一些基础概念、评判标准和matlab工具箱的使用。由于笔者有一定机器学习基础,因此仅记录比较重要的一些概念,小白阅读可能产生一定难度,更多基础概念可以拉到底部参考资料观看视频了解。
回归问题的评估指标
回归问题是监督学习的内容之一。 评判回归模型的好坏有以下几个指标:
其中,均方根误差RMSE用得最多,可以优先选择使用。
分类问题的评估指标
分类问题是监督学习的另一部分的内容。
首先要理解正类
的概念:
“在机器学习中,我们通常将更关注的事件定义为正类事件。(生活中我们通常会更关注那些结果不好的情况的出现) ”——周志华《机器学习》
正类,比如医学中,肿瘤阳性就是正类。
分类之后,可以得到混淆矩阵
:
评判分类模型的好坏有以下几个指标:
- 分类准确率(Accuracy)
- 查全率或召回率(Recall,记为 R)
- 查准率或精确率(Precision,记为 P)
用查坏人的例子可以通俗理解查全率R和查准率P: 查全率 R: 宁可错杀一千个好人,不可漏过一个坏人。(全部识别成坏人时查全率为 1) 查准率 P: 宁可漏过坏人,不可错杀无辜的好人。(让 FP 尽量小一点,没有充足的证据不会轻易判断一个人是坏人)
- F1分数(F1 Score) F1 分数是查全率和查准率的调和平均数。
化简得到:
- ROC 曲线和 AUC
将不同的模型的 ROC 曲线绘制在同一张图内,最靠近左上角的那条曲线代表的模型的分类效果最好。
留出法
将样本分成训练集和测试集,通过测试集来反应模型的泛化能力,该方法被称作留出法。 缺陷:训练的样本数量减少。
k 折交叉验证
为了弥补留出法的缺陷,提出k 折交叉验证法。 我们先将数据集 D 随机的划分为 k 个大小相似的互斥子集。每一次用 k-1 个子集的并集作为训练集,剩下的一个子集作为测试集;这样就可以获得 k 组训练/测试集,从而可进行 k 次训练和测试,最终返回的是这 k 次测试的平均结果,通常 k 取 10,此时称为 10 折交叉验证。
图片很容易理解,相当于10份样本轮流做测试集,最后返回的是平均结果。 注意!!该方法仅用来进行筛选模型的好坏,筛选出来的模型不能直接用,要将所有样本全部导入训练再用,否则,浪费了1/k(一份)的样本。
过拟合的原因和解决方法
原因: 1.模型中参数设置的过多导致模型过于复杂 2.训练集的样本量不够 3.输入了某些完全错误的的特征(例如:用人的身高来判别西瓜的好坏)
解决方法: 1.通过前面介绍的交叉验证的方法来选择合适的模型,并对参数进行调节 2.扩大样本数量、训练更多的数据 3.对模型中的参数增加正则化(即增加惩罚项,参数越多惩罚越大)
欠拟合的解决方法
1.增加模型的参数 2.从数据中挖掘更多的特征来增加输入的变量 3.选择更加复杂的模型 4.使用一些集成算法(如装袋法(Bagging),提升法(Boosting))
Classification Learner工具箱实操
Classification Learner工具箱简介
Classification Learner是matlab自带的一个工具箱,里面内置了多种机器学习模型可供调用,无需编程,一键搞定。
导入数据
下面以著名的多分类鸢尾花数据集为例。
在matlab中选择导入数据
144组训练集作为d1:
6组测试集作为d2:
工具箱设置
选择Classification Learner工具箱:
新建会话
选择交叉验证方法,K设置为10折。
选择全部模型,开始训练:
训练结果演示
训练好之后,matlab会自动将准确度最高的模型标注出来:
此外,还有ROC曲线之类的图像可供选择,可以放到论文里。
导出模型
选择效果最好的模型,勾选导出
模型预测
有了模型之后,可以将d2测试集导进去进行预测。
代码语言:javascript复制 yfit = trainedModel.predictFcn(d2)
trainedModel是导出模型的默认名字。 运行完之后,预测结果会在命令行进行打印。
注:matlab导出模型后,会自动运用所有的数据(full model),因此不用担心是否因交叉验证而丢失一组数据。
论文应用
在2020国赛C题中,有一篇论文使用了该工具箱,并将结果非常清晰地展现了出来。 排版简洁工整,值得学习:
完整的论文我上传到了我的资源内2020国赛C题优秀论文
参考资料
本博文视频和内容主要参考自数学建模清风第四次直播:利用matlab快速实现机器学习