機器學習_決策樹與隨機森林

決策樹是一種常用的監督學習算法,既可以用于分類任務也可以用于回歸任務。決策樹通過遞歸地將數據集劃分成更小的子集,逐步建立樹結構。每個節點對應一個特征,樹的葉子節點表示最終的預測結果。構建決策樹的關鍵是選擇最佳的特征來分割數據,而信息增益(Information Gain)和熵(Entropy)是常用的度量標準。

熵(Entropy)

原理

熵是衡量隨機變量不確定性的指標。在決策樹中,熵用于衡量數據集的純度或混亂程度。熵越高,數據集越混亂;熵越低,數據集越純凈。

公式

對于一個包含 ( n ) 個類別的分類問題,數據集 ( S ) 的熵定義為:
Entropy ( S ) = ? ∑ i = 1 n p i log ? 2 ( p i ) \text{Entropy}(S) = -\sum_{i=1}^{n} p_i \log_2(p_i) Entropy(S)=?i=1n?pi?log2?(pi?)
其中,( p_i ) 是數據集中第 ( i ) 類的比例。

示例

假設數據集 ( S ) 有兩類(正例和反例),其中正例占比 ( p ),反例占比 ( 1-p ),則熵為:
Entropy ( S ) = ? p log ? 2 ( p ) ? ( 1 ? p ) log ? 2 ( 1 ? p ) \text{Entropy}(S) = -p \log_2(p) - (1-p) \log_2(1-p) Entropy(S)=?plog2?(p)?(1?p)log2?(1?p)

信息增益(Information Gain)

原理

信息增益用于衡量選擇某個特征進行劃分后,數據集的純度增加了多少。信息增益越大,說明通過該特征進行劃分,能夠更好地區分數據。因此,決策樹在選擇特征進行劃分時,會選擇信息增益最大的特征。

公式

特征 ( A ) 對數據集 ( S ) 的信息增益定義為:
Gain ( S , A ) = Entropy ( S ) ? ∑ v ∈ Values ( A ) ∣ S v ∣ ∣ S ∣ Entropy ( S v ) \text{Gain}(S, A) = \text{Entropy}(S) - \sum_{v \in \text{Values}(A)} \frac{|S_v|}{|S|} \text{Entropy}(S_v) Gain(S,A)=Entropy(S)?vValues(A)?SSv??Entropy(Sv?)
其中,Values(A) 表示特征 ( A ) 的所有可能取值,( S_v ) 表示在特征 ( A ) 上取值為 ( v ) 的子集。

示例

假設我們有一個數據集 ( S ),特征 ( A ) 有兩個可能取值 ( {a_1, a_2} ),則信息增益計算過程如下:

  1. 計算整個數據集的熵: Entropy ( S ) \text{Entropy}(S) Entropy(S)
  2. 計算特征 ( A ) 各個取值子集的熵: Entropy ( S a 1 ) \text{Entropy}(S_{a_1}) Entropy(Sa1??) Entropy ( S a 2 ) \text{Entropy}(S_{a_2}) Entropy(Sa2??)
  3. 計算信息增益:
    Gain ( S , A ) = Entropy ( S ) ? ( ∣ S a 1 ∣ ∣ S ∣ Entropy ( S a 1 ) + ∣ S a 2 ∣ ∣ S ∣ Entropy ( S a 2 ) ) \text{Gain}(S, A) = \text{Entropy}(S) - \left( \frac{|S_{a_1}|}{|S|} \text{Entropy}(S_{a_1}) + \frac{|S_{a_2}|}{|S|} \text{Entropy}(S_{a_2}) \right) Gain(S,A)=Entropy(S)?(SSa1???Entropy(Sa1??)+SSa2???Entropy(Sa2??))

基尼指數(Gini Index)

除了熵和信息增益,基尼指數也是常用的決策樹分裂準則。基尼指數衡量數據集的不純度,值越小越純。

公式

