【Sklearn】基于決策樹算法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于決策樹算法的數據分類預測(Excel可直接替換數據)

  • 1.模型原理
    • 1.1 模型原理
    • 1.2 數學模型
  • 2.模型參數
  • 3.文件結構
  • 4.Excel數據
  • 5.下載地址
  • 6.完整代碼
  • 7.運行結果

1.模型原理

決策樹是一種基于樹狀結構的分類和回歸模型,它通過一系列的決策規則來將數據劃分為不同的類別或預測值。決策樹的模型原理和數學模型如下:

1.1 模型原理

決策樹的基本思想是從根節點開始,通過一系列的節點和分支,根據不同特征的取值將數據集劃分成不同的子集,直到達到葉節點,然后將每個葉節點分配到一個類別或預測值。決策樹的構建過程就是確定如何選擇特征以及如何劃分數據集的過程。

決策樹的主要步驟:

  1. 選擇特征: 從所有特征中選擇一個最佳特征作為當前節點的劃分特征,這個選擇通常基于某個度量(如信息增益、基尼系數)來評估不同特征的重要性。

  2. 劃分數據集: 根據選擇的特征,將數據集劃分成多個子集,每個子集對應一個分支。

  3. 遞歸構建: 對每個子集遞歸地重復步驟1和步驟2,直到滿足停止條件,如達到最大深度、樣本數不足等。

  4. 葉節點賦值: 在構建過程中,根據訓練數據的真實標簽或均值等方式,為葉節點分配類別或預測值。

1.2 數學模型

在數學上,決策樹可以表示為一個樹狀結構,其中每個節點表示一個特征的劃分,每個分支代表一個特征取值的分支。具體來說,每個節點可以由以下元素定義:

  1. 劃分特征: 表示選擇哪個特征進行劃分。

  2. 劃分閾值: 表示在劃分特征上的取值閾值,用于將數據分配到不同的子集。

  3. 葉節點值: 表示在達到葉節點時所預測的類別或預測值。

在決策樹的訓練過程中,我們尋找最優的劃分特征和劃分閾值,以最大程度地減少不純度(或最大程度地增加信息增益、降低基尼指數等)。

數學模型可以用以下形式表示:

