news 2026/6/15 19:47:16

Day 84:【99天精通Python】机器学习进阶 - 决策树与随机森林

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 84:【99天精通Python】机器学习进阶 - 决策树与随机森林

Day 84:【99天精通Python】机器学习进阶 - 决策树与随机森林

前言

欢迎来到第84天!

逻辑回归是一个线性模型,它试图用一条直线(或超平面)来划分数据。但如果数据的边界是弯弯曲曲的,线性模型就无能为力了。

决策树 (Decision Tree)是一种强大的非线性模型。它通过一系列if/else的问题来对数据进行划分,非常符合人类的决策逻辑。
随机森林 (Random Forest)则是决策树的"威力加强版",通过"集体投票"的方式大大提升了模型的稳定性和准确性。

本节内容:

  • 决策树原理 (信息熵 / 基尼不纯度)
  • 训练与可视化决策树
  • 随机森林:集成学习的力量
  • 特征重要性分析
  • 实战练习:泰坦尼克号生还预测

一、决策树原理

决策树的目标是找到一系列"最优"的切分点。比如判断一个人是否会买电脑:

  • 年龄 > 30 吗?
  • 是学生吗?
  • 收入 > 1万吗?
    它会选择能让数据最"纯"的划分方式(比如按年龄划分后,一边全是"买",另一边全是"不买")。这个"纯度"通常用信息熵基尼不纯度来衡量。

二、训练与可视化

我们继续使用鸢尾花数据集。

fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.treeimportDecisionTreeClassifier,plot_treeimportmatplotlib.pyplotasplt# 加载数据 (3分类问题)iris=load_iris()X,y=iris.data,iris.target X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42)# 1. 创建模型# max_depth=3: 限制树的最大深度,防止过拟合model=DecisionTreeClassifier(max_depth=3)# 2. 训练model.fit(X_train,y_train)print(f"准确率:{model.score(X_test,y_test):.2f}")# 3. 可视化决策树plt.figure(figsize=(15,10))plot_tree(model,feature_names=iris.feature_names,class_names=iris.target_names,filled=True,# 填充颜色rounded=True)# plt.show()

三、随机森林:三个臭皮匠,顶个诸葛亮

单个决策树容易过拟合 (Overfitting),即在训练数据上表现完美,但在新数据上表现很差。

随机森林是一种集成学习 (Ensemble Learning)方法。它通过构建很多棵不同的决策树,然后让它们投票决定最终结果。

  • 随机体现在两方面:
    1. 行采样(Bootstrap):每棵树只用一部分随机抽样的训练数据。
    2. 列采样(Feature Sampling):每次分裂时,只考虑一部分随机选择的特征。

这保证了每棵树都是"片面的",但把它们组合起来就非常强大且稳定。

3.1 训练随机森林

fromsklearn.ensembleimportRandomForestClassifier# n_estimators=100: 森林里有 100 棵树rf_model=RandomForestClassifier(n_estimators=100,random_state=42)rf_model.fit(X_train,y_train)print(f"随机森林准确率:{rf_model.score(X_test,y_test):.2f}")

四、特征重要性 (Feature Importance)

随机森林还有一个好处:它可以告诉我们哪些特征对预测结果最重要。

importpandasaspd# 获取特征重要性importances=rf_model.feature_importances_# 组合成 DataFramefeature_importance_df=pd.DataFrame({'feature':iris.feature_names,'importance':importances}).sort_values('importance',ascending=False)print(feature_importance_df)# 结果通常是花瓣长度/宽度最重要

五、实战:泰坦尼克号生还预测

这是一个经典的 Kaggle 入门赛题。我们需要根据乘客信息(年龄、性别、舱位)预测他是否能生还。

5.1 数据准备

importseabornassnsimportpandasaspd# 1. 加载数据titanic=sns.load_dataset('titanic')# 2. 数据清洗与特征工程# 填充缺失值titanic['age'].fillna(titanic['age'].median(),inplace=True)titanic.dropna(subset=['embarked'],inplace=True)# 将分类变量转为数值 (独热编码 One-Hot)titanic=pd.get_dummies(titanic,columns=['sex','embarked'],drop_first=True)# 3. 选择特征features=['pclass','age','sibsp','parch','fare','sex_male','embarked_Q','embarked_S']target='survived'X=titanic[features]y=titanic[target]X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)

5.2 训练与评估