對于一個包含 ( n ) 個類別的數據集 ( S ),基尼指數定義為:
Gini ( S ) = 1 ? ∑ i = 1 n p i 2 \text{Gini}(S) = 1 - \sum_{i=1}^{n} p_i^2 Gini(S)=1?i=1n?pi2?
其中,( p_i ) 是數據集中第 ( i ) 類的比例。

示例

假設數據集 ( S ) 有兩類(正例和反例),其中正例占比 ( p ),反例占比 ( 1-p ),則基尼指數為:
Gini ( S ) = 1 ? ( p 2 + ( 1 ? p ) 2 ) = 2 p ( 1 ? p ) \text{Gini}(S) = 1 - (p^2 + (1-p)^2) = 2p(1-p) Gini(S)=1?(p2+(1?p)2)=2p(1?p)

信息增益率(Information Gain Ratio)

信息增益率是信息增益的一種改進形式,旨在處理信息增益對取值較多的特征的偏好問題。

公式

特征 ( A ) 對數據集 ( S ) 的信息增益率定義為:
GainRatio ( S , A ) = Gain ( S , A ) SplitInformation ( A ) \text{GainRatio}(S, A) = \frac{\text{Gain}(S, A)}{\text{SplitInformation}(A)} GainRatio(S,A)=SplitInformation(A)Gain(S,A)?
其中,分裂信息(Split Information)定義為:
SplitInformation ( A ) = ? ∑ v ∈ Values ( A ) ∣ S v ∣ ∣ S ∣ log ? 2 ( ∣ S v ∣ ∣ S ∣ ) \text{SplitInformation}(A) = -\sum_{v \in \text{Values}(A)} \frac{|S_v|}{|S|} \log_2 \left( \frac{|S_v|}{|S|} \right) SplitInformation(A)=?vValues(A)?SSv??log2?(SSv??)

用法
  1. 分類:用于分類任務,目標變量是類別。
  2. 回歸:用于回歸任務,目標變量是連續值。
優點
  • 易于理解和解釋。
  • 處理類別特征和數值特征。
  • 不需要大量數據預處理。
缺點
  • 容易過擬合,尤其在樹深度較大時。
  • 對噪聲數據敏感。
代碼實例

以下是使用 scikit-learn 實現決策樹分類和回歸的代碼示例。

from sklearn.datasets import load_iris, load_boston
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.metrics import accuracy_score, mean_squared_error# 分類任務
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)print(f"Classification Accuracy: {accuracy_score(y_test, y_pred)}")# 回歸任務
boston = load_boston()
X, y = boston.data, boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)reg = DecisionTreeRegressor()
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)print(f"Regression MSE: {mean_squared_error(y_test, y_pred)}")

隨機森林

隨機森林是集成學習方法的一種,通過生成多個決策樹,并結合它們的預測結果來提高模型的性能和穩定性。

用法
  1. 分類:用于分類任務,通過多個決策樹的投票來確定類別。
  2. 回歸:用于回歸任務,通過多個決策樹的平均值來預測連續值。
優點
  • 減少過擬合的風險。
  • 更高的預測準確性。
  • 能處理高維數據和缺失值。
缺點
  • 計算開銷較大,尤其是樹的數量較多時。
  • 模型復雜性較高,不易解釋。
代碼實例

以下是使用 scikit-learn 實現隨機森林分類和回歸的代碼示例。

from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor# 分類任務
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)print(f"Random Forest Classification Accuracy: {accuracy_score(y_test, y_pred)}")# 回歸任務
reg = RandomForestRegressor(n_estimators=100, random_state=42)
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)print(f"Random Forest Regression MSE: {mean_squared_error(y_test, y_pred)}")

進階用法和參數調整

決策樹參數
  • criterion: 分裂的評價標準(ginientropy 用于分類;msemae 用于回歸)。
  • max_depth: 樹的最大深度,防止過擬合。
  • min_samples_split: 分裂內部節點所需的最小樣本數。
  • min_samples_leaf: 葉節點的最小樣本數。
隨機森林參數
  • n_estimators: 決策樹的數量。
  • max_features: 每次分裂時考慮的特征數量。
  • bootstrap: 是否在構建樹時使用自助法采樣。
  • oob_score: 是否使用袋外樣本評估模型性能。
