CatBoost算法原理及Python實現

一、概述

??CatBoost 是在傳統GBDT基礎上改進和優化的一種算法,由俄羅斯 Yandex 公司開發,于2017 年開源,在處理類別型特征和防止過擬合方面有獨特優勢。

??在實際數據中,存在大量的類別型特征,如性別、顏色、類別等,傳統的算法通常需要在預處理中對這些特征進行獨熱編碼(One-Hot Encoding)或標簽編碼(Label Encoding)。但這些方法存在一些問題,獨熱編碼會增加數據的維度,導致模型訓練時間變長;標簽編碼可能會引入不必要的順序關系,影響模型的準確性。CatBoost 采用了一種獨特的處理方式,稱為 “Ordered Target Statistics”(有序目標統計),它通過對數據進行排序,利用數據的順序信息來計算類別型特征的統計量,從而將特征有效地融入到模型中,避免了傳統編碼方式的弊端。

??另外,在構建決策樹時,CatBoost 采用了對稱樹的結構,與傳統的非對稱決策樹相比,對稱樹在生長過程中,每層的節點數量相同,結構更加規整。這種結構使得模型在訓練過程中更加穩定,能夠減少過擬合的風險,同時也有助于提高訓練速度。

二、算法原理

1.對稱樹結構

??對稱樹結構在形式上是完全二叉樹結構,是指在構建決策樹時,對于每個節點的分裂,都考慮所有可能的特征和閾值組合,并且在樹的同一層中,所有節點的分裂方式是對稱的。具體可描述為

??特征選擇:在構建對稱樹時,CatBoost 會對所有可用的特征進行評估,計算每個特征對于目標變量的重要性。通過一些統計指標,如信息增益、基尼系數等,來衡量特征對數據劃分的有效性,選擇具有最高重要性的特征作為當前節點的分裂特征。

??閾值確定:對于選定的分裂特征,CatBoost 會遍歷該特征的所有可能取值,尋找一個最優的分裂閾值,使得分裂后的兩個子節點能夠最大程度地分離不同類別的數據,或者使目標變量在兩個子節點上的分布具有最大的差異。

??對稱分裂:一旦確定了分裂特征和閾值,就在當前節點上按照這個特征和閾值進行分裂,將數據集分為左右兩個子節點。在樹的同一層中,所有節點都按照相同的特征選擇和閾值確定方法進行分裂,形成對稱的樹結構。

2.訓練過程

(1) 初始化弱學習器
??首先,初始化一個弱學習器,通常是一個決策樹(是否對稱樹結構均可),記為 f 0 ( X ) f_0(X) f0?(X),其預測結果為初始的預測值 y ^ 0 \hat y_0 y^?0?。此時,初始預測值與真實值之間存在誤差。

(2) 計算殘差或負梯度
??在回歸任務中,計算每個樣本的殘差,即真實值 y i y_i yi?與當前模型預測值 y ^ i , t ? 1 \hat y_{i,t-1} y^?i,t?1?的差值 r i , t = y i ? y ^ i , t ? 1 r_{i,t}=y_i-\hat y_{i,t-1} ri,t?=yi??y^?i,t?1?,其中表示迭代的輪數。在分類任務中,計算損失函數關于當前模型預測值的負梯度
g i , t = ? ? L ( y i , y ^ i , t ? 1 ) ? y ^ i , t ? 1 g_{i,t}=-\frac{\vartheta L(y_i,\hat y_{i,t-1})}{\vartheta \hat y_{i,t-1}} gi,t?=??y^?i,t?1??L(yi?,y^?i,t?1?)?

(3) 構建決策樹
??使用計算得到的殘差(回歸任務)或負梯度(分類任務)作為新的目標值,使用“對稱樹結構” 的方式來構建一棵新的決策樹 f t ( X ) f_t(X) ft?(X)。同時采用一些限制決策樹深度、控制葉子節點數量的正則化技術。