model=RandomForestClassifier(n_estimators=100,max_depth=5,random_state=42)model.fit(X_train,y_train)print(f"生还预测准确率:{model.score(X_test,y_test):.2f}")# 约 0.81# 查看特征重要性pd.Series(model.feature_importances_,index=features).sort_values().plot(kind='barh')plt.title("Feature Importances")# plt.show()# 结果显示:性别(sex_male)最重要,其次是票价和年龄。

六、常见问题

Q1:决策树和随机森林哪个好?

  • 决策树:速度快,结果易于解释(可以画图)。但容易过拟合。
  • 随机森林:精度高,抗过拟合能力强。但计算量大,且是个"黑盒"(无法解释内部逻辑)。
    通常情况下,首选随机森林。

Q2:max_depth参数是什么?

树的最大深度。如果不限制,树会无限生长直到每个叶子节点都"纯净",这极易导致过拟t合。它是最重要的超参数 (Hyperparameter)之一。

Q3:random_state是什么?

随机种子。设置它能保证你每次运行代码时,随机采样的结果都是一样的,方便复现实验。


七、小结

非线性模型

决策树

随机森林

if/else 逻辑

可解释性强 (可画图)

易过拟合

多棵树投票

集成学习

精度高,抗过拟合

黑盒模型

关键要点

  1. 随机森林是分类问题中最常用、最稳健的算法之一。
  2. 特征重要性分析能帮你理解数据。
  3. 处理分类变量时,记得用One-Hot 编码(pd.get_dummies)。

八、课后作业

  1. 调参:在泰坦尼克号案例中,尝试调整n_estimatorsmax_depth,看看能否获得更高的准确率。
  2. 回归树:决策树和随机森林不仅能做分类,也能做回归(DecisionTreeRegressor,RandomForestRegressor)。尝试用它们来解决波士顿房价预测问题,并与线性回归对比。
  3. XGBoost (进阶):学习另一个更强大的集成模型 XGBoost (pip install xgboost),它是各大 Kaggle 比赛的刷分神器。

下节预告

Day 85:机器学习进阶 - 支持向量机 (SVM)- 找到那条"最宽的路"来划分数据。明天我们学习另一个经典的分类算法 SVM。


系列导航

  • 上一篇:Day 83 - 机器学习进阶逻辑回归
  • 下一篇:Day 85 - 支持向量机SVM(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:37:42

零基础玩转Qwen3-4B:阿里开源大模型保姆级教程

零基础玩转Qwen3-4B:阿里开源大模型保姆级教程 1. 引言:为什么选择 Qwen3-4B-Instruct-2507? 在当前大模型快速演进的背景下,如何在有限算力条件下实现高性能推理成为开发者关注的核心问题。阿里通义实验室推出的 Qwen3-4B-Inst…

作者头像 李华
网站建设 2026/6/15 12:38:36

BGE-M3实战:构建智能问答检索系统

BGE-M3实战:构建智能问答检索系统 1. 引言 在当前信息爆炸的时代,如何从海量文本中快速、准确地检索出用户所需的信息,已成为智能问答系统的核心挑战。传统的关键词匹配方法难以应对语义多样性问题,而近年来兴起的嵌入模型&…

作者头像 李华
网站建设 2026/6/15 19:27:28

Qwen3-Embedding-4B技术分享:多模态应用中的文本嵌入

Qwen3-Embedding-4B技术分享:多模态应用中的文本嵌入 1. 引言:Qwen3-Embedding-4B 的定位与价值 随着大模型在多模态理解、信息检索和语义搜索等场景的广泛应用,高质量的文本嵌入(Text Embedding)能力成为构建智能系…

作者头像 李华
网站建设 2026/6/15 13:32:19

Keil5代码自动补全设置在PLC仿真中的应用实例

Keil5代码自动补全如何让PLC仿真开发快如闪电?在工业自动化现场,你是否见过这样的场景:一位经验丰富的电气工程师熟练地画着梯形图,却对“写代码”三个字望而生畏?传统PLC依赖图形化编程,直观但难扩展&…

作者头像 李华
网站建设 2026/6/15 12:17:43

稳定可靠不宕机!自建识别服务SLA更有保障

稳定可靠不宕机!自建识别服务SLA更有保障 1. 前言:为什么自建识别服务更值得信赖? 在当前AI应用快速落地的背景下,图像识别能力已成为智能内容管理、自动化审核、工业检测等场景的核心支撑。然而,依赖第三方云API的服…

作者头像 李华
网站建设 2026/6/15 12:16:09

快速掌握Mermaid图表制作:让你的技术文档瞬间专业的终极指南

快速掌握Mermaid图表制作:让你的技术文档瞬间专业的终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-…

作者头像 李华