常见机器学习算法概览
机器学习算法多种多样,本报告重点介绍几种最常用且具有代表性的算法:逻辑回归、决策树与随机森林、梯度提升树(以XGBoost为代表)和神经网络。这些算法涵盖了从传统简单模型到更复杂的集成学习和深度学习方法。对于每种算法,我们将说明其核心思想、基本数学原理(用直观方式解读)、适用的场景,并简单提及如何用代码调用。
决策树与随机森林(Decision Tree & Random Forest)
决策树(Decision Tree)是一种树形结构的预测模型,它通过一系列规则判断来对输入数据进行分类或回归。可以把决策树想象成一个20问游戏:每个内部节点提出一个关于特征的问题,根据回答(是/否或区间判断)将数据分流到下一层节点,直到到达叶子节点,叶子节点给出预测结果(类别或数值)。
例如,一个简单的员工离职预测决策树可能先问“工龄是否超过5年?”,如果是则询问“当前岗位是否有晋升?”,根据回答继续分支,最后叶子节点输出“可能离职”或“可能留任”的判断。
决策树的优点在于直观易解释:上述例子中,一条从根到叶子的路径就是一条决策规则,比如“工龄>5年 AND 无晋升机会 -> 离职概率高”。这种可解释性在很多领域受欢迎。而且决策树能处理混合类型特征(数值或类别)而无需专门的预处理,对异常值不敏感,也不要求特征标准化。
但是单棵决策树也有明显缺点:容易过拟合。因为树可以不断细分训练数据,直到每个叶子节点纯净(或达到很少的样本),这往往会把训练集“记住”,导致复杂深树对噪声也建模,泛化性能下降。我们可以通过剪枝(限制树深、叶子最小样本数等)来缓解,但单棵剪枝的树有时预测精度不够高。
为了解决单棵树稳定性差、泛化性不强的问题,机器学习中引入了集成学习(Ensemble Learning)的思想,把多个模型组合起来提高性能。随机森林(Random Forest)就是集成学习中一种经典且强大的方法。它由许多决策树组成,被称为“森林”。随机森林的思想是:训练多颗彼此相对独立的决策树,然后让它们投票决定结果(分类取多数票,回归取平均值)。由于每棵树的训练都有一定的随机性,所以每棵树可能过拟合于不同的细节,但把它们平均起来,往往能抵消单棵树的某些错误,从而提高整体泛化能力。
[!info] 费曼理解
决策树:想象玩"你说我猜"游戏
假设你在玩一个猜动物的游戏,要猜出我心里想的是什么动物。你会怎么问问题?
"它有四条腿吗?"
- 如果是 -> "它会叫汪汪吗?"
- 如果是 -> "那就是狗!"
- 如果不是 -> "它会喵喵叫吗?"
- 如果是 -> "那就是猫!"
- 如果不是 -> 继续问…
- 如果不是 -> "它会飞吗?"…
这就是决策树!每个问题就是树的一个节点,根据回答走向不同的分支,最终到达结论(叶子节点)。在机器学习中,这些问题就是关于数据特征的判断,比如:
- "这个人的工资超过1万吗?"
- "这个顾客的年龄大于30岁吗?"
- "这个房子的面积超过100平方米吗?"
决策树的缺点:记得太死
想象一个特别较真的朋友,他总是用完全相同的方式玩游戏:
- 看到四条腿就一定问"是狗吗?"
- 即使遇到了狮子,也可能因为"四条腿+会叫"就判断是狗
这就是决策树的"过拟合"问题——太死板,不够灵活。随机森林:集体智慧
现在换个玩法:找10个朋友一起玩这个游戏,每个人都可以问不同的问题:
- 小明关注动物的腿
- 小红关注动物的叫声
- 小张关注动物的大小
- …
最后大家投票决定答案。这就是随机森林!
为什么这样更好?
- 多样性:每个人关注的特征不同,视角更全面
- 容错性:即使小明猜错了,其他人的正确判断可以盖过这个错误
- 稳定性:不会因为某个特征的小变化就完全改变判断
就像谚语说的:"三个臭皮匠,顶个诸葛亮"。随机森林正是用这种"集体智慧"的方式,把多个可能不太准确的决策树组合成一个更可靠的预测系统。
实际应用举例
想象你是招聘网站,要预测一个职位的受欢迎程度:
- 决策树可能会问:
- "薪资是否超过15K?"
- "是否是大公司?"
- "是否要求经验少于3年?"
- 随机森林则会让多个决策树从不同角度分析:
- 树1关注薪资和福利
- 树2关注公司规模和行业
- 树3关注工作要求和地点
- …
最后综合所有树的预测,得到更可靠的结果。这就是为什么随机森林在实际应用中比单个决策树更受欢迎——它既保持了决策树的可解释性,又克服了单棵树容易过拟合的缺点。
随机森林之所以称为“随机”,主要有两点随机性来源:
-
Bagging(自助采样):对于训练森林的每棵树,都随机有放回地从训练集抽样(采样大小等于原始训练集大小,故会有重复)。这样每棵树看到的是不同的训练数据子集(约63.2%的独立样本,其余是重复的),使得树和树之间具有差异。这是Breiman提出的装袋法(Bootstrap Aggregating)。
-
随机择特征:在每个候选划分节点时,不考虑所有特征去寻找最佳分割,而是随机选择一部分特征再从中选最佳切分。这进一步引入差异,防止所有树过于相似。例如有100个特征,算法可以在每个节点随机挑选例如100=10个特征,然后只在这10个里找最优划分。这种技巧称为“随机子空间法”。
通过以上两种随机性,随机森林中的各决策树虽然都是在同一数据集上训练,但因为看到了不同的样本和特征子空间,所以彼此之间的相关性较低。最后的集成结果则因为平均了多棵树而降低了方差,模型更加稳定。这种方法特别擅长处理高维特征并且不容易过拟合,常常比单模型取得更高的准确率。
[!note]
让我用简单直观的方式来解释随机森林中的两种随机性:
1. Bagging(自助采样)- 随机选人
想象你是一个学校老师,要组织一场辩论比赛。学校有100名学生,但每个班级只能选30人参加。
传统方法:每个班选择固定的30名"最优秀"的学生。
Bagging方法:每个班老师闭着眼睛随机抽取30个名字(可能重复抽到同一个人)。结果会怎样?
- 传统班级:每个班都是"精英小组",但可能都有相似的思维方式
- Bagging班级:每个班都有不同的学生组合,有的学生可能在多个班出现,有的可能一个班都没进
这就是随机森林中的Bagging!每棵决策树就像一个班级,它们都从同一个"学生池"(训练数据)中抽样,但因为是随机抽取,所以每棵树看到的数据集都略有不同。这种多样性让森林更加健壮。
数学上有个有趣的现象:如果你随机有放回地抽取N个样本(N等于原始数据集大小),平均只会抽到约63.2%的独特样本,其余都是重复的。这就保证了每棵树都有自己的"个性"。
2. 随机择特征 – 限制思考角度
继续辩论比赛的例子:
传统方法:每个班级可以讨论任何话题的任何方面。
随机择特征方法:每次讨论前,老师会随机抽取几个角度,学生只能从这些角度思考问题。比如讨论"环保"话题:
- 班级1只能从"经济成本"和"技术可行性"角度讨论
- 班级2只能从"社会影响"和"政策支持"角度讨论
- 班级3只能从"长期效益"和"国际合作"角度讨论
这样做的好处是什么?每个班级被迫从不同角度深入思考,避免所有班级都只关注最明显的几个方面。当所有班级的观点汇总时,我们得到了一个全面且深入的分析。
在随机森林中,这就是"随机子空间法"。每个节点不是考虑所有特征,而是只考虑随机选择的一部分特征(比如100个特征中随机选10个)。这样做:
- 增加了树与树之间的差异性
- 防止某些强特征主导所有决策
- 迫使模型探索可能被忽视的特征关系
为什么这两种随机性很重要?
想象一个足球队:
- 如果所有队员都是相同类型的前锋,技术相似,那么遇到擅长防守这种打法的对手时,整个队伍都会失效
- 但如果队伍由不同位置、不同风格的球员组成,即使某些球员被限制发挥,其他人仍能找到突破口
随机森林正是这样工作的:
- Bagging确保每棵树看到不同的训练样本
- 随机择特征确保每棵树从不同角度学习
当这些"各有所长"的树一起投票时,它们的集体智慧远超任何单棵树。一些树可能在某些数据点上犯错,但只要大多数树是正确的,最终结果就会是正确的。
这就是为什么随机森林通常比单棵决策树表现更好、更稳定,也不容易过拟合 – 因为它利用了"群体智慧"的力量,而这种智慧来源于多样性,而多样性正是通过这两种随机性机制实现的。
随机森林的特点和应用:
- 强大的建模能力:随机森林能拟合复杂的非线性关系,在很多任务上表现优异。对于表格型数据(数值和类别混合的典型结构化数据),随机森林往往是“开箱即用”的强力算法之一。
- 鲁棒性:由于集成了多棵树,随机森林对少量异常数据或噪声不敏感,稳定性好。即使某些特征缺失或不重要,随机森林仍能很好地工作,因为可能有些树不会使用那些特征。
- 内置特征选择:随机森林可以计算特征重要性(feature importance),根据树节点分裂时带来的信息增益/均方误差降低来衡量。这给我们提供了模型解释的一种方式:重要性高的特征对预测影响大,这在投递量预测项目中可以帮助我们发现哪些因素最影响投递量。后续代码演示会将特征重要性导出。
- 并行可训练:各树可以并行训练(因为彼此独立),在多核或分布式环境下可加速,scikit-learn的实现可以通过参数
n_jobs
利用多核。 - 缺点:随机森林模型虽然相对容易调参(一般调树数、最大深度等),但当特征很多时模型可能较大,预测速度比单模型慢一些(因为要综合许多树的结果)。另外,由于结果是集成的,可解释性不如单棵决策树;尽管有特征重要性,但是无法像决策树那样给出明确的决策规则。
应用场景:随机森林可以用于分类和回归问题。在分类任务上,例如信用卡欺诈检测、用户流失预测等,随机森林常常取得很高的准确率且不需要太多特征标准化工作。在回归任务上,例如房价预测、销量预测等,它也能取得稳健的效果。对于我们关心的职位投递量预测(回归),随机森林是一个不错的候选算法,因为它能处理各种类型的特征并捕捉非线性关系,而且我们可以方便地获得特征重要性来解释结果。事实上,后文的示例代码正是使用了随机森林回归模型。
需要指出,随着数据特征和样本量增加,如果需要进一步提高性能,也有提升树模型可以考虑,这在下节介绍。但随机森林经常作为基准模型或初始尝试,因为它表现可靠。