# 調整決策樹參數
clf = DecisionTreeClassifier(max_depth=5, min_samples_split=10, criterion='entropy')
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f"Tuned Decision Tree Classification Accuracy: {accuracy_score(y_test, y_pred)}")# 調整隨機森林參數
reg = RandomForestRegressor(n_estimators=200, max_features='sqrt', oob_score=True, random_state=42)
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)
print(f"Tuned Random Forest Regression MSE: {mean_squared_error(y_test, y_pred)}")
print(f"Out-of-Bag Score: {reg.oob_score_}")

可視化決策樹

可以使用 graphviz 庫可視化決策樹,以便更好地理解其結構。

from sklearn.tree import export_graphviz
import graphviz# 導出決策樹圖像
dot_data = export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("decision_tree")

通過這些實例,展示了決策樹和隨機森林在分類和回歸任務中的應用。可以根據具體問題調整參數,提升模型的性能和穩定性。

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

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

相關文章

圖文型LED顯示屏的結構與安裝

隨著科技的不斷進步,LED顯示屏已成為商業廣告、公共信息顯示等領域不可或缺的一部分。圖文型LED顯示屏以其獨特的優勢和多樣化的應用場景,受到了市場的廣泛歡迎。本文將詳細介紹圖文型LED顯示屏的結構特點、工作原理以及安裝指南。 1、圖文型LED顯示屏的…

Python項目開發實戰:看圖猜成語小程序(案例教程)

一、項目背景與概述 在現代社會,隨著智能手機的普及和移動互聯網的快速發展,移動應用(App)已經成為人們日常生活中不可或缺的一部分。看圖猜成語作為一種集知識性和娛樂性于一體的游戲,深受大眾喜愛。本項目旨在開發一個基于Python的看圖猜成語小程序,讓用戶能夠通過簡單…

跨境電商|Facebook Marketplace怎么做?

2016 年,Facebook打造了同名平臺 Facebook Marketplace。通過利用 Facebook 現有的龐大客戶群,該平臺取得了立竿見影的成功,每月訪問量將超過 10 億。對于個人賣家和小企業來說,Facebook Marketplace是一個不錯的銷貨渠道&#xf…

Java內部類、枚舉類、注解類

Java 是一種面向對象的編程語言,它支持多種類型的類,包括內部類、枚舉類和注解類 一、內部類(Inner Class): 內部類是定義在另一個類內部的類。它可以訪問外部類的成員(包括私有成員)&#xff…

AIGC在移動APP開發中的應用及未來前景

隨著科技的不斷進步,人工智能生成內容(AIGC,Artificial Intelligence Generated Content)在移動應用開發中的應用越來越廣泛。AIGC不僅能提高開發效率,還能帶來更好的用戶體驗。本文將探討AIGC在移動APP開發中的應用及…

通過ssr-echarts,服務端生成echarts圖

ssr-echarts :一個開源項目,它能夠服務端渲染 ECharts 圖表,并直接生成 PNG 圖片返回。該項目提供了多種主題,并且支持 GET 和 POST 請求。如果參數較多,建議使用 POST 方法。用戶可以自己部署這個服務。 1. 服務端安裝…

Three.js-實現加載圖片并旋轉

1.實現效果 2. 實現步驟 2.1創建場景 const scene new THREE.Scene(); 2.2添加相機 說明: fov(視場角):視場角決定了相機的視野范圍,即相機可以看到的角度范圍。較大的視場角表示更廣闊的視野,但可能…

第 10 章 nodelet(自學二刷筆記)

重要參考: 課程鏈接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 講義鏈接:Introduction Autolabor-ROS機器人入門課程《ROS理論與實踐》零基礎教程 10.4 nodelet ROS通信是基于Node(節點)的,Node使用方便、易于擴展,可以滿足ROS中大多…

SBOM是如何幫助醫療器械制造商提高產品透明度的?

SBOM(軟件物料清單)通過以下方式幫助醫療器械制造商提高產品透明度: 1. 詳細記錄軟件組成 SBOM詳細列出了醫療器械所使用的所有軟件組件、版本、作者、許可證信息等。這使得制造商能夠清晰地了解產品的軟件組成,包括每個組件的來…

