上两周总结了我在体系化学习运筹学基础知识方面的个人经验,看过那篇文章的人可能知道,今年我还花了很多时间学习机器学习中各种模型的算法原理。
在工业应用中,机器学习和运筹优化之间的交互是非常普遍的,很多场景都需要先用机器学习做预测,然后用运筹优化做决策。因此,机器学习技术对于像我这样的运筹从业者来说,也是需要了解甚至掌握的内容。
昨天把关于SVM的文章发表后,此前拟定的机器学习的体系化学习计划就算全部完成了。所以这篇文章来总结一下,机器学习体系化学习方面的个人经验。
一开始回顾今年在机器学习上的学习计划和完成度时,吓了一跳,因为里面的内容就只有贝叶斯、决策树、决策树集成、神经网络和SVM这5项。
查阅了此前的文章发表记录后才发现,有些内容是我在2022下半年的时候,就已经开始在做了。为了能体系化地梳理内容,本篇文章会把那些文章放到一起去总结。
正文见下。
以下是我制定的学习计划和执行记录,其中带*的日期表示2022年,其他日期表示2023年。
作为一个机器学习方向的小白,首先需要了解机器学习中的基本概念。私以为,其中最重要的内容是如何评估一个模型的好坏,即性能指标。在实际场景时,性能指标不仅用于评估机器学习模型,还经常应用于其他模型的效果评估。
掌握基本概念后,再来学习各种不同的机器学习模型。从图上可以看出,我2023年规划的学习内容主要是经典机器学习模型,而不是现在应用更多的深度神经网络。这不表示学习深度神经网络不重要,而仅仅是因为在机器学习方面我基础薄弱,需要先打好基础。
最后,图中所示的几项内容肯定不是机器学习包含的全部内容,只是作为基础知识存在于我机器学习计划的第一阶段。这里还需要说明的是,机器学习之决策树集成模型中的xgboost和lightgbm在工业场景中的应用频率是非常高的,对于不太复杂的预测问题,它已经可以完美完成任务了。感兴趣的读者可以着重学习一下。
对于机器学习中的每个模型,我给自己预设的目标是两周时间内学习完,最终在今年年中完成所有内容的学习。
从时间完成度来看,除SVM外,其他内容都按时完成了——SVM一直拖到昨天才完成,主要是因为之前已经放弃学习这个了,上个月发现除SVM外的机器学习和运筹优化学习任务都已经提前完成了,这才想着把SVM补上。所以,也算不上超时。
关于完成模型学习,我的定义是,写一篇与模型内容对应的文章,里面至少应该包含3个模块:
第一个是用自己的逻辑描述清楚算法原理。我对自己的要求是,让算法小白都能看懂内容,如果未来真的有机会教书育人,这应该是我宝贵的财富了;
第二个是自己编写代码实现算法全过程。我对自己的要求是,要使用Python实现模型逻辑,并和sklearn的结果做对比,以验证自己是否真的理解了模型的算法原理。
第三个是从运筹角度理解模型的算法原理。我对自己的要求是,对各种预测模型,都使用数学建模(优化变量/目标函数/约束条件)+算法求解这种运筹范式去理解它们。
从内容完成度来看,基本上每一篇模型相关的文章都达到预期了,这个方面,整体是令人满意的。
本节汇总了我体系化学习机器学习算法原理的相关文章和链接,并按照此前的目标设计进行了分类。
分类 | 文章和链接 |
---|---|
概念-性能指标 | 机器学习性能指标 |
概念-交叉验证 | 以K近邻算法为例,使用交叉验证优化模型最佳参数 |
概念-网格搜索 | 以K近邻算法为例,使用网格搜索GridSearchCV优化模型最佳参数 |
模型-K近邻 | K近邻分类算法的Python代码实现 |
模型-线性模型 | 线性回归和Python代码实现 线性模型优化:岭回归和Lasso回归 |
模型-逻辑回归 | 逻辑回归模型和Python代码实现 |
模型-贝叶斯 | 朴素贝叶斯分类算法和实例演示 |
模型-决策树 | 决策树入门、sklearn实现、原理解读和算法分析 |
模型-决策树集成 | 随机森林原理和性能分析 花了3周理解的xgboost算法原理 |
模型-神经网络 | 多层感知机(MLP)算法原理和代码实现 |
模型-SVM | 半生不熟的SVM算法原理解读 |
针对机器学习算法原理的体系化学习和感悟,总结如下:
首先,机器学习完美诠释了建模的重要性。 机器学习要解决的问题只有就分类和回归两种场景,但是预测模型就非常多了。从不同角度出发,可以得到不同的最优化模型,然后针对模型的个性化特点,选用不同的求解算法甚至是单独开发和改进出新的算法,最终得到不同的预测效果。而这一切的根源,就在于数学建模上的差异。
其次,尽量从运筹角度去理解机器学习的算法原理。 学习机器学习对我个人来说,可以理解为技术栈的拓宽,所以不需要像专业大佬一样全方位无死角地理解。为了能更好地将机器学习内容整合到我已有的知识框架中,我始终使用数学建模+算法求解这种运筹范式去学习各种模型。一方面,可以降低我学习的难度;另一方面,还能提升我学习的乐趣。
最后,心态上要能沉得下去。 零零散散的,我在机器学习上花了一年半左右的时间了。坦白来说,好像也没有带来什么直观的正向改变。但在学习过程中,我心态一直很平稳,不奢望有立竿见影的效果,甚至感觉只给自己画一张小饼;逐个完成那些预设的任务后,慢慢就会有一点点成就感,进而转化为继续学习的动力,然后循环往复。
明年在拓宽技术栈方面的文章主题,偷偷预告一下,大概率是因果推断,即,判断某个动作(treatment)和最终结果之间的因果效应。
选择这个主题的主要原因是,我目前在工作上(最优定价)很需要因果推断方面的相关知识。希望明年能小有所得,继续给大家分享我的学习过程和经验总结。
最后的最后,依然是期待大家都能持之以恒地做一件件小事,积少成多,厚积薄发。