機器學習算法-決策樹

今天我們用一個?「相親決策」?的例子來講解決策樹算法,保證你輕松理解原理和實現!

🌳?決策樹是什么?

決策樹就像玩?「20個問題」猜謎游戲

  • 你心里想一個東西(比如「蘋果」)

  • 朋友通過一系列問題猜(「是水果嗎?」→「是紅色的嗎?」→...)

  • 問的問題越精準,猜得越快!

機器學習中的決策樹:通過一系列「如果...那么...」的規則,把數據一步步分類。


💍?例子:用決策樹決定是否相親

假設你是媒婆,手上有歷史相親數據,記錄每個人的:

  1. 年齡(青年/中年/老年)

  2. 外貌(帥/普通)

  3. 收入(高/中/低)

  4. 是否成功(是/否)

現在有個新小伙:「青年、外貌帥、收入中」,要不要安排相親?

📊?歷史數據
年齡外貌收入是否成功
青年
青年普通
中年
老年普通
............

🌟?決策樹原理

1.?關鍵問題:如何選擇「最佳問題」?

決策樹的核心:每一步選一個最能區分數據的問題(比如優先問「收入高嗎?」比「年齡大嗎?」更能區分成功率)。

衡量標準

  • 信息增益:問完這個問題后,數據更「純凈」(比如「收入高」的人群中成功率明顯更高)。

  • 基尼系數:類似,值越小說明分類越準。

2.?構建決策樹(偽代碼)
def 構建決策樹(數據):if 所有數據都屬于同一類別:return 葉子節點(類別)選擇最佳問題 = 找信息增益最大的特征(如「收入」)樹 = {最佳問題: {}}for 該問題的每個選項(如「高/中/低」):子數據 = 篩選出符合該選項的數據樹[最佳問題][選項] = 構建決策樹(子數據)return 樹
 
3.?本例可能的決策樹
1. 收入=高?├─ 是 → 相親(歷史數據中高收入全部成功)└─ 否 → 2. 外貌=帥?├─ 是 → 相親(青年+帥+中收入曾成功)└─ 否 → 不相親(老年+普通+中收入失敗)

對新數據「青年、帥、中收入」的預測

  • 收入≠高 → 問外貌 → 帥 →?相親!


🛠??代碼實現(Python)

用?scikit-learn?快速實現:

from sklearn.tree import DecisionTreeClassifier
import pandas as pd# 1. 準備數據(這里簡化特征為數值)
data = {'年齡': ['青年', '青年', '中年', '老年'],  # 實際需要轉為數字'外貌': ['帥', '普通', '帥', '普通'],'收入': ['高', '高', '高', '中'],'是否成功': [1, 1, 1, 0]  # 1=是,0=否
}
df = pd.DataFrame(data)# 2. 特征編碼(文本轉數字)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['年齡'] = le.fit_transform(df['年齡'])
df['外貌'] = le.fit_transform(df['外貌'])
df['收入'] = le.fit_transform(df['收入'])# 3. 訓練決策樹
X = df[['年齡', '外貌', '收入']]
y = df['是否成功']
model = DecisionTreeClassifier(criterion='entropy')  # 用信息增益
model.fit(X, y)# 4. 預測新數據
new_person = pd.DataFrame([['青年', '帥', '中']], columns=['年齡', '外貌', '收入'])
new_person['年齡'] = le.transform(new_person['年齡'])
new_person['外貌'] = le.transform(new_person['外貌'])
new_person['收入'] = le.transform(new_person['收入'])pred = model.predict(new_person)
print("安排相親嗎?", "是" if pred[0] == 1 else "否")
 

輸出

安排相親嗎? 是

🌍?決策樹的優缺點

??優點
  • 像人類思考:規則直觀易懂(適合向老板解釋!)。

  • 無需特征縮放:對數據范圍不敏感。

  • 處理混合類型:數值和類別特征都能用。

??缺點
  • 容易過擬合:樹太深會死記硬背訓練數據(解決方法:剪枝、限制樹深度)。

  • 不穩定:數據微小變化可能導致完全不同的樹(解決方法:用隨機森林)。


🎨?可視化決策樹

安裝?graphviz?后,可以畫出樹的結構:

from sklearn.tree import export_graphviz
import graphvizdot_data = export_graphviz(model, out_file=None, feature_names=['年齡', '外貌', '收入'],  class_names=['否', '是'], filled=True)
graph = graphviz.Source(dot_data)
graph.render("decision_tree")  # 保存為PDF
 

