決策樹算法介紹:原理與案例實現以及Python、R、Java、 MATLAB中使用

決策樹(Decision Tree)是一種常用的機器學習算法,適用于分類和回歸任務。它通過一系列的二分決策將數據逐步劃分成不同的子集,直到每個子集中的數據點具有較高的同質性。下面介紹決策樹的基本原理,并通過Python實現一個簡單的案例。

原理

決策樹的構建過程如下:

  1. 選擇最佳分裂點

    • 分類樹:通常使用信息增益或基尼不純度作為分裂準則。
      • 信息增益:衡量分裂后信息的不確定性減少的程度。
      • 基尼不純度:衡量一個數據集的純度。
    • 回歸樹:通常使用最小均方誤差(MSE)作為分裂準則。
  2. 分裂數據集

    • 根據選擇的特征及其閾值將數據集分成兩個子集。
  3. 遞歸構建子樹

    • 對每個子集重復步驟1和步驟2,直到滿足停止條件(如達到最大深度或子集中的數據點數量小于某個閾值)。
  4. 構建葉節點

    • 分類樹:葉節點通常是多數類標簽。
    • 回歸樹:葉節點通常是子集中所有數據點的均值。

案例實現

下面是使用Python和scikit-learn庫實現一個簡單的決策樹分類案例:

數據準備

我們使用著名的Iris數據集,該數據集包含三種鳶尾花(Setosa、Versicolour、Virginica)的特征和類別。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree# 加載數據集
iris = load_iris()
X = iris.data
y = iris.target# 拆分數據集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

訓練決策樹模型

# 初始化決策樹分類器
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)# 訓練模型
clf.fit(X_train, y_train)

評估模型