(4) 更新模型
??根據新訓練的決策樹,更新當前模型。更新公式為 y ^ i , t = y ^ i , t ? 1 + α f t ( x i ) \hat y_{i,t}=\hat y_{i,t-1}+\alpha f_t(x_i) y^?i,t?=y^?i,t?1?+αft?(xi?),其中是學習率(也稱為步長),用于控制每棵樹對模型更新的貢獻程度。學習率較小可以使模型訓練更加穩定,但需要更多的迭代次數;學習率較大則可能導致模型收斂過快,甚至無法收斂。

(5) 重復迭代
??重復步驟 (2)–(4)步,不斷訓練新的決策樹并更新模型,直到達到預設的迭代次數、損失函數收斂到一定程度或滿足其他停止條件為止。最終,CatBoost模型由多棵決策樹組成,其預測結果是所有決策樹預測結果的累加。


過程示意圖

在這里插入圖片描述

三、應用場景

1. 結構化數據預測
??在金融領域,CatBoost 可以用于信用評估、風險預測等任務。通過分析客戶的各種屬性(如年齡、收入、信用記錄等分類和數值特征),預測客戶的信用等級和違約風險,幫助金融機構做出更準確的決策。在電商領域,它可以用于商品推薦、銷售預測等。根據用戶的購買歷史、瀏覽行為等特征,預測用戶對不同商品的興趣,為用戶提供個性化的推薦服務,同時也可以幫助商家預測商品的銷量,合理安排庫存。

2.時間序列分析
??CatBoost 在時間序列預測方面也有一定的應用。它可以處理具有復雜模式和趨勢的時間序列數據,如股票價格預測、能源消耗預測等。通過提取時間序列中的各種特征(如趨勢、季節性、周期性等),結合其他相關的影響因素,構建預測模型,為決策提供支持。

3.圖像和文本數據的輔助分析
??雖然 CatBoost 主要適用于結構化數據,但在一些情況下,它也可以與其他深度學習算法結合,用于圖像和文本數據的輔助分析。例如,在圖像分類任務中,可以先使用深度學習模型提取圖像的特征,然后將這些特征與其他相關的結構化數據(如拍攝時間、地點等)一起輸入到 CatBoost 模型中,進行進一步的分類和預測。

四、Python實現

(環境:Python 3.11,scikit-learn 1.6.1)

分類情形

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import catboost as cb
from sklearn import metrics# 生成數據集
X, y = make_classification(n_samples = 1000, n_features = 6, random_state = 42)
# 將數據集劃分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)# 創建CatBoost分類模型
model = cb.CatBoostClassifier()
# 訓練模型
model.fit(X_train, y_train)# 預測
y_pre = model.predict(X_test)
# 性能評價
accuracy = metrics.accuracy_score(y_test,y_pre)print('預測結果為:',y_pre)
print('準確率為:',accuracy)

在這里插入圖片描述

回歸情形

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
import catboost as cb
from sklearn.metrics import mean_squared_error# 生成數據集
X, y = make_regression(n_samples = 1000, n_features = 6, random_state = 42)
# 將數據集劃分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)# 創建CatBoost回歸模型
model = cb.CatBoostRegressor()
# 訓練模型
model.fit(X_train, y_train)# 進行預測
y_pred = model.predict(X_test)# 計算均方誤差評估模型性能
mse = mean_squared_error(y_test, y_pred)print(f"均方誤差: {mse}")

在這里插入圖片描述

五、小結

??CatBoost 算法憑借其獨特的算法原理和核心特點,在機器學習領域中占據了一席之地。它在處理類別型特征、防止過擬合、訓練速度和易用性等方面都表現出色,適用于多種應用場景。無論是在結構化數據預測、時間序列分析還是與其他類型數據的結合應用中,CatBoost 都展現出了強大的能力。隨著數據科學的發展,CatBoost 可逐漸在更多領域得到應用,為解決實際問題提供更多有效的幫助。


End.



下載

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

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

相關文章

五一假期作業

sub_process.c #include <stdio.h> // 標準輸入輸出庫 #include <pthread.h> // POSIX線程庫 #include <sys/ipc.h> // IPC基礎定義&#xff08;如消息隊列/共享內存&#xff09; #include <sys/msg.h> // 消息隊列操作相關…