你會看到類似這樣的樹:

收入 <= 1.5?
├─ 是 → 類別: 是
└─ 否 → 外貌 <= 0.5?├─ 是 → 類別: 是└─ 否 → 類別: 否

🤖?實際應用場景

  • 醫療診斷:根據癥狀判斷疾病。

  • 金融風控:根據用戶信息預測貸款違約。

  • 推薦系統:根據用戶行為決定推薦內容。


總結:決策樹就是用一系列問題層層拆解數據,簡單卻強大!試著用它解決你的分類問題吧! 🌟

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85307.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025——》VSCode Windows 最新安裝指南/VSCode安裝完成后如何驗證是否成功?2025最新VSCode安裝配置全攻略

1.VSCode Windows 最新安裝指南: 以下是 2025 年 Windows 系統下安裝 Visual Studio Code(VSCode)的最新指南,結合官方文檔與實際操作經驗整理而成: 一、下載官方安裝包: 1.訪問官網: 打開瀏覽器,進入 VSCode 官方下載頁面https://code.visualstudio.com/Download 2…

【Elasticsearch】suggest

在Elasticsearch中&#xff0c;suggest 是一個非常強大的功能&#xff0c;用于實現自動補全、拼寫糾錯和模糊搜索等功能。它可以幫助用戶更快地找到他們想要的內容&#xff0c;同時提升搜索體驗。以下是關于 suggest 的詳細使用方法和常見場景。 1\. Suggest 的基本概念 sugges…

[SAP] 如何查詢當前屏幕的Tcode?

事務代碼Tcode是SAP中到達特定屏幕的快捷路徑 如何查詢以下屏幕的事務碼Tcode&#xff1f; 要瀏覽當前所使用的屏幕的事務碼&#xff0c;可以選擇System | Status 這里的事務代碼是[VA22]&#xff0c;它是Change Quotation的事務代碼

PostgreSQL的擴展 dblink

PostgreSQL的擴展 dblink dblink 是 PostgreSQL 的一個核心擴展&#xff0c;允許在當前數據庫中訪問其他 PostgreSQL 數據庫的數據&#xff0c;實現跨數據庫查詢功能。 一、dblink 擴展安裝與啟用 1. 安裝擴展 -- 使用超級用戶安裝 CREATE EXTENSION dblink;2. 驗證安裝 -…

ADB推送文件到指定路徑解析

您執行的命令 adb push ota.zip /sdcard/Download 中&#xff0c;目標路徑 /sdcard/Download 是您顯式指定的&#xff0c;因此 ADB 會直接將文件推送到此位置。具體過程如下&#xff1a; 1. 命令結構解析 adb push&#xff1a;ADB 的推送指令。ota.zip&#xff1a;本地計算機上…

Linux 內核中 skb_orphan 的深度解析:從版本差異到核心機制

引言 在 Linux 內核網絡子系統中,struct sk_buff(簡稱 skb)是管理網絡數據包的核心數據結構。skb_orphan 作為其生命周期管理的關鍵函數,負責切斷 skb 與所屬 socket 的關聯,確保數據包在復雜處理流程中的獨立性。本文將從代碼實現、版本差異、使用場景等多個維度,深入解…

03.MySQL表的操作詳解

MySQL表的操作詳解 MySQL 表的操作概述創建表 2.1 創建表的基本語法查看表結構修改表 4.1 新增列 4.2 修改列屬性 4.3 修改列名 4.4 修改表名 4.5 刪除列刪除表 1. MySQL表的操作概述 MySQL表的操作是數據庫開發和管理中的核心內容&#xff0c;主要涉及**數據定義語言&#…

Flink系列文章列表

把寫的文章做一個匯總&#xff0c;會陸續更新的。 Flink流處理原理與實踐&#xff1a;狀態管理、窗口操作與容錯機制-CSDN博客

【目標檢測】【AAAI-2022】Anchor DETR

Anchor DETR&#xff1a; Query Design for Transformer-Based Object Detection 錨點DETR&#xff1a;基于Transformer的目標檢測查詢設計 論文鏈接 代碼鏈接 摘要 在本文中&#xff0c;我們提出了一種基于Transformer的目標檢測新型查詢設計。此前的Transformer檢測器中&am…

apptrace 的優勢以及對 App 的價值

