19day-人工智能-機器學習-分類算法-決策樹

1. 什么是決策樹

學過數據結構與算法的小伙伴應該對樹不陌生吧,這里的決策樹也是大同小異的,只是每次反之都有一個條件來決定流向的。

1.1 決策節點

通過條件判斷而進行分支選擇的節點。如:將某個樣本中的屬性值(特征值)與決策節點上的值進行比較,從而判斷它的流向。

1.2 葉子節點

沒有子節點的節點,表示最終的決策結果。

1.3 決策樹的深度

所有節點的最大層次數。

決策樹具有一定的層次結構,根節點的層次數定為0,從下面開始每一層子節點層次數增加

1.4 決策樹優點:

可視化 - 可解釋能力-對算力要求低

1.5 決策樹缺點:

容易產生過擬合,所以不要把深度調整太大了。

2. 為什么有決策樹這個算法

決策樹的出現,本質上是為了模擬人類的結構化決策過程,并解決實際場景中 “如何從數據中提煉規則” 的問題。具體原因可從以下角度理解:

2.1?模擬人類決策邏輯
人類在做決策時,往往會通過一系列 “是非判斷” 逐步縮小范圍。例如:買水果時,先看 “是否成熟”→ 再看 “價格是否合理”→ 最后決定 “買不買”;醫生診斷時,先問 “是否發燒”→ 再查 “是否咳嗽”→ 最后判斷 “可能的疾病”。決策樹正是將這種 “層層判斷” 的邏輯轉化為數學模型,用樹狀結構(根節點→內部節點→葉節點)清晰呈現決策步驟,讓機器能像人一樣 “有條理地思考”。

2.2 解決 “從數據到規則” 的轉化問題

現實中,很多數據隱含著可解釋的決策規則(比如 “什么樣的用戶會流失”“哪些貸款申請有風險”),但這些規則往往混雜在大量數據中,難以直接觀察。
決策樹通過算法自動從數據中挖掘這些規則(例如 “如果用戶月消費>500 元且使用時長>2 年,則流失概率低”),并以樹狀圖的形式可視化,讓規則變得可理解、可復用。