Liunx安裝Apache Tomcat

目錄 一、了解tomcat 二、下載 三、啟動tomcat 四、網頁訪問tomcat 五、Tomcat修改默認8080端口 六、Tomcat創建項目步驟-實現項目對外訪問 一、了解tomcat Apache Tomcat 是一個開源的 Java Servlet 容器 和 Web 服務器&#xff0c;主要用于運行基于 Java 的 Web 應用…

破局者手冊 Ⅰ:測試開發核心基礎,解鎖未來測試密鑰!

目錄 一、引入背景 二、軟件測試基礎概念 2.1 軟件測試的定義 2.2 軟件測試的重要性 2.3 軟件測試的原則 三、測試類型 3.1 功能測試 3.2 接口測試 3.2.1 接口測試的概念 3.2.2 接口測試的重要性 3.2.3 接口測試的要點 3.2.4 接口測試代碼示例&#xff08;Python r…

C++ 適配器模式詳解

適配器模式&#xff08;Adapter Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許不兼容的接口之間能夠協同工作。 概念解析 適配器模式的核心思想是&#xff1a; 接口轉換&#xff1a;將一個類的接口轉換成客戶希望的另一個接口 兼容性&#xff1a;使原本由于接…

【NLP】 28. 語言模型的評估方式:MRR, PERPLEXITY, BLEU, WER從困惑度到實際效果

語言模型的評估方式&#xff1a;從困惑度到實際效果 評估語言模型&#xff08;LLM&#xff09;是否有效&#xff0c;并不僅僅是看它生成句子是否“聽起來通順”&#xff0c;我們需要定量的指標對模型性能做出系統性評價。評估方法主要分為兩大類&#xff1a; 內在評價&#x…

Java 企業級開發設計模式全解析

Java 企業級開發設計模式全解析 在 Java 企業級開發的復雜領域中&#xff0c;設計模式如同精湛的工匠工具&#xff0c;能夠幫助開發者構建高效、可維護、靈活且健壯的軟件系統。它們是無數開發者在長期實踐中總結出的解決常見問題的最佳方案&#xff0c;掌握這些模式對于提升開…

小剛說C語言刷題—1038編程求解數學中的分段函數

1.題目描述 編程求解數學中的分段函數。 …………x1 (當 x>0 )。 yf(x)…0 (當 x0 )。 ………x?1 (當 x<0 )。 上面描述的意思是&#xff1a; 當x>0 時 yx1 ; 當 x0 時 y0 ; 當 x<0 時 yx?1 。 輸入 輸入一行&#xff0c;只有一個整數x(?30000≤x≤30…

滾珠螺桿的精度如何保持?

滾珠螺桿通常用于需要精確定位的地方&#xff0c;高機械效率、低傳遞扭矩和幾乎為零的軸向游隙&#xff0c;使滾珠螺桿成為工具定位和飛機副翼驅動等應用中的重要設備。但是&#xff0c;連續工作產生的阻力和熱量會導致較大的摩擦力和定位誤差。那么&#xff0c;滾珠螺桿的精度…

在 Laravel 中深度集成 Casbin 到原生 Auth 系統

在 Laravel 中深度集成 Casbin 到原生 Auth 系統需要實現多層次的融合&#xff0c;以下是專業級實現方案&#xff1a; 一、核心集成架構 #mermaid-svg-WYM1aoAyHrR5bCdp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-…

JavaScript 實現輸入框的撤銷功能

在 Web 開發中&#xff0c;為輸入框添加撤銷功能可以極大地提升用戶體驗&#xff0c;方便用戶快速回滾到之前的輸入狀態。本文將通過一段簡單的 HTML、CSS 和 JavaScript 代碼&#xff0c;詳細介紹如何實現輸入框的撤銷功能。 整體實現思路 利用 JavaScript 監聽輸入框的inpu…

計算機視覺與深度學習 | 點云配準算法綜述(1992-2025)

