Scikit-Learn決策樹算法類庫使用小結

2021-03-02 天池大數據科研平臺

scikit-learn決策樹算法類庫內部實現是使用了調優過的CART樹算法,既可以做分類,又可以做回歸。分類決策樹的類對應的是DecisionTreeClassifier,而回歸決策樹的類對應的是DecisionTreeRegressor。兩者的參數定義幾乎完全相同,但是意義不全相同。下面就對DecisionTreeClassifier和DecisionTreeRegressor的重要參數做一個總結,重點比較兩者參數使用的不同點和調參的注意點。

DecisionTreeClassifier和DecisionTreeClassifier 重要參數調參注意點

為了便於比較,這裡我們用表格的形式對DecisionTreeClassifier和DecisionTreeRegressor重要參數要點做一個比較。

1)當樣本少數量但是樣本特徵非常多的時候,決策樹很容易過擬合,一般來說,樣本數比特徵數多一些會比較容易建立健壯的模型

2)如果樣本數量少但是樣本特徵非常多,在擬合決策樹模型前,推薦先做維度規約,比如主成分分析(PCA),特徵選擇(Losso)或者獨立成分分析(ICA)。這樣特徵的維度會大大減小。再來擬合決策樹模型效果會好。

3)推薦多用決策樹的可視化(下節會講),同時先限制決策樹的深度(比如最多3層),這樣可以先觀察下生成的決策樹裡數據的初步擬合情況,然後再決定是否要增加深度。

4)在訓練模型先,注意觀察樣本的類別情況(主要指分類樹),如果類別分布非常不均勻,就要考慮用class_weight來限制模型過於偏向樣本多的類別。

5)決策樹的數組使用的是numpy的float32類型,如果訓練數據不是這樣的格式,算法會先做copy再運行。

6)如果輸入的樣本矩陣是稀疏的,推薦在擬合前調用csc_matrix稀疏化,在預測前調用csr_matrix稀疏化。

決策樹可視化化可以方便我們直觀的觀察模型,以及發現模型中的問題。這裡介紹下scikit-learn中決策樹的可視化方法。

import  matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport pandas as pdfrom sklearn.datasets import load_irisfrom sklearn import tree
iris = load_iris()
clf = tree.DecisionTreeClassifier()clf = clf.fit(iris.data, iris.target)with open("iris.dot", 'w') as f: f = tree.export_graphviz(clf, out_file=f) from IPython.display import Image import pydotplus

dot_datadot_dat = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())
dot_data = tree.export_graphviz(clf, out_file=None)graph = pydotplus.graph_from_dot_data(dot_data) graph.write_pdf("iris.pdf")

scikit-learn中決策樹的可視化一般需要安裝graphviz。主要包括graphviz的安裝和python的graphviz插件的安裝。

第一步是安裝graphviz。下載地址在:http://www.graphviz.org/。如果你是linux,可以用apt-get或者yum的方法安裝。如果是windows,就在官網下載msi文件安裝。無論是linux還是windows,裝完後都要設置環境變量,將graphviz的bin目錄加到PATH,比如我是windows,將C:/Program Files (x86)/Graphviz2.38/bin/加入了PATH

第二步是安裝python插件graphviz: pip install graphviz

第三步是安裝python插件pydotplus。這個沒有什麼好說的: pip install pydotplus

這樣環境就搭好了,有時候python會很笨,仍然找不到graphviz,這時,可以在代碼裡面加入這一行:

注意後面的路徑是你自己的graphviz的bin目錄。

from sklearn.datasets import load_irisfrom sklearn import treeimport sysimport os       os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

接著載入sciki-learn的自帶數據,有決策樹擬合,得到模型:

這時候我們有3種可視化方法,第一種是用graphviz的dot命令生成決策樹的可視化文件,敲完這個命令後當前目錄就可以看到決策樹的可視化文件iris.pdf.打開可以看到決策樹的模型圖。

第二種方法是用pydotplus生成iris.pdf。這樣就不用再命令行去專門生成pdf文件了。

第三種辦法是個人比較推薦的做法,因為這樣可以直接把圖產生在ipython的notebook。代碼如下:

這裡給一個限制決策樹層數為4的DecisionTreeClassifier例子。

from itertools import product
import numpy as npimport matplotlib.pyplot as plt
from sklearn import datasetsfrom sklearn.tree import DecisionTreeClassifier

iris = datasets.load_iris()X = iris.data[:, [0, 2]]y = iris.target
clf = DecisionTreeClassifier(max_depth=4)clf.fit(X, y)

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)plt.show()

