sklearn中的決策樹-分類樹:剪枝參數

剪枝參數

  • 在不加限制的情況下,一棵決策樹會生長到衡量不純度的指標最優,或者沒有更多的特征可用為止。這樣的決策樹 往往會過擬合。為了讓決策樹有更好的泛化性,我們要對決策樹進行剪枝。剪枝策略對決策樹的影響巨大,正確的剪枝策略是優化 決策樹算法的核心。sklearn為我們提供了不同的剪枝策略:
max_depth
  • 限制樹的最大深度,超過設定深度的樹枝全部剪掉

    這是用得最廣泛的剪枝參數,在高維度低樣本量時非常有效。決策樹多生長一層,對樣本量的需求會增加一倍,所 以限制樹深度能夠有效地限制過擬合。在集成算法中也非常實用。實際使用時,建議從=3開始嘗試,看看擬合的效 果再決定是否增加設定深度。

min_samples_leaf & min_samples_split
  • min_samples_leaf限定,一個節點在分枝后的每個子節點都必須包含至少min_samples_leaf個訓練樣本,否則分 枝就不會發生,或者,分枝會朝著滿足每個子節點都包含min_samples_leaf個樣本的方向去發生。

    min_samples_leaf限定,一個節點在分枝后的每個子節點都必須包含至少min_samples_leaf個訓練樣本,否則分 枝就不會發生,或者,分枝會朝著滿足每個子節點都包含min_samples_leaf個樣本的方向去發生 一般搭配max_depth使用,在回歸樹中有神奇的效果,可以讓模型變得更加平滑。這個參數的數量設置得太小會引 起過擬合,設置得太大就會阻止模型學習數據。一般來說,建議從=5開始使用。如果葉節點中含有的樣本量變化很 大,建議輸入浮點數作為樣本量的百分比來使用。同時,這個參數可以保證每個葉子的最小尺寸,可以在回歸問題 中避免低方差,過擬合的葉子節點出現。對于類別不多的分類問題,=1通常就是最佳選擇。

  • min_samples_split限定,一個節點必須要包含至少min_samples_split個訓練樣本,這個節點才允許被分枝,否則 分枝就不會發生。

  • min_samples_leaf = 10

    min_samples_split = 25

    # -*- coding: utf-8 -*-"""
    **************************************************
    @author:   Ying                                      
    @software: PyCharm                       
    @file: 3、分類樹_min_samples_leaf& min_samples_split.py
    @time: 2021-08-26 10:51                          
    **************************************************
    """
    from sklearn import tree
    from sklearn.datasets import load_wine
    from sklearn.model_selection import train_test_split
    import pandas as pd
    import graphviz# 加載數據
    wine = load_wine()
    data = pd.DataFrame(wine.data, columns=wine.feature_names)  # X
    target = pd.DataFrame(wine.target)  # y# 劃分訓練測試集
    X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3)clf = tree.DecisionTreeClassifier(criterion="entropy", random_state=30, splitter="random", max_depth=3, min_samples_leaf=10, min_samples_split=25)clf.fit(X_train, y_train)
    score = clf.score(X_test, y_test)  # 返回預測的準確度# 保存決策樹圖
    feature_name = ['酒精', '蘋果酸', '灰', '灰的堿性', '鎂', '總酚', '類黃酮', '非黃烷類酚類','花青素', '顏色強度', '色調', 'od280/od315稀釋葡萄酒', '脯氨酸']dot_data = tree.export_graphviz(clf, feature_names=feature_name, class_names=["琴酒", "雪莉", "貝爾摩德"], filled=True  # 填充顏色, rounded=True  # 圓角)
    graph = graphviz.Source(dot_data)graph.render(view=True, format="png", filename="./save/decisiontree_pdf")# 特征重要性
    feature_importances = clf.feature_importances_a = pd.DataFrame([*zip(feature_name, feature_importances)])
    a.columns = ['feature', 'importance']
    a.sort_values('importance', ascending=False, inplace=True)
    print(a)
    

    ? image-20210826110623238

max_features & min_impurity_decrease
  • 一般max_depth使用,用作樹的”精修“ max_features限制分枝時考慮的特征個數,超過限制個數的特征都會被舍棄。和max_depth異曲同工, max_features是用來限制高維度數據的過擬合的剪枝參數,但其方法比較暴力,是直接限制可以使用的特征數量 而強行使決策樹停下的參數,在不知道決策樹中的各個特征的重要性的情況下,強行設定這個參數可能會導致模型 學習不足。如果希望通過降維的方式防止過擬合,建議使用PCA,ICA或者特征選擇模塊中的降維算法。 min_impurity_decrease限制信息增益的大小,信息增益小于設定數值的分枝不會發生。這是在0.19版本中更新的 功能,在0.19版本之前時使用min_impurity_split。
確定最優剪枝參數(超參數曲線)
  • 那具體怎么來確定每個參數填寫什么值呢?這時候,我們就要使用確定超參數的曲線來進行判斷了,繼續使用我們 已經訓練好的決策樹模型clf。超參數的學習曲線,是一條以超參數的取值為橫坐標,模型的度量指標為縱坐標的曲 線,它是用來衡量不同超參數取值下模型的表現的線。在我們建好的決策樹里,我們的模型度量指標就是score。

    # -*- coding: utf-8 -*-"""
    **************************************************
    @author:   Ying                                      
    @software: PyCharm                       
    @file: 4、分類樹_超參數曲線.py
    @time: 2021-12-01 11:28                          
    **************************************************
    """from sklearn import tree
    from sklearn.datasets import load_wine
    from sklearn.model_selection import train_test_split
    import pandas as pd
    import matplotlib.pyplot as plt# 加載數據
    wine = load_wine()
    data = pd.DataFrame(wine.data, columns=wine.feature_names)  # X
    target = pd.DataFrame(wine.target)  # y# 劃分訓練測試集
    X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3)test = []
    for i in range(10):clf = tree.DecisionTreeClassifier(max_depth=i+1,criterion="entropy",random_state=10,splitter='random')clf = clf.fit(X_train, y_train)score = clf.score(X_test, y_test)test.append(score)
    plt.plot(range(1,11),test,color="red",label="max_depth")
    plt.legend()
    plt.show()
    

    image-20211201113350789


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

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

相關文章

幾個api

幾個api 原型鏈 可以閱讀此文 Function instanceof Object // true Object instanceof Function // true Object.prototype.isPrototypeOf(Function) // true Function.prototype.isPrototypeOf(Object) // true Object.__proto__ Function.prototype // true Function.pro…

【Azure 架構師學習筆記】- Azure Databricks (12) -- Medallion Architecture簡介

本文屬于【Azure 架構師學習筆記】系列。 本文屬于【Azure Databricks】系列。 接上文 【Azure 架構師學習筆記】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者數據湖,基本上繞不開一個架構“Medallion”, 它使得數據管理更為簡單有效。ADB 通過…

Android手機部署DeepSeek

1.概述 android手機端部署deepseek一般需要安裝termux,ollama,deepseek三個大的步驟 原因分析:deepseek等大模型需要類似ollama的工具去運行。ollama有mac window和linux版本,無Android版本;termux是一個模擬linux環境的Android app&#x…

計算機科學技術領域的內卷現狀與應對措施分析

計算機科學技術領域的內卷現狀與應對措施分析 李升偉 整理 ### 計算機科學技術領域的內卷現狀與應對措施分析 #### 一、內卷現狀分析 1. **教育與升學內卷** 計算機科學與技術相關專業(如計算機科學與技術、人工智能、大數據等)已成為考研競爭最…

python-leetcode 45.二叉樹轉換為鏈表

題目: 給定二叉樹的根節點root,請將它展開為一個單鏈表: 展開后的單鏈表應該使用同樣的TreeNode,其中right子指針指向鏈表中的下一個節點,而左子指針始終為空 展開后的單鏈表應該與二叉樹先序遍歷順序相同 方法一:二叉樹的前序…

【leetcode hot 100 15】三數之和

一、兩數之和的擴展 class Solution {public List<List<Integer>> threeSum(int[] nums) {// 將得到的結果存入Set中&#xff0c;保證不重復Set<List<Integer>> set new HashSet<>();// 模擬兩數之和&#xff0c;作為第一個循環中的內容for(in…

設備健康管理系統在制造業的深度應用探索

引言 在制造業的數字化轉型浪潮中&#xff0c;設備健康管理系統正逐漸成為企業提升競爭力的關鍵利器。隨著工業 4.0 和智能制造概念的不斷深入&#xff0c;制造業對設備的高效、穩定運行提出了更高要求。設備健康管理系統借助先進的傳感器技術、物聯網&#xff08;IoT&#xf…

HTTPS 與 HTTP 的區別在哪?

HTTP與HTTPS作為互聯網數據傳輸的核心協議&#xff0c;其通信機制與安全特性深刻影響著現代網絡應用的可靠性與用戶體驗。本文將解析兩者的通信流程、安全機制及核心差異。 一、HTTP的通信機制 先來看看HTTP是什么吧。 HTTP基于TCP/IP協議棧&#xff0c;采用經典客戶端-服務…

為什么要將PDF轉換為CSV?CSV是Excel嗎?

在企業和數據管理的日常工作中&#xff0c;PDF文件和CSV文件承擔著各自的任務。PDF通常用于傳輸和展示靜態的文檔&#xff0c;而CSV因其簡潔、易操作的特性&#xff0c;廣泛應用于數據存儲和交換。如果需要從PDF中提取、分析或處理數據&#xff0c;轉換為CSV格式可能是一個高效…

【JAVAEE】多線程

【JAVAEE】多線程 一、進程1.1 進程的定義1.2 進程和線程的聯系 二、線程2.1 JConsole工具2.2 創建線程2.2.1 Thread類&#xff0c;start&#xff08;&#xff09;&#xff0c;run&#xff08;&#xff09;2.2.2 繼承Thread類2.2.3 實現Runnable接口2.2.4 匿名內部類2.2.5 使用…

手機打電話時如何識別對方按下的DTMF按鍵的字符-安卓AI電話機器人

手機打電話時如何識別對方按下的DTMF按鍵的字符 --安卓AI電話機器人 一、前言 前面的篇章中&#xff0c;使用藍牙電話攔截手機通話的聲音&#xff0c;并對數據加工&#xff0c;這個功能出來也有一段時間了。前段時間有試用的用戶咨詢說&#xff1a;有沒有辦法在手機上&#xff…

【Go】十八、http 調用服務的編寫

http接口框架的搭建 這個http接口框架的搭建參考之前的全量搭建&#xff0c;這里是快速搭建的模式&#xff1a; 直接對已有的http模塊進行復制修改&#xff0c;主要修改點在于 proto部分與api、router 部分&#xff0c;剩余的要針對進行修改模塊名稱。 接口的具體編寫 在 a…

WiseFlow本地搭建實錄---保姆教程

今天從零開始搭建了Wiseflow的本地環境搭建&#xff0c;目前使用的都是免費的API&#xff0c;我建議大家可以一起嘗試一下搭建自己的關鍵信息的數據庫&#xff0c;我是windows的環境&#xff0c;但是其他的應該也差不多&#xff0c;踩了很多坑&#xff0c;希望這篇文章能幫大家…

數的計算(藍橋云課)

題目描述 輸入一個自然數 n (n≤1000)n (n≤1000)&#xff0c;我們對此自然數按照如下方法進行處理: 不作任何處理; 在它的左邊加上一個自然數,但該自然數不能超過原數的一半; 加上數后,繼續按此規則進行處理,直到不能再加自然數為止。 問總共可以產生多少個數。 輸入描述 輸…

知識庫功能測試難點

圖表交互功能測試難點 知識庫圖表類型多&#xff0c;每種圖表交互功能不同。像柱狀圖&#xff0c;可能有點擊柱子查看詳細數據、鼠標懸停顯示數據提示等交互&#xff1b;折線圖除了這些&#xff0c;還可能支持縮放查看不同時間段數據。多種交互操作在不同圖表間存在差異&#x…

【人工智能】數據挖掘與應用題庫(201-300)

1、在LetNet5網絡中,卷積核的大小是? 答案:5*5 2、LeNet5網絡參數的數量約為? 答案:6萬 3、AlexNet與LeNet5相比,使用了哪些機制來改進模型的訓練過程? 答案: 數據增廣Dropout抑制過擬合ReLU激活函數CUDA加速神經網絡訓練4、VGGNet使用的卷積核的大小是? 答案:…

web安全滲透測試 APP安全滲透漏洞測試詳情

前言 小小白承包了一塊20畝的土地&#xff0c;依山傍水&#xff0c;風水不錯。聽朋友說去年玉米大賣&#xff0c;他也想嘗嘗甜頭&#xff0c;也就種上了玉米。 看著玉米茁壯成長&#xff0c;別提小小白心里多開心&#xff0c;心里盤算著玉米大買后&#xff0c;吃香喝辣的富貴…

CSS處理內容溢出

<!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>處理內容溢出</title><style>#d1{wid…

拉丁超立方采樣(Latin Hypercube Sampling)技術詳解及實現

拉丁超立方采樣(Latin Hypercube Sampling)技術詳解 拉丁超立方采樣(Latin Hypercube Sampling)技術詳解1. 引言2. 拉丁超立方采樣原理3. 數學公式描述4. Python代碼實現代碼解析5. 應用場景與優勢6. 在化工中的應用6.1 工藝參數優化6.2 不確定性量化與風險評估6.3 實驗設計…

docker-compose部署onlyoffice8.3.0并支持ssl,且支持通過nginx代理,關閉JWT配置

編寫docker-compose文件 mkdir -p /data/onlyoffice && echo "version: 3services:onlyoffice:container_name: OnlyOfficeimage: onlyoffice/documentserver:8.3.0restart: alwaysports:- 8088:80- 64431:443environment:TZ: Asia/ShanghaiJWT_ENABLED: falsevol…