官網地址&#xff1a;AppTrace - 專業的移動應用推廣追蹤平臺 apptrace 的優勢以及對 App 的價值? App 拉起作為移動端深度鏈接技術的關鍵應用&#xff0c;能實現從 H5 網頁到 App 的無縫跳轉&#xff0c;并精準定位到 App 內指定頁面。apptrace 憑借專業的技術與豐富的經驗…

16-前端Web實戰(Tlias案例-部門管理)

在前面的課程中&#xff0c;我們學習了Vue工程化的基礎內容、TS、ElementPlus&#xff0c;那接下來呢&#xff0c;我們要通過一個案例&#xff0c;加強大家對于Vue項目的理解&#xff0c;并掌握Vue項目的開發。 這個案例呢&#xff0c;就是我們之前所做的Tlias智能學習輔助系統…

Python爬蟲實戰:研究Goutte庫相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網信息的爆炸式增長,如何高效、準確地獲取和分析 Web 數據成為重要研究課題。網絡爬蟲作為自動獲取網頁內容的關鍵技術,在搜索引擎優化、輿情分析、市場調研等領域具有廣泛應用。然而,現代網站越來越多地采用 JavaScript 動態渲染技術…

Python----目標檢測(《基于區域提議網絡的實時目標檢測方法》和Faster R-CNN)

一、《基于區域提議網絡的實時目標檢測方法》 1.1、基本信息 標題&#xff1a;Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者&#xff1a;任少卿&#xff08;中國科學技術大學、微軟研究院&#xff09;、何凱明&#xff08;微軟研究…

吳恩達講解MCP基礎概念

簡介 MCP 是一個開放協議 標準化了您的語言模型應用如何獲取工具和數據資源的上下文。基于客戶端-服務器架構,它定義了您的語言模型應用中的MCP客戶端與MCP服務器之間的通信方式,MCP服務器提供工具 數據資源和提示模板給您的應用,自Anthropic于2024年11月推出MCP以來,MCP生…

Git入門到精通:30分鐘掌握核心技巧

目錄 一、基礎理論片 Git簡介 Git安裝 Git倉庫 Git基本命令用法 倉庫別名 二、實操命令篇 遠程分支 分支的新建和合并 實操演示 1 本地新建倉庫 2 gitee新建倉庫 3 建立關系 4 新建分支 5 開發新功能 6 推送新分支 7 合并新分支到主分支 三、可視化工具篇 G…

零基礎設計模式——結構型模式 - 代理模式

第三部分&#xff1a;結構型模式 - 代理模式 (Proxy Pattern) 在學習了享元模式如何通過共享對象來優化資源使用后&#xff0c;我們來探討結構型模式的最后一個模式——代理模式。代理模式為另一個對象提供一個替身或占位符以控制對這個對象的訪問。 核心思想&#xff1a;為其…

【OSS】 前端如何直接上傳到OSS 上返回https鏈接,如果做到OSS圖片資源加密訪問

使用阿里云OSS&#xff08;對象存儲服務&#xff09;進行前端直接上傳并返回HTTPS鏈接&#xff0c;同時實現圖片資源的加密訪問&#xff0c;可以通過以下步驟實現&#xff1a; 前端直接上傳到OSS并返回HTTPS鏈接 設置OSS Bucket&#xff1a; 確保你的OSS Bucket已創建&#xf…

TDenigne 集群可視化管理

可視化管理工具 為方便用戶更高效地使用和管理 TDengine&#xff0c;TDengine 3.0 版本推出了一個全新的可視化組件 taosExplorer。這個組件旨在幫助用戶在不熟悉 SQL 的情況下&#xff0c;也能輕松管理 TDengine 集群。通過 taosExplorer&#xff0c;用戶可以輕松查看 TDengi…

Centos7安裝gitlab

環境準備&#xff1a; 操作系統&#xff1a;Centos7 內存&#xff1a;2G以上 磁盤&#xff1a;50G 安全&#xff1a;關閉防火墻&#xff0c;selinux 1、安裝GitLab所需依賴 yum -y install policycoreutils openssh-server openssh-clients postfix 2、設置postfix開機自啟…

【前端面經】云智慧一面

寫在前面&#xff1a;面經只是記錄博主遇到的題目。每題的答案在編寫文檔的時候已經有問過deepseek&#xff0c;它只是一種比較普世的答案&#xff0c;要學得深入還是靠自己 Q&#xff1a;手撕代碼&#xff0c;兩個有序數組排序 A&#xff1a; function mysort(arr1, arr2) {…