f ( x ) = { C 1 , if? x belongs?to?region? R 1 C 2 , if? x belongs?to?region? R 2 ? ? C k , if? x belongs?to?region? R k f(x) = \begin{cases} C_1, & \text{if } x \text{ belongs to region } R_1 \\ C_2, & \text{if } x \text{ belongs to region } R_2 \\ \vdots & \vdots \\ C_k, & \text{if } x \text{ belongs to region } R_k \end{cases} f(x)=? ? ??C1?,C2?,?Ck?,?if?x?belongs?to?region?R1?if?x?belongs?to?region?R2??if?x?belongs?to?region?Rk??

其中, C i C_i Ci?表示葉節點的類別或預測值, R i R_i Ri?表示根據特征劃分得到的子集。

總之,決策樹通過遞歸地選擇最佳特征和閾值,將數據集劃分為多個子集,最終形成一個樹狀結構的模型,用于分類或回歸預測。

2.模型參數

DecisionTreeClassifierscikit-learn庫中用于構建決策樹分類器的類。它具有多個參數,用于調整決策樹的構建和性能。以下是一些常用的參數及其說明:

  1. criterion: 衡量分割質量的標準。可以是"gini"(基尼系數)或"entropy"(信息熵)。默認為"gini"。

  2. splitter: 用于選擇節點分割的策略。可以是"best"(選擇最優的分割)或"random"(隨機選擇分割)。默認為"best"。

  3. max_depth: 決策樹的最大深度。如果為None,則節點會擴展,直到所有葉節點都是純的,或者包含少于min_samples_split個樣本。默認為None。

  4. min_samples_split: 節點分裂所需的最小樣本數。如果一個節點的樣本數少于這個值,就不會再分裂。默認為2。

  5. min_samples_leaf: 葉節點所需的最小樣本數。如果一個葉節點的樣本數少于這個值,可以合并到一個葉節點。默認為1。

  6. min_weight_fraction_leaf: 葉節點所需的最小權重分數總和。與min_samples_leaf類似,但是使用樣本權重而不是樣本數量。默認為0。

  7. max_features: 尋找最佳分割時要考慮的特征數量。可以是整數、浮點數、字符串或None。默認為None。

  8. random_state: 隨機數生成器的種子,用于隨機性控制。默認為None。

  9. max_leaf_nodes: 最大葉節點數。如果設置,算法會通過去掉最不重要的葉節點來合并其他節點。默認為None。

  10. min_impurity_decrease: 分割需要達到的最小不純度減少量。如果分割不會降低不純度超過這個閾值,則節點將被視為葉節點。默認為0。

  11. class_weight: 類別權重,用于處理不平衡數據集。

這些是DecisionTreeClassifier中一些常用的參數。根據你的數據和問題,你可以根據需要調整這些參數的值,以獲得更好的模型性能。在實際應用中,根據數據的特點進行調參非常重要。

3.文件結構

在這里插入圖片描述

iris.xlsx						% 可替換數據集
Main.py							% 主函數

4.Excel數據

在這里插入圖片描述

5.下載地址

- 資源下載地址

6.完整代碼

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as snsdef decision_tree_classification(data_path, test_size=0.2, random_state=42):# 加載數據data = pd.read_excel(data_path)# 分割特征和標簽X = data.iloc[:, :-1]  # 所有列除了最后一列y = data.iloc[:, -1]   # 最后一列# 劃分訓練集和測試集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)# 創建決策樹分類器# 1. ** criterion: ** 衡量分割質量的標準。可以是"gini"(基尼系數)或"entropy"(信息熵)。默認為"gini"。# 2. ** splitter: ** 用于選擇節點分割的策略。可以是"best"(選擇最優的分割)或"random"(隨機選擇分割)。默認為"best"。# 3. ** max_depth: ** 決策樹的最大深度。如果為None,則節點會擴展,直到所有葉節點都是純的,或者包含少于min_samples_split個樣本。默認為None。# 4. ** min_samples_split: ** 節點分裂所需的最小樣本數。如果一個節點的樣本數少于這個值,就不會再分裂。默認為2。# 5. ** min_samples_leaf: ** 葉節點所需的最小樣本數。如果一個葉節點的樣本數少于這個值,可以合并到一個葉節點。默認為1。# 6. ** min_weight_fraction_leaf: ** 葉節點所需的最小權重分數總和。與min_samples_leaf類似,但是使用樣本權重而不是樣本數量。默認為0。# 7. ** max_features: ** 尋找最佳分割時要考慮的特征數量。可以是整數、浮點數、字符串或None。默認為None。# 8. ** random_state: ** 隨機數生成器的種子,用于隨機性控制。默認為None。# 9. ** max_leaf_nodes: ** 最大葉節點數。如果設置,算法會通過去掉最不重要的葉節點來合并其他節點。默認為None。# 10. ** min_impurity_decrease: ** 分割需要達到的最小不純度減少量。如果分割不會降低不純度超過這個閾值,則節點將被視為葉節點。默認為0。# 11. ** class_weight: ** 類別權重,用于處理不平衡數據集。# 使用gini作為分割標準,設置最大深度為3,最小樣本數為5model = DecisionTreeClassifier(criterion='gini', max_depth=3, min_samples_split=5)# 在訓練集上訓練模型model.fit(X_train, y_train)# 在測試集上進行預測y_pred = model.predict(X_test)# 計算準確率accuracy = accuracy_score(y_test, y_pred)return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracyif __name__ == "__main__":# 使用函數進行分類任務data_path = "iris.xlsx"confusion_mat, true_labels, predicted_labels, accuracy = decision_tree_classification(data_path)print("真實值:", true_labels)print("預測值:", predicted_labels)print("準確率:{:.2%}".format(accuracy))# 繪制混淆矩陣plt.figure(figsize=(8, 6))sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")plt.title("Confusion Matrix")plt.xlabel("Predicted Labels")plt.ylabel("True Labels")plt.show()# 用圓圈表示真實值,用叉叉表示預測值# 繪制真實值與預測值的對比結果plt.figure(figsize=(10, 6))plt.plot(true_labels, 'o', label="True Labels")plt.plot(predicted_labels, 'x', label="Predicted Labels")plt.title("True Labels vs Predicted Labels")plt.xlabel("Sample Index")plt.ylabel("Label")plt.legend()plt.show()

7.運行結果

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

MySql(干貨)

寫這篇博客的目的不是為了將介紹原理,而是為了Sql中的代碼操作屬實太多了,在這里進行一個匯總,方便查閱!!! Sql分類 分類全稱說明 DDL Data Definintion Language數據定義語言,用來定義數據庫對…

微信小程序(由淺到深)

文章目錄 一. 項目基本配置1. 項目組成2. 常見的配置文件解析3. app.json全局的五大配置4.單個頁面中的page配置5. App函數6.tabBar配置 二. 基本語法,事件,單位1. 語法2. 事件3. 單位 三. 數據響應式修改四 . 內置組件1. button2. image3. input4. 組件…

k8s常用資源管理 控制

目錄 Pod(容器組):Pod是Kubernetes中最小的部署單元,可以包含一個或多個容器。Pod提供了一種邏輯上的封裝,使得容器可以一起共享網絡和存儲資源 1、創建一個pod 2、pod管理 pod操作 目錄 創建Pod會很慢 Pod&…

什么是事務,并發帶來的事務問題以及事務隔離級別(圖文詳解)

一、什么是事務? 簡單說就是邏輯上的一組操作,要么都執行,要么都不執行。 舉個例子,假如小明要給小紅轉賬100元,這個轉賬會涉及到兩個關鍵操作:①將小明的余額減少100元。 ②將小紅的余額增加100元 。但…

學習筆記整理-JS-04-流程控制語句

文章目錄 一、條件語句1. if語句的基本使用2. if else if多條件分支3. if語句算法題4. switch語句5. 三元運算符 二、循環語句1. for循環語句2. for循環算法題3. while循環語句4. break和continue5. do while語句 三、初識算法1. 什么是算法2. 累加器和累乘器3. 窮舉法4. 綜合算…

給大家推薦一些文本翻譯、文檔翻譯API接口

最近在項目中要接入文本翻譯和文檔翻譯功能,滿足在工作時使用,又需要了解每個人的使用情況,所以采用了集成翻譯API的方式,我再調研時也查了比較多的資料,總結了我感覺比較好的網站。 推薦網站 1、百度翻譯&#xff0…

設計模式(2)工廠方法模式

一、 1、介紹:定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。簡單工廠模式的最大優點在于工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對于客戶端來說…

odoo-034 float 浮點數比較

文章目錄 前提問題解決總結 前提 odoo 版本:13 python:3.6.9 問題 比較銷售訂單行中已送貨跟已開票,在 tree 視圖顯示搜索后的結果。發現搜索條件為已送貨 > 已開票時,結果中會包含已送貨已開票的。 解決 把這兩個值打印出…

LeNet中文翻譯

Gradient-Based Learning Applied to Document Recognition 基于梯度的學習應用于文檔識別 摘要 使用反向傳播算法訓練的多層神經網絡構成了成功的基于梯度的學習技術的最佳示例。給定適當的網絡架構,基于梯度的學習算法可用于合成復雜的決策表面,該決策…

【Vue-Router】使用 prams 路由傳參失效

報錯信息: [Vue Router warn]: Discarded invalid param(s) “name”, “price”, “id” when navigating. list.json {"data": [{"name": "面","price":300,"id": 1},{"name": "水",&quo…

node獲取微信小程序登錄用戶的openid

前提準備: 1、需要知道AppID(小程序ID) 2、AppSecret(小程序密鑰) 3、調wx.login成功后返回的code 代碼如下: const express require(express); const router express.Router(); const request require(request) const APP_URL https://api.wei…

考研408 | 【計算機網絡】 網絡層

導圖 網絡層: 路由器功能:轉發&路由選擇 數據平面 數據平面執行的主要功能是根據轉發表進行轉發,這是路由器的本地動作。 控制平面 1.傳統方法/每路由器法: 2.SDN方法(Software-Defined Networking) 控制平面中的…

C++并發多線程--多個線程的數據共享和保護

目錄 1--創建并等待多個線程 2--數據共享 2-1--數據只讀 2-2--數據讀寫 2-3--共享數據保護簡單案例 1--創建并等待多個線程 創建多個線程時,可以使用同一個線程入口函數; 多個線程的執行順序與操作系統的調度機制有關,并不和創建線程的先…

html實現商品圖片放大鏡,html圖片放大鏡預覽

效果 實現 復制粘貼&#xff0c;修改圖片路徑即可使用 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>商品圖片放大鏡</title></head><style>body {margin: 0;padding: 0;}#app {padding: 10px;posit…

關于青少年學習演講與口才對未來的領導力的塑造的探析

標題&#xff1a;青少年學習演講與口才對未來領導力的塑造&#xff1a;一項探析 摘要&#xff1a; 本論文旨在探討青少年學習演講與口才對未來領導力的塑造的重要性和影響。通過分析演講和口才對青少年的益處&#xff0c;以及如何培養這些技能來促進領導力的發展&#xff0c;我…

Harmony創建項目ohpm報錯

Harmony創建FA模型的項目時報如下錯&#xff1a; The registry is empty - edit .ohpmrc file or use "ohpm config set registry your_registry" command to set registry.解決方法&#xff1a; File -> Settings -> Build,Execution,Deployment -> Ohpm …

機器學習基礎(五)

決策樹 決策樹是一種預測模型,它代表著對象屬屬性與對象值之間的一種映射關系。樹中的每個節點代表一個對象,分叉路徑(或者叫樹枝)則代表一個屬性值。 決策樹常用方法: 分類樹分析,是一種監督學習,用于預計結果可能為離散類型。 回歸樹分析,用于預計結果為實數。 CART,…

Mysql事務及其隔離機制/隔離級別

mysql事務特性是什么&#xff1f; 原子性(atomicity)&#xff1a;一個事務必須視為一個不可分割的最小工作單元&#xff0c;整個事務中的所有操作要么全部提交成功&#xff0c;要么全部失敗回滾&#xff0c;對于一個事務來說&#xff0c;不可能只執行其中的一部分操作&#xf…

docker可視化工具Portainer

1:Portainer簡介 Portainer是一個docker可視化管理工具&#xff0c;可以非常方便地管理docker鏡像容器。官網地址&#xff1a;https://www.portainer.io/ 注&#xff1a;現在Portainer有BE&#xff08;收費&#xff09;和CE&#xff08;免費&#xff09;版本&#xff0c;安裝的…

【音視頻、chatGpt】h5頁面最小化后,再激活后視頻停住問題的解決

目錄 現象 觀察 解決 現象 頁面有時候要切換&#xff0c;要最小化&#xff1b;短時間或者幾個小時內切換回來&#xff0c;視頻可以正常續上&#xff1b;而放置較長時間&#xff0c;幾個小時或者一晚上&#xff0c;切換回來后&#xff0c;視頻可能卡死 觀察 切換頁面&#x…