基于springboot實現民族婚紗預定系統項目【項目源碼+論文說明】

基于springboot實現民族婚紗預定系統的設計演示 摘要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本民族婚紗預定系統就是在這樣的大環境下誕生,其可…

【Emgu CV教程】10.15、FillPoly()不規則形狀填充顏色

文章目錄 一、概念二、填充不規則圖形1.原始素材2.代碼3.運行結果 二、最大輪廓填充顏色1.原始素材2.代碼3.運行結果 一、概念 圖像的連通域是指圖像中具有相同像素值并且位置相鄰的像素組成的區域,連通域分析是指在圖像中尋找出彼此互相獨立的連通域并將其標記出來…

【最新鴻蒙應用開發】——Want信息載體

信息傳遞載體Want 1、概述 上一章節我們學習了UIAbility組件 【最新鴻蒙應用開發】——一篇搞懂什么是UIAbility-CSDN博客 ,其中組件間的交互傳遞信息的媒介就是Want,本章節我們來更加深入學習Want的相關知識。 Want是一種對象,用于在應用組…

2. JavaScript 語法和數據類型

1. 基礎 JavaScript不區分大小寫 2. 注釋 // 單行注釋/* 這是一個更長的,多行注釋 *//* 然而,你不能,/* 嵌套注釋 */ 語法錯誤 */3. 聲明 var 聲明一個變量,可選初始化一個值。 let 聲明一個塊作用域的局部變量,可…

ORM(對象關系映射)概念詳解

一、技術難點 ORM,即對象關系映射(Object-Relational Mapping),它的技術難點主要體現在如何將面向對象編程中的類和對象高效地映射到關系型數據庫中的表和記錄。具體來說,有以下幾個方面的技術挑戰: 數據類…

計算機畢業設計項目、管理系統、可視化大屏、大數據分析、協同過濾、推薦系統、SSM、SpringBoot、Spring、Mybatis、小程序項目編號1-500

大家好,我是DeBug,很高興你能來閱讀!作為一名熱愛編程的程序員,我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里,我將會結合實際項目經驗,分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

桌面型激光雕刻機的發展前景及TMC應用優勢

一、行業現狀 近兩年來,激光雕刻行業正處于快速發展階段。隨著人們生活水平的提高,對個性化、定制化產品的需求日益增加,激光雕刻以其獨特的創意和精美的效果,滿足了消費者對個性化產品的追求。同時,隨著科技的不斷進…

OCP 安裝 OceanBase集群(企業版3.2.4.1)

創建集群 登錄OCP界面 1.點擊左側工具欄中的集群 2.進入集群頁面后 點擊 右上角的創建集群 集群設置 進入 創建集群 頁面,進行 目標集群 配置 集群種類 根據 生產環境 選擇 分布式 或者 單機集中式,第一次安裝 集群類型 選擇 主集群。 注意&#xf…

計算機網絡到底是指什么?

計算機網絡是信息技術領域中最為核心和復雜的一部分,它涵蓋了眾多的技術原理和應用。下面,我們將從技術層面深入探討計算機網絡的相關內容。 一、計算機網絡的分層模型 計算機網絡的分層模型是網絡通信的基石,它將網絡通信過程劃分為不同的層…

怎么解決企業生產計劃排程的幾大難點?

生產計劃排程,作為企業管理中的核心環節,其復雜性和動態性一直困擾著眾多企業。然而,通過科學的策略和技術手段,這些難點并非不可攻克。 生產環境的動態變化,如臨時訂單改變、緊急插單的需求、產品流程變化等&#xff…

Linux中網絡配置項目筆記

1.NetworkManager安裝 (或者安裝network.service,不要一起裝防止網絡沖突) 有網絡的狀態下yum install 下載無網絡的狀態下使用預先下載rpm包 rpm -ivh systemctl start NetworkManager #啟動 systemctl stop NetworkManager #停止 systemctl restart NetworkMana…