2.3 應對復雜場景的靈活性
與早期的簡單模型(如線性回歸)相比,決策樹能處理非線性關系(例如 “年齡對購買意愿的影響不是簡單的正比或反比”),也能同時處理數值型數據(如收入)和類別型數據(如性別),適用場景更廣泛。

    舉個例子

    我們的決策樹深度越深是不是就分的越詳細,然后就越正確,但是這樣往往就會過度擬合了,我們前面介紹到決策樹算力較低那這個地方體現在哪里,看上面的例子,左邊和右邊的起始條件不同,所以分類的過程也是不一樣的,但是我的起始條件對分類越重要是不是就能越快得出結果,那我們怎么來確定這個特征的重要程度呢?

    3. 基于信息增益決策樹的建立

    3.1 信息熵

    熵這個詞出現在熱力學中,熵越大,說明事物越混亂,越不確定,在機器學習中,特征越是不確定是不是就越難確定最終的分類結果,這種不確定性在這里成為信息熵,熵的大小取決于 “不同取值的概率分布是否均勻”,比如

    用 “身高” 預測 “是否喜歡吃辣”。假設身高 160cm 的人中,50% 喜歡吃辣、50% 不喜歡;身高 170cm 的人中,同樣是 50% 喜歡、50% 不喜歡…… 無論身高取什么值,目標類別的分布都接近均勻。此時 “身高” 的不確定性高(熵大),但身高數據本身是準確測量的(比如用卷尺精確記錄),只是它和 “是否喜歡吃辣” 無關。

    3.2 信息商的公式

    3.3 信息增益

    信息增益是一個統計量,用來描述一個屬性區分數據樣本的能力。信息增益越大,那么決策樹就會越簡潔。這里信息增益的程度用信息熵的變化程度來衡量, 上面的例子就有信息增益的影子,信息增益公式:

    信息增益越大的是不是越能反映和類別的關聯程度,所以越大的特征就放到前面的決策點出。

    3.4?信息增益決策樹建立步驟

    我們先來算一下信息增益,

    但是這里我們算的是職業他的類別很少,我們可以有具體得分類,要是我們看年齡的信息增益且不是要分好多次,所以我們這里以35為界限,弄一個范圍,假如我們每一個值都歸為一類雖然算力大,但是確實很準的,我們可不能要很準的結果。

    假如就是職業算的信息增益最大,那我們就把他放到第一個判斷的決策點,然后我們將這個特征篩選出,對剩下的重新計算,算出新的最大的信息增益。

    4 基于基尼指數決策樹的建立(了解)

    基尼指數(Gini Index)是決策樹算法中用于評估數據集純度的一種度量,基尼指數衡量的是數據集的不純度,或者說分類的不確定性。在構建決策樹時,基尼指數被用來決定如何對數據集進行最優劃分,以減少不純度。

    基尼指數的計算

    對于一個二分類問題,如果一個節點包含的樣本屬于正類的概率是 (p),則屬于負類的概率是 (1-p)。那么,這個節點的基尼指數 (Gini(p)) 定義為:

    基尼指數的意義

    • 當一個節點的所有樣本都屬于同一類別時,基尼指數為 0,表示純度最高。

    • 當一個節點的樣本均勻分布在所有類別時,基尼指數最大,表示純度最低。

    基尼指數越小的,越排到前面,確定了第一個之后,后面的也繼續重復操作。

    5 api

    class sklearn.tree.DecisionTreeClassifier(....)
    參數:
    criterion "gini" "entropy” 默認為="gini"?
    當criterion取值為"gini"時采用 基尼不純度(Gini impurity)算法構造決策樹,
    當criterion取值為"entropy”時采用信息增益( information gain)算法構造決策樹.
    max_depth?? ?int, 默認為=None ?樹的最大深度

    # 可視化決策樹
    function sklearn.tree.export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)
    參數:
    estimator決策樹預估器
    out_file生成的文檔
    feature_names節點特征屬性名
    功能:
    把生成的文檔打開,復制出內容粘貼到"http://webgraphviz.com/"中,點擊"generate Graph"會生成一個樹型的決策樹圖

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.tree import DecisionTreeClassifier, export_graphviz# 1)獲取數據集
    iris = load_iris()# 2)劃分數據集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)#3)標準化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)# 4)決策樹預估器
    estimator = DecisionTreeClassifier(criterion="entropy")estimator.fit(x_train, y_train)# 5)模型評估,計算準確率
    score = estimator.score(x_test, y_test)
    print("準確率為:\n", score)# 6)預測
    index=estimator.predict([[2,2,3,1]])
    print("預測:\n",index,iris.target_names,iris.target_names[index])# 可視化決策樹
    export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)

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

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

    相關文章

    地球磁層全球MHD模型中模擬Dst指數的半經驗方法

    A semi-empirical approach to simulating the Dst index in global MHD models of Earth’s magnetosphere pdf 1 Introduction Dst指數 (Disturbance storm time index, 地磁暴時擾動指數) 是描述磁暴活動強度應用最廣泛的指數,對于研究地磁擾動和磁暴具有重要意…

    什么是臟讀、幻讀、不可重復讀?

    臟讀、幻讀和不可重復讀是數據庫事務隔離級別中常見的三種數據一致性問題。它們描述了在并發事務環境下可能出現的異常現象。下面通過對比表格和具體示例進行清晰解析:核心概念對比表問題類型觸發場景本質原因示例臟讀 (Dirty Read)事務A讀取了事務B未提交的修改讀取…

    騰訊位置商業授權微信小程序關鍵詞輸入提示

    微信小程序JavaScript SDK 開發指南 關鍵詞輸入提示 getSuggestion(options:Object) 用于獲取輸入關鍵字的補完與提示,幫助用戶快速輸入 注:坐標系采用gcj02坐標系 options屬性說明 屬性類型必填說明keywordString是用戶輸入的關鍵詞(希望…

    LabVIEW菜單操控

    該程序圍繞運行時菜單欄操作,實現從初始化構建菜單結構(含菜單項、快捷鍵 ),到響應交互刪除特定菜單項,再到監控界面事件驅動邏輯,完成自定義菜單交互全流程,適配需靈活菜單控制的程序開發場景。…

    Web 服務詳解:HTTP 與 HTTPS 配置

    Web 服務詳解:HTTP 與 HTTPS 配置 一、HTTP 服務概述 HTTP(Hypertext Transfer Protocol,超文本傳輸協議)是用于在網絡上傳輸網頁數據的基礎協議,默認使用80 端口,以明文形式傳輸數據。常見的 HTTP 服務軟…

    YOLO-v2-tiny 20種物體檢測模型

    一、簡介 YOLO-v2-tiny是基于YOLO(You Only Look Once)實時目標檢測算法的輕量級版本,專門為嵌入式設備和資源受限環境優化。本模型能夠檢測20種常見物體類別,在保持較高檢測精度的同時大幅減少了計算量和模型大小。 20種物體檢測模型, 使用…

    heterophilic graph和hetergeneous graph區別(附帶homophilic graph 和homoegeneous graph)

    Heterophilic Graph(異配圖)連接的節點在屬性上不相似,但是所有節點和邊的類別都是同一種類型,數據集如squirrel / chameleon,它們是 heterogeneous graph(異質圖)而不是Heterophilic Graph(異配…

    Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞檢測,命令執行,Getshell

    工具介紹 Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞檢測,命令執行,Getshell。JAVAFX可視化編寫,博主第一次用javafx來寫界面,第一次學習嘗試,僅僅只用于學習嘗試如果缺少什么payload,歡迎提交…

    GitHub分支保護介紹(Branch Protection)(git分支保護)(通過設置規則和權限來限制對特定分支的操作的功能)

    文章目錄**1. 核心功能****a. 防止誤操作****b. 強制代碼審查****c. 狀態檢查(Status Checks)****d. 權限控制****2. 如何設置分支保護?**1. **進入倉庫設置**2. **添加分支保護規則**3. **配置保護規則**4. **保存設置****3. 常見應用場景**…

    怎么理解On-Premises

    On-Premises 指的是—— 軟件、系統、數據中心等部署并運行在企業自己管理的本地硬件或機房里,而不是放在云端或第三方托管環境中。 你可以把它理解成:“服務器在你自己家里(公司機房),而不是寄放在別人家(…

    UserController類講解

    用戶管理控制器,實現了用戶CRUD操作的RESTful API: 1. 類結構與核心注解 1.1 控制器聲明 RestController RequestMapping("/api/users") public class UserControllerRestController 深度解析: 組合注解:Controller Re…

    【劍指offer】搜索算法

    目錄 📁 JZ53 數字在升序數組中出現的次數?編輯 📁 JZ4 二維數組中的查找?編輯 📁 JZ11 旋轉數組的最小數字 📁 JZ38 字符串的排列?編輯 📁 JZ53 數字在升序數組中出現的次數 這就是一道簡單的模板題&#xff0…

    ETLCloud批流一體化體現在哪

    ETLCloud批流一體化體現在哪 企業對數據處理的實時性、高效性和準確性的要求越來越高。批流一體化作為一種先進的數據處理理念,逐漸被企業所采用。 目前許多國產化ETL工具也裝配了十分強大的批流一體化能力,ETLCoud就是一個很好的代表,它能夠…

    Mybatis學習之緩存(九)

    這里寫目錄標題一、MyBatis的一級緩存1.1、工作原理1.2、一級緩存失效的四種情況1.3、不同的SqlSession對應不同的一級緩存1.4、同一個SqlSession但是查詢條件不同1.5、同一個SqlSession兩次查詢期間執行了任何一次增刪改操作1.6、同一個SqlSession兩次查詢期間手動清空了&…

    windows10裝Ubuntu22.04系統(雙系統)

    參考鏈接:Windows和Linux雙系統的保姆級安裝教程,新手小白跟著也能裝_windows安裝linux雙系統-CSDN博客 1 前期準備 1.下載Ubuntu22.04.5 的iso鏡像文件:Download Ubuntu Desktop | Ubuntu 2.準備一個U盤(空,已有文…

    Pandas數據處理與分析實戰:Pandas數據清洗與處理入門

    數據清洗:Pandas數據處理入門 學習目標 本課程將引導學員了解數據清洗的基本概念,掌握使用Pandas庫處理數據集中的缺失值、重復數據和異常值的方法,確保數據的質量,為后續的數據分析和機器學習任務打下堅實的基礎。 相關知識點 Pa…

    Python爬蟲實戰:研究ScrapyRT框架,構建圖書商城數據采集系統

    1. 引言 1.1 研究背景 在當今數字化時代,互聯網已成為全球最大的信息庫,蘊含著海量的有價值數據,涵蓋商業、教育、科研、醫療等各個領域。根據 IDC(國際數據公司)預測,到 2025 年全球數據圈將增長至 175ZB,其中網絡數據占比超過 60%。這些數據不僅是企業制定商業策略、…

    springboot接口請求參數校驗

    參數校驗 參數校驗可以防止無效或錯誤的數據進入系統。通過校驗前端輸入的參數,可以確保數據的完整性,避免因為缺少必要的信息而導致程序錯誤或異常。例如,對于密碼字段,可以通過校驗規則要求用戶輸入至少8個字符、包含字母和數字…

    Docker部署 Neo4j 及集成 APOC 插件:安裝與配置完整指南(docker-compose)

    Docker部署 Neo4j 及集成 APOC 插件:分步驟指南 摘要 :本文將分兩部分詳細介紹相關內容。第一部分講解如何使用 Docker Compose 部署 Neo4j 圖數據庫,提供完整配置文件及常見問題解決方案;第二部分在前者基礎上,介紹 A…

    TLSv1.2協議與TCP/UDP協議傳輸數據內容差異

    一、Wireshark中常見的TLSv1.2在用Wireshark抓包時,除了看到課堂上教過的經典的TCP/UDP協議,還有一個協議經常出現——TLSv1.2。并且這個協議的Info解釋是Application data,其實看到這個解釋,我大概猜出來了TLSv1.2是用來給用戶數…