點云配準算法綜述(1992-2025) 點云配準 點云配準算法綜述(1992-2025)一、傳統方法(1992-2020)1. **ICP(Iterative Closest Point)**2. **NDT(Normal Distributions Transform)**3. **4PCS(4-Points Congruent Sets)**二、深度學習驅動的方法(2018-2025)1. **Poin…

數據庫的二級索引

二級索引 10.1 二級索引作為額外的鍵 表結構 正如第8章提到的&#xff0c;二級索引本質上是包含主鍵的額外鍵值對。每個索引通過B樹中的鍵前綴來區分。 type TableDef struct {// 用戶定義的部分Name stringTypes []uint32 // 列類型Cols []string // 列名Indexes …

Java IO流核心處理方式詳解

一、IO流概述 Java IO&#xff08;Input/Output&#xff09;流是處理輸入輸出操作的核心機制&#xff0c;通過流&#xff08;Stream&#xff09;的形式實現設備間的數據傳輸。所有操作都基于以下兩個核心抽象&#xff1a; InputStream/OutputStream&#xff1a;字節流基類 Re…

WidowX-250s 機械臂的簡單數字孿生案例

前面一段時間記錄了一下WidowX-250s機械臂的學習與遙操作演示&#xff0c;相關鏈接如下&#xff1a; WidowX-250s 機械臂學習記錄&#xff1a; https://blog.csdn.net/qq_54900679/article/details/145556979 WidowX-250s 機械臂遙操作演示記錄&#xff1a; https://blog.c…

uniapp 云開發全集 云開發的概念

一、云開發的概念 1.1 云開發介紹 云開發 unicloud 是 DCloud 聯合阿里云、騰訊云、支付寶云&#xff0c;為開發者提供的基于 serverless 模式和 js 編程的云開發平臺&#xff0c;可以使用極小的成本代價開發具輕松實現前后臺整體業務。 1.2 云開發的核心組成 云開發的核心組…

GGD獨立站的優勢

GGD模式(基于Google生態的獨立站模式)越來越受歡迎&#xff0c;主要有以下原因&#xff1a; 1. 全球化覆蓋 GGD獨立站依托Google強大的生態系統&#xff0c;能夠幫助企業輕松觸達全球用戶&#xff0c;實現國際化布局&#xff0c;拓展業務范圍。Google作為全球最大的搜索引擎&…

簽名去背景圖像處理實例

一、前言 在生活中我們經常用到電子簽名&#xff0c;但有時候我們所獲取的圖像的彩色圖像&#xff0c;我們需要獲取白底黑字的電子簽名&#xff0c;我們可以通過下面程序對彩色圖像進行處理達到我們的處理目的。 原始彩色圖像如下&#xff1a; 二、程序和運行結果 clear all;c…

WebAssembly(Wasm):現代Web開發的超級加速器

在當今的Web開發領域&#xff0c;性能和效率是開發者們永恒的追求目標。隨著Web應用的復雜度不斷增加&#xff0c;傳統的JavaScript在某些場景下已經難以滿足高性能計算和復雜邏輯處理的需求。此時&#xff0c;WebAssembly&#xff08;Wasm&#xff09;作為一種新興的Web技術&a…

簡單理解MCP:AI如何使用工具

簡單理解MCP&#xff1a;AI如何使用工具&#xff08;以天氣/新聞服務為例&#xff09; 你是否注意到人工智能(AI)助手正變得越來越智能&#xff1f;它們不再僅僅是聊天&#xff0c;還能執行實際操作&#xff0c;比如查詢天氣、在線搜索&#xff0c;甚至預訂會議。這通常涉及到…

護網奇談: 紅隊工程師手記

零、引言&#xff1a;在演練中活著&#xff0c;在現實中消失 人們常說&#xff0c;護網是網絡安全界的“大閱兵”。 每年一次&#xff0c;紅藍對陣&#xff0c;政企聯動&#xff0c;戰鼓擂響&#xff0c;態勢大屏高掛&#xff0c;PPT如潮&#xff0c;報告成山。 你在屏幕前看…