機器學習算法應用——CART決策樹

CART決策樹(4-2)

CART(Classification and Regression Trees)決策樹是一種常用的機器學習算法,它既可以用于分類問題,也可以用于回歸問題。CART決策樹的主要原理是通過遞歸地將數據集劃分為兩個子集來構建決策樹。在分類問題中,CART決策樹通過選擇一個能夠最大化分裂后各個子集純度提升的特征進行分裂,從而將數據劃分為不同的類別。

CART決策樹的構建過程包括以下幾個步驟:

  1. 特征選擇:從數據集中選擇一個最優特征,用于劃分數據集。最優特征的選擇基于某種準則,如基尼指數(Gini Index)或信息增益(Information Gain)。
  2. 決策樹生成:根據選定的最優特征,將數據集劃分為兩個子集,并遞歸地在每個子集上重復上述過程,直到滿足停止條件(如子集大小小于某個閾值、所有樣本屬于同一類別等)。
  3. 剪枝:為了避免過擬合,可以對生成的決策樹進行剪枝操作,即刪除一些子樹或葉子節點,以提高模型的泛化能力。

CART決策樹的優點包括:

  1. 計算簡單,易于理解,可解釋性強。
  2. 不需要預處理,不需要提前歸一化,可以處理缺失值和異常值。
  3. 既可以處理離散值也可以處理連續值。
  4. 既可以用于分類問題,也可以用于回歸問題。

然而,CART決策樹也存在一些缺點:

  1. 不支持在線學習,當有新樣本產生時,需要重新構建決策樹模型。
  2. 容易出現過擬合現象,生成的決策樹可能對訓練數據有很好的分類能力,但對未知的測試數據卻未必有很好的分類能力。
  3. 對于一些復雜的關系,如異或關系,CART決策樹可能難以學習。

CART決策樹在許多領域都有廣泛的應用,如推薦系統中的商品推薦模型、金融風控中的信用評分和欺詐檢測、醫療診斷中的疾病預測等。此外,CART決策樹還可以用于社交媒體情感分析等領域。

  1. 數據

使用Universal Bank數據集。

示例:

????????

IDAgeExperienceIncomeZIP CodeFamilyCCAvgEducationMortgagePersonal LoanSecurities AccountCD AccountOnlineCreditCard
1251499110741.61001000
24519349008931.51001000
339151194720111000000
43591009411212.72000000
53584591330412000001
63713299212140.4215500010
75327729171121.52000010
85024229394310.33000001
93510819008930.6210400010
103491809302318.93010000
1165391059471042.43000000
12295459027730.12000010
1348231149310623.83001000
145932409492042.52000010
15674111291741121001000
166030229505411.53000011
1738141309501044.7313410000
184218819430542.41000000
1946211939160428.13010000
205528219472010.52001001
215631259401540.9211100010
2257276390095323000010
23295629027711.2126000010
244418439132020.7116301000
2536111529552123.9115900001
264319299430530.519700010
274016839506440.23000000
2846201589006412.41000011
295630489453912.23000011
3038131199410413.32010111
315935359310611.2312200010
3240162994117122000010
335328419480120.6319300000
34306189133030.93000000
35315509403541.83000010
364824819264730.71000000
3759351219472012.91000001
385125719581411.4319800000
39421814194114353011110
403813809411540.7328500010
415732849267231.63001000
42349609412232.31000000
433271329001941.1241210010
443915459561610.71000010
4546201049406515.71000011
465731529472042.51000001
473914439501430.7215300010
4837121949138040.2321111111
495626819574724.53000001
504016499237311.81000001
5132889209340.72001010
5261371319472012.91000010
53306729400510.1120700000
5450261909024532.1324010010
55295449581910.23000010
56411713994022281000010
575530299400530.12001110
5856311319561621.23010000
59282939406520.21000000
603151889132024.5145500000
614924399040431.72001010
6247211259340715.7111201000
6342182290089111000000
6442173294523402000010
6547231059002423.31000000
6659351319136013.81000011
6762361059567022.8133600000
685323459512342313201000
694721609340732.11000011
705329209004540.21000010
7142181159133513.51000001
7253296993907412000010
73442013092007151000001
7441168594606143000011
752831359461123.31000001
763171359490143.82010111

注意:數據集中的編號(ID)和郵政編碼(ZIP CODE)特征因為在分類模型中無意義,所以在數據預處理階段將它們刪除。

  1. 使用CART決策樹對數據進行分類
  1. 使用留出法劃分數據集,訓練集:測試集為7:3。
# 使用留出法劃分數據集,訓練集:測試集為7:3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  1. 使用CART決策樹對訓練集進行訓練
# 使用CART決策樹對訓練集進行訓練,深度限制為10層
model = DecisionTreeClassifier(max_depth=10)
model.fit(X_train, y_train)