# 預測測試集
y_pred = clf.predict(X_test)# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
# 可視化決策樹
plt.figure(figsize=(12, 8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()

詳細解釋

1、加載數據集:我們使用scikit-learnload_iris函數加載Iris數據集。

2、拆分數據集:使用train_test_split函數將數據集拆分為訓練集和測試集。

3、訓練模型:我們初始化一個DecisionTreeClassifier對象,并使用訓練集進行訓練。

4、評估模型:我們使用測試集對模型進行預測,并計算模型的準確率。

5、可視化決策樹:使用plot_tree函數可視化決策樹結構,展示各個節點的分裂條件和類別。

拓展:

Python 是目前機器學習和數據科學領域使用最廣泛的編程語言。其流行主要得益于豐富的機器學習庫和工具,如?scikit-learnTensorFlowKeraspandas?和?numpy?等。Python 的易用性和強大的社區支持使其成為實現決策樹算法的首選語言。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score# 加載數據集
iris = load_iris()
X = iris.data
y = iris.target# 拆分數據集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 初始化決策樹分類器
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)# 訓練模型
clf.fit(X_train, y_train)# 預測測試集
y_pred = clf.predict(X_test)# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

2.?R

R 是另一個廣泛用于統計分析和數據科學的編程語言,特別是在學術界和研究領域。R 提供了多個用于決策樹的包,如?rpartparty?和?caret,使得用戶可以輕松實現和應用決策樹算法。

# 加載包
library(rpart)# 加載數據集
data(iris)# 拆分數據集
set.seed(42)
train_indices <- sample(1:nrow(iris), 0.7 * nrow(iris))
train_data <- iris[train_indices, ]
test_data <- iris[-train_indices, ]# 訓練決策樹模型
model <- rpart(Species ~ ., data=train_data, method="class")# 預測測試集
pred <- predict(model, test_data, type="class")# 計算準確率
accuracy <- sum(pred == test_data$Species) / nrow(test_data)
print(paste("Accuracy:", accuracy))

3.?Java

Java 是一種廣泛用于企業級應用開發的編程語言,也有多個機器學習庫支持決策樹算法,如 Weka 和 Deeplearning4j。Java 的優勢在于其強大的性能和可擴展性,適用于大規模數據處理。

import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
import weka.classifiers.trees.J48;
import weka.classifiers.Evaluation;public class DecisionTreeExample {public static void main(String[] args) throws Exception {// 加載數據集DataSource source = new DataSource("path/to/iris.arff");Instances data = source.getDataSet();data.setClassIndex(data.numAttributes() - 1);// 拆分數據集int trainSize = (int) Math.round(data.numInstances() * 0.7);int testSize = data.numInstances() - trainSize;Instances trainData = new Instances(data, 0, trainSize);Instances testData = new Instances(data, trainSize, testSize);// 訓練決策樹模型J48 tree = new J48();tree.buildClassifier(trainData);// 評估模型Evaluation eval = new Evaluation(trainData);eval.evaluateModel(tree, testData);System.out.println("Accuracy: " + eval.pctCorrect());}
}

4.?MATLAB

MATLAB 是一個廣泛用于工程和科學計算的編程環境,具有強大的數據處理和可視化功能。MATLAB 提供了豐富的機器學習工具箱(如 Statistics and Machine Learning Toolbox)來實現決策樹算法。

% 加載數據集
load fisheriris% 拆分數據集
cv = cvpartition(species, 'HoldOut', 0.3);
train_data = meas(training(cv), :);
train_labels = species(training(cv), :);
test_data = meas(test(cv), :);
test_labels = species(test(cv), :);% 訓練決策樹模型
tree = fitctree(train_data, train_labels);% 預測測試集
pred_labels = predict(tree, test_data);% 計算準確率
accuracy = sum(strcmp(pred_labels, test_labels)) / length(test_labels);
fprintf('Accuracy: %.2f\n', accuracy);

總結

Python 是目前實現和使用決策樹算法最流行的語言,主要得益于其豐富的庫和工具、易用性以及強大的社區支持。此外,R、Java 和 MATLAB 也是常用的實現決策樹算法的語言,適用于不同的應用場景和需求。

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

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

相關文章

C++ :lambda表達式

目錄 lambda表達式書寫格式&#xff1a; lambda表達式各部分說明&#xff1a; lambda的使用示范&#xff1a; 注意事項&#xff1a; 返回值類型可以省略&#xff0c;參數也可也省略&#xff1a; sort內部也可以直接寫lambda表達式&#xff1a; 排序時利用lambda進行排序…

STM32MP135裸機編程:使用軟件觸發硬件復位

0 參考資料 STM32MP13xx參考手冊.pdf 1 使用寄存器實現軟件復位 1.1 復位電路概述 重點關注下面標紅的路線&#xff1a; 通過這條路線可以清楚看到&#xff0c;我們可以通過設置RCC_MP_GRSTCSETR寄存器讓RPCTL&#xff08;復位脈沖控制器&#xff09;給NRST&#xff08;硬件復…

蘋果可能與谷歌合作推AI訂閱服務;全國首個司法審判大模型在深圳上線

&#x1f989; AI新聞 &#x1f680; 蘋果可能與谷歌合作推AI訂閱服務 摘要&#xff1a;蘋果宣布將與OpenAI合作推出Apple Intelligence&#xff0c;并有望在今年秋季與谷歌達成合作&#xff0c;接入Gemini。Meta的Llama因質量不佳被拒。蘋果計劃推出訂閱模式的智能功能服務&…

Oracle PL / SQL 存儲過程

PL / SQL存儲過程不返回值。他們執行他們的指示并返回。您不能在賦值語句&#xff08;如函數&#xff09;的右側使用存儲過程。 創建存儲過程 以下代碼是一個非常簡單的存儲過程示例。 它基于SYS.DBMS_LOCK包的程序sleep&#xff08;數量&#xff09;。 此存儲過程將停止執行…

在 C++的跨平臺開發中,如何處理不同操作系統和編譯器之間的細微差異,以確保程序能夠穩定且高效地運行?

在 C 的跨平臺開發中&#xff0c;處理不同操作系統和編譯器之間的細微差異是非常重要的。以下是一些處理差異的技巧&#xff1a; 使用條件編譯&#xff1a;使用預處理指令&#xff0c;根據不同的操作系統和編譯器來編寫不同的代碼。 #if defined(_WIN32)// Windows 特定代碼 …

kafka的工作原理與常見問題

定義 kafka是一個分布式的基于發布/訂閱模式的消息隊列&#xff08;message queue&#xff09;&#xff0c;主要應用于大數據的實時處理領域 消息隊列工作原理 kafka的組成結構 kafka的基礎架構主要有broker、生產者、消費者組構成&#xff0c;還包括zookeeper. 生產者負責發送…

算法09 日期相關模擬算法【C++實現】

這是《C算法寶典》算法篇的第09節文章啦~ 如果你之前沒有太多C基礎&#xff0c;請點擊&#x1f449;專欄&#xff1a;C語法入門&#xff0c;如果你C語法基礎已經爐火純青&#xff0c;則可以進階算法&#x1f449;專欄&#xff1a;算法知識和數據結構&#x1f449;專欄&#xff…

計算斜率,判斷斜率

#include <stdio.h> #include <stdlib.h> #include <math.h> #include <stdbool.h>// 定義常量 #define LOW_COOK_WINDOW_SIZE 20 // 滑動窗口大小&#xff0c;10個樣本點&#xff08;10秒&#xff09; #define LOW_COOK_SLOPE…

Java代碼生成器(開源版本)

一、在線地址 Java在線代碼生成器&#xff1a;在線訪問 二、頁面截圖 三、核心功能 支持Mybatis、MybatisPlus、Jpa代碼生成使用 antlr4 解析SQL語句&#xff0c;保證了SQL解析的成功率支持自定義包名、作者名信息支持自定義方法名、接口地址支持自定義選擇是否生成某個方法…

16-Python Pandas聚合函數

Python Pandas聚合函數 窗口函數可以與聚合函數一起使用&#xff0c;聚合函數指的是對一組數據求總和、最大值、最小值以及平均值的操作。 應用聚合函數 首先讓我們創建一個 DataFrame 對象&#xff0c;然后對聚合函數進行應用。 import pandas as pd import numpy as np d…

SQL中的子查詢和CTE(with ....as..)

第一次看到with as 這種類似于python中讀文件的寫法還是挺疑惑的&#xff0c;其實它是CTE&#xff0c;功能和子查詢很類似但又有不同點&#xff0c;在實際應用場景中具有著獨特作用。 子查詢 子查詢是在主查詢中的嵌套查詢&#xff0c;可以出現在SELECT、FROM、WHERE等子句中…

ai除安卓手機版APP軟件一鍵操作自動渲染去擦消稀缺資源下載

安卓手機版&#xff1a;點擊下載 蘋果手機版&#xff1a;點擊下載 電腦版&#xff08;支持Mac和Windows&#xff09;&#xff1a;點擊下載 一款全新的AI除安卓手機版APP&#xff0c;一鍵操作&#xff0c;輕松實現自動渲染和去擦消效果&#xff0c;稀缺資源下載 1、一鍵操作&…

數學建模(1):期末大亂燉

1 概述&#xff01;&#xff01; 1.1 原型和模型 原型&#xff1a;客觀存在的研究對象稱為原型&#xff0c;也稱為“系統”、“過程”。 機械系統、電力系統、化學反應過程、生產銷售過程等都是原型&#xff1b; 研究原型的結構和原理&#xff0c; 從而進行優化、預測、評價…

Perl編程藝術:深入探索Tie機制的魔力

&#x1f31f; Perl編程藝術&#xff1a;深入探索Tie機制的魔力 在Perl的世界里&#xff0c;tie功能是一種極其強大的特性&#xff0c;它允許程序員將變量綁定到一個對象上&#xff0c;從而改變這個變量的默認行為。這種機制為變量提供了一種代理訪問方式&#xff0c;使得變量…

Jedis、Lettuce、RedisTemplate連接中間件

jedis就像jdbc一樣&#xff0c;用于兩個端直接的連接。 1.創建Spring項目 這里不過多贅述... 2.導入連接工具jedis 在pom文件中導入jedis的依賴。 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version&…

結合數據索引結構看SQL的真實執行過程

引言 關于數據庫設計與優化的前幾篇文章中&#xff0c;我們提到了數據庫設計優化應該遵守的指導原則、數據庫底層的索引組織結構、數據庫的核心功能組件以及SQL的解析、編譯等。這些其實都是在為SQL的優化、執行的理解打基礎。 今天這篇文章&#xff0c;我們以MySQL中InnoDB存…

vim卡死

有些時候使用vim的時候莫名其妙的會卡死&#xff0c;導致輸入不了內容。查了一下資料發現&#xff0c;其實并不是vim卡死&#xff0c;而是在使用vim的工程中帶入了許多Windows上的使用習慣&#xff0c;比如“Ctrl-s”保存等&#xff0c;這可能會與Linux平臺的有些快捷鍵沖突。c…

Oracle PL / SQL 表 table

關系數據庫允許您在數據庫管理系統&#xff08;DBMS&#xff09;中存儲多個表。 您可以使用計算機上的查詢語言來操作表中的數據。 當前的查詢語言是結構化查詢語言&#xff08;SQL&#xff09;。 SQL是一組無關的命令&#xff0c;用于操作關系數據庫管理系統&#xff08;RD…

CleanMyMacX2024免費且強大的mac電腦系統優化工具

如果你的Mac電腦出現了存儲空間不足、運行緩慢、電池電量消耗過快等問題&#xff0c;那么CleanMyMacX這款軟件或許能為你提供解決方案。作為一款強大的系統優化工具&#xff0c;它能夠幫助用戶清理垃圾文件、優化內存和電池使用&#xff0c;從而提升Mac的性能表現&#xff0c;讓…

后端之路第三站(Mybatis)——XML文件操作sql

一、XML映射文件是啥 前面我們學過了在Mapper接口用注解的方式來操作sql語句 那么XML映射文件就另一種操作sql語句的方法 為什么還要有這么個玩意&#xff1f; 我簡單說就是&#xff1a;如果有的sql特別復雜的話&#xff0c;比如需要【動態sql】的話&#xff0c;就得用到XM…