from IPython.display import Image  from sklearn import treeimport pydotplus dot_data = tree.export_graphviz(clf, out_file=None,                          feature_names=iris.feature_names,                           class_names=iris.target_names,                           filled=True, rounded=True,                           special_characters=True)  graph = pydotplus.graph_from_dot_data(dot_data)  Image(graph.create_png()) 

點擊下方圖片即可閱讀

那麼如何了解線性回歸的原理和算法呢?

分類算法評估中的「它們」有什麼用處?

學好Scikit-Learn,

於是你默默地推了一下酷酷的墨鏡【上篇】

如果你也有想分享的乾貨,可以登錄天池實驗室(notebook),包括賽題的理解、數據分析及可視化、算法模型的分析以及一些核心的思路等內容

小天會根據你分享內容的數量以及程度,給予豐富的神秘天池大禮以及糧票獎勵。分享成功後你也可以通過下方釘釘群👇主動聯繫我們的社區運營同學(釘釘號: yiwen1991

天池寶貝們有任何問題,可在戳「留言」評論或加入釘釘群留言,小天會認真傾聽每一個你的建議!

相關焦點

  • scikit-learn 梯度提升樹(GBDT)算法實戰
    前言上一篇文章對GBDT算法原理進行了總結,本文使用GBDT回歸類探討了損失函數對訓練數據的靈敏度
  • 使用Scikit-learn 理解隨機森林
    scikit-learn,作者 ando。我的一些代碼包正在做相關工作,然而,大多數隨機森林算法包(包括 scikit-learn)並沒有給出預測過程的樹路徑。因此 sklearn 的應用需要一個補丁來展現這些路徑。
  • Python + Scikit-learn 完美入門機器學習指南 ​
    在人工智慧領域,大部分的項目都是使用 Python 或構建在 Python 基礎上的框架搭建的,這對 Python 程式設計師來說是一個福音。但我們都知道,機器學習常用的算法有很多,例如:線性回歸、支持向量機、k 近鄰、決策樹、樸素貝葉斯、邏輯回歸等。其中的一些算法都有著比較複雜的數學過程,如果每一次都需要自己通過代碼實現這些算法,那麼機器學的門檻就變得很高了。
  • 使用 scikit-learn 玩轉機器學習——集成學習
    對於這種情況,Voting Classifier 類只需將超參數 voting='soft' 即可,但上例中的 KNN 算法在分類時並不產生概率,所以就不調參演示了。Random Forests(隨機森林)我們都知道森林是由樹構成的(手動滑稽,QAQ),所以隨機森林也不例外,隨機森林裡面的樹叫做決策樹。
  • 【下載】Scikit-learn作者新書《Python機器學習導論》, 教程+代碼手把手帶你實踐機器學習算法
    如果您使用Python(即使是作為初學者)本書將教您如何構建自己的機器學習解決方案。如今我們可以方便地獲取所有數據,而機器學習應用僅受限於您的想像力。您將學習使用Python和scikit-learn庫創建一個成功的機器學習應用程式所需的步驟。作者Andreas Muller和Sarah Guido將重點關注機器學習算法的實踐方法,而不是背後繁雜的數學。
  • Scikit-learn使用總結
    在機器學習和數據挖掘的應用中,scikit-learn是一個功能強大的python包。在數據量不是過大的情況下,可以解決大部分問題。學習使用scikit-learn的過程中,我自己也在補充著機器學習和數據挖掘的知識。這裡根據自己學習sklearn的經驗,我做一個總結的筆記。另外,我也想把這篇筆記一直更新下去。
  • Scikit-learn估計器分類
    Scikit-learn實現了一系列數據挖掘算法,提供通用編程接口、標準化的測試和調參公局,便於用戶嘗試不同算法對其進行充分測試和查找最優參數值。本次講解數據挖掘通用框架的搭建方法。有了這樣一個框架,後續章節就可以把講解重點放到數據挖掘應用和技術上面。為幫助用戶實現大量分類算法,scikit-learn把相關功能封裝成估計器。估計器用於分類任務,它主要包括兩個函數。
  • python機器學習之使用scikit-learn庫
    引言數據分析由一連串的步驟組成,對於其中預測模型的創建和驗證這一步,我們使用scikit-learn這個功能強大的庫來完成。scikit-learning庫python庫scikit-learn整合了多種機器學習算法。
  • Python+sklearn決策樹算法使用入門
    封面圖片:《Python程序設計實驗指導書》,董付國編著,清華大學出版社===========在學習決策樹算法之前
  • 第二章 使用scikit-learn進行分類預測
    01scikit-learn estimatorsestimators,允許算法的標準化實現和測試一個通用的、輕量級的接口,供分類器遵循。通過使用這個接口,我們可以將這些工具應用於任意分類器,而不需要擔心算法如何工作。
  • 極簡Scikit-Learn入門
    Scikit-Learn高清全景圖傳送:http://scikit-learn.org/stable/tutorial/machine_learning_map/index.html在機器學習和數據挖掘的應用中
  • 資源 | Scikit-learn中文文檔,一份完美的實踐教程
    Scikit-learn 目前主要由社區成員自發進行維護,且專注於構建機器學習領域內經廣泛驗證的成熟算法。Scikit-learn 項目最早為數據科學家 David Cournapeau 於 2007 年發起的 scikits.learn 項目,且 Scikit 的名字可視為 SciPy Toolkit,即 SciPy 的第三方擴展。
  • 看完這篇 scikit-learn學習指南,下節AI課不用上了
    給定一組特徵,例如體重、血糖水平和年齡,我們可以使用監督機器學習算法來預測這個人是否健康。在下面的簡單數學表達式中,S是監督學習算法,X是體重和年齡等輸入特徵的集合,而Y是帶有「健康」或「不健康」標籤的目標變量:儘管監督機器學習使用scikit-learn,也是在業界實現的最常見的機器學習類型,但大多數數據集通常沒有預定義的標籤。
  • 使用scikit-learn進行機器學習
    更高級的scikit-learn介紹      導語為什麼要出這個教程?1.基本用例:訓練和測試分類器練習2.更高級的用例:在訓練和測試分類器之前預處理數據2.1 標準化您的數據2.2 錯誤的預處理模式2.3 保持簡單,愚蠢:使用scikit-learn的管道連接器練習3.當更多優於更少時:交叉驗證而不是單獨拆分練習4.超參數優化:微調管道內部練習5.總結:我的scikit-learn管道只有不到10行代碼(跳過import語句)6.異構數據:當您使用數字以外的數據時練習
  • 獨家 | 使用Python了解分類決策樹(附代碼)
    由於各種原因,決策樹一種流行的監督學習方法。不同的不純度度量(基尼指數和熵)通常會產生相似的結果。在結束本節之前,我應註明,各種決策樹算法彼此不同。比較流行的算法有ID3,C4.5和CART。Scikit-learn使用了CART算法的優化版本。你可以點擊此處了解它的時間複雜度。我們在上節介紹了分類樹的理論。之所以需要學習如何使用某個程式語言來實現決策樹,是因為處理數據可以幫助我們來理解算法。Iris數據集是scikit-learn自帶的數據集之一,不需要從外部網站下載。
  • 使用scikit-learn進行數據預處理
    更高級的scikit-learn介紹      導語為什麼要出這個教程?1.基本用例:訓練和測試分類器練習2.更高級的用例:在訓練和測試分類器之前預處理數據2.1 標準化您的數據2.2 錯誤的預處理模式2.3 保持簡單,愚蠢:使用scikit-learn的管道連接器練習3.當更多優於更少時:交叉驗證而不是單獨拆分練習4.超參數優化:微調管道內部練習5.總結:我的scikit-learn管道只有不到10行代碼(跳過import語句)6.異構數據:當您使用數字以外的數據時練習
  • 開源機器學習框架:Scikit-learn API簡介
    目前Scikit-learn已經實現的算法包括:支持向量回歸(SVR),脊回歸,Lasso回歸,彈性網絡(Elastic Net),最小角回歸(LARS ),貝葉斯回歸,以及各種不同的魯棒回歸算法等。可以看到,這裡實現的回歸算法幾乎涵蓋了所有開發者的需求範圍,而且更重要的是,Scikit-learn還針對每種算法都提供了簡單明了的用例參考。
  • 最全的線性回歸算法庫總結—— scikit-learn篇
    對於線性回歸提供了比較多的類庫,這些類庫都可以用來做線性回歸分析,本文就對這些類庫的使用做一個總結,重點講述這些線性回歸算法庫的不同和各自的使用場景。為了得到線性回歸係數θθ,我們需要定義一個損失函數,一個極小化損失函數的優化方法,以及一個驗證算法的方法。損失函數的不同,損失函數的優化方法的不同,驗證方法的不同,就形成了不同的線性回歸算法。scikit-learn中的線性回歸算法庫可以從這三點找出各自的不同點。
  • Scikit-Learn介紹
    https://scikit-learn.org/stable/scikit-learn(sklearn),是一個開源的基於
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    【編者按】將機器學習算法用於金融領域的一個很好的突破口是反欺詐,在這篇博文中,WePay介紹了支付行業構建機器學習模型應對很難發現的shell selling欺詐的實踐心得。WePay採用了流行的Python、scikit-learn開源學習機器學習工具以及隨機森林算法。以下是文章內容:什麼是shellselling?