決策樹的深度限制為10層,max_depth=10。

  1. 使用訓練好的模型對測試集進行預測并輸出預測結果模型準確度
# 使用訓練好的模型對測試集進行預測
y_pred = model.predict(X_test)# 輸出預測結果和模型準確度
accuracy = accuracy_score(y_test, y_pred)
print("模型準確度:", accuracy)
  1. 可視化訓練好的CART決策樹模型
# 可視化訓練好的CART決策樹模型
dot_data = export_graphviz(model, out_file=None,feature_names=X.columns,class_names=['0', '1'],filled=True, rounded=True,special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("Universal_Bank_CART")  # 保存為PDF文件
  1. 安裝graphviz模塊

首先在windows系統中安裝graphviz模塊

32位系統使用windows_10_cmake_Release_graphviz-install-10.0.1-win32.exe

64位系統使用windows_10_cmake_Release_graphviz-install-10.0.1-win64.exe

注意:安裝時使用下圖中圈出的選項

安裝完成后使用pip install graphviz指令在python環境中安裝graphviz庫。

  1. 使用graphviz模塊可視化模型
# 可視化訓練好的CART決策樹模型
dot_data = export_graphviz(model, out_file=None,feature_names=X.columns,class_names=['0', '1'],filled=True, rounded=True,special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("Universal_Bank_CART")  # 保存為PDF文件

完整代碼:

# 導入所需的庫
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.tree import export_graphviz
import graphviz# 讀取數據集
data = pd.read_csv("universalbank.csv")# 數據預處理:刪除無意義特征
data = data.drop(columns=['ID', 'ZIP Code'])# 劃分特征和標簽
X = data.drop(columns=['Personal Loan'])
y = data['Personal Loan']# 使用留出法劃分數據集,訓練集:測試集為7:3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 使用CART決策樹對訓練集進行訓練,深度限制為10層
model = DecisionTreeClassifier(max_depth=10)
model.fit(X_train, y_train)# 使用訓練好的模型對測試集進行預測
y_pred = model.predict(X_test)# 輸出預測結果和模型準確度
accuracy = accuracy_score(y_test, y_pred)
print("模型準確度:", accuracy)# 可視化訓練好的CART決策樹模型
dot_data = export_graphviz(model, out_file=None,feature_names=X.columns,class_names=['0', '1'],filled=True, rounded=True,special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("Universal_Bank_CART6")  # 保存為PDF文件

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

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

相關文章

力扣 256. 粉刷房子 LCR 091. 粉刷房子 python AC

動態規劃 class Solution:def minCost(self, costs):row, col len(costs), 3dp [[0] * col for _ in range(row 1)]for i in range(1, row 1):for j in range(col):dp[i][j] costs[i - 1][j - 1]if j 0:dp[i][j] min(dp[i - 1][1], dp[i - 1][2])elif j 1:dp[i][j] m…

【QT教程】QT6硬件高級編程實戰案例 QT硬件高級編程

QT6硬件高級編程實戰案例 使用AI技術輔助生成 QT界面美化視頻課程 QT性能優化視頻課程 QT原理與源碼分析視頻課程 QT QML C擴展開發視頻課程 免費QT視頻課程 您可以看免費1000個QT技術視頻 免費QT視頻課程 QT統計圖和QT數據可視化視頻免費看 免費QT視頻課程 QT性能優化視頻免…

【GoLang基礎】通道(channel)是什么?

問題引出: Go語言中的通道(channel)是什么? 解答: 通道(channel)是 Go 語言中用于協程(goroutine)之間通信和同步的機制。通道提供了一種安全、簡單且高效的方式&#x…

idea運行SpringBoot項目爆紅提示出現:Java HotSpot(TM) 64-Bit Server VM warning...讓我來看看~

在運行SpringBoot項目的時候,發現總有這個警告提示出現,有點強迫癥真的每次運行項目都很難受啊!那么今天便來解決這個問題! 先來看一下提示內容:Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none an…

FreeRTOS標準庫例程代碼

1.設備STM32F103C8T6 2.工程模板 單片機: 部分單片機的程序例程 - Gitee.comhttps://gitee.com/lovefoolnotme/singlechip/tree/master/STM32_FREERTOS/1.%E5%B7%A5%E7%A8%8B%E6%A8%A1%E6%9D%BF 3.代碼 1-FreeRTOS移植模板 #include "system.h" #include "…

C語言編程中布爾設置位掩碼示例

在C語言編程中,當你想使用整數(通常是unsigned int或uint8_t, uint16_t, uint32_t等)的位來存儲多個布爾設置時,你會使用位掩碼。每個設置對應于整數中的一個位,你可以通過位操作(如按位與&、按位或|、…

Rust:用 Warp 庫實現 Restful API 的簡單示例

直接上代碼: 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…

uniap之微信公眾號支付

近來用uniapp開發H5的時候,需要接入支付,原來都是基于后端框架來做的,所以可謂是一路坑中過,今天整理下大致流程分享給大家。 先封裝util.js,便于后面調用 const isWechat function(){return String(navigator.userA…

隊列的實現(使用C語言)

完整代碼鏈接:DataStructure: 基本數據結構的實現。 (gitee.com) 目錄 一、隊列的概念: 二、隊列的實現: 使用鏈表實現隊列: 1.結構體設計: 2.初始化: 3.銷毀: 4.入隊: 5.…

OC foudation框架(下)的學習

OCfoudation框架(下) 前面學習了有關OCfoudation框架的部分內容,我們現在對于后面的內容繼續學習。 文章目錄 OCfoudation框架(下)數組(NSArray和NSMutableArray)對集合元素整體調用方法排序使用…

會賺錢的人都在做這件事:你了解嗎?

在我們日常生活的點滴中,以及在各種場合的交互中,利他思維始終扮演著不可或缺的角色。當我們追求合作與共贏時,單方面的自我立場顯然是不夠的,真正的關鍵在于換位思考,尋找并滿足對方的需求。 互利互贏的核心理念正是利…

設置docker容器時區

設置docker容器時區 查看當前系統時間 1.1 查看當前系統版本 cat /etc/issue1.2 查看當前系統時間 date查看鏡像默認時間 2.1 alpine鏡像 sudo docker run -it --rm alpine date2.2 ubuntu鏡像 sudo docker run -it --rm ubuntu date2.3 centos鏡像 sudo docker run -it --rm …

虛擬知識付費系統源碼推薦,在線教育雙十一怎么做活動?

又是一年光棍節,啊不是,剁手節。小伙伴們早就摩拳擦掌準備剁手了,這個時候,幾乎所有線上平臺都行動起來了,而在線教育行業也沒有閑著。如今,雙十一已經成為了各大在線教育公司用來變現的一個大殺器&#xf…

ruoyi-vue-pro 使用記錄(4)

ruoyi-vue-pro 使用記錄(4) CRM數據庫線索客戶商機合同回款產品其他 CRM 文檔 主要分為 6 個核心模塊:線索、客戶、商機、合同、回款、產品。 線索管理以 crm_clue 作為核心表客戶管理以 crm_customer 作為核心表商機管理以 crm_business 作…

JavaScript數組(Array)方法 - toReversed、toSorted、toSpliced

最近發現幾個數組方法,是一些常規方法的升級版,比較有意思,分享給大家 文章目錄 一、溫故二、知新toReversedtoSortedtoSpliced 一、溫故 我們先來回顧幾個比較常用的方法:reverse,sort,splice眾所周知&a…

luceda ipkiss教程 69:導出器件或者線路的三維模型

ipkiss 3.12版加入write_obj函數,可以直接輸出器件的三維模型。 如,輸出自定義的mmi的三維模型: 代碼如下: from si_fab import all as pdk from ipkiss3 import all as i3class MMI1x2(i3.PCell):"""MMI with …

kaldi學習參考

HMM模型 https://www.cnblogs.com/baixf-xyz/p/16777438.htmlhttps://www.cnblogs.com/baixf-xyz/p/16777438.htmlGMM-HMM 基于GMM-HMM的語音識別系統https://www.cnblogs.com/baixf-xyz/p/16777439.html https://www.cnblogs.com/baixf-xyz/p/16777426.htmlhttps://www.cnbl…

全棧開發之路——前端篇(6)生命周期和自定義hooks

全棧開發一條龍——前端篇 第一篇:框架確定、ide設置與項目創建 第二篇:介紹項目文件意義、組件結構與導入以及setup的引入。 第三篇:setup語法,設置響應式數據。 第四篇:數據綁定、計算屬性和watch監視 第五篇 : 組件…

碼一點網站

Linux命令查詢網站 https://www.lzltool.com/LinuxCommand/Index 小林 x 圖解計算機基礎 https://xiaolincoding.com/ 代碼隨想錄 https://programmercarl.com/ 可用于爬蟲 https://books.toscrape.com/ 數據結構可視化 https://www.cs.usfca.edu/~galles/visualization/ …

fastText-文本分類

fastText介紹 fastText是一個快速文本分類算法,與基于神經網絡的分類算法相比有兩大優點: 1、fastText在保持高精度的情況下加快了訓練速度和測試速度 2、fastText不需要預訓練好的詞向量,fastText會自己訓練詞向量 3、fastText兩個重要的優化:Hierarchical Softmax、N-gr…