日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scikit-learn学习笔记(六)Decision Trees(决策树)

發布時間:2024/1/23 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scikit-learn学习笔记(六)Decision Trees(决策树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

決策樹(DTS)是一種非參數監督學習用于方法分類回歸。目標是創建一個模型,通過學習從數據特征推斷的簡單決策規則來預測目標變量的值。

例如,在下面的示例中,決策樹從數據中學習,以一組if-then-else決策規則近似正弦曲線。樹越深,決策規則和鉗工模型越復雜。

決策樹的一些優點是:

  • 簡單的理解和解釋。樹木可視化。
  • 需要很少的數據準備。其他技術通常需要數據歸一化,需要創建虛擬變量,并刪除空值。請注意,此模塊不支持缺少值。
  • 使用樹的成本(即,預測數據)在用于訓練樹的數據點的數量上是對數的。
  • 能夠處理數字和分類數據。其他技術通常專門用于分析只有一種變量類型的數據集。有關更多信息,請參閱算法
  • 能夠處理多輸出問題。
  • 使用白盒模型。如果給定的情況在模型中可以觀察到,那么條件的解釋很容易用布爾邏輯來解釋。相比之下,在黑盒子模型(例如,在人造神經網絡中),結果可能更難解釋。
  • 可以使用統計測試驗證模型。這樣可以說明模型的可靠性。
  • 即使其假設被數據生成的真實模型有些違反,表現良好。

決策樹的缺點包括:

  • 決策樹學習者可以創建不能很好地推廣數據的過于復雜的樹。這被稱為過擬合。修剪(不支持當前)的機制,設置葉節點所需的最小樣本數或設置樹的最大深度是避免此問題的必要條件。
  • 決策樹可能不穩定,因為數據的小變化可能會導致完全不同的樹生成。通過使用合奏中的決策樹來減輕這個問題。
  • 在最優性的幾個方面甚至簡單的概念中,學習最優決策樹的問題已知是NP完整的。因此,實際的決策樹學習算法基于啟發式算法,例如在每個節點進行局部最優決策的貪心算法。這樣的算法不能保證返回全局最優決策樹。這可以通過在綜合學習者中訓練多個樹木來緩解,其中特征和樣本隨機抽樣取代。
  • 有一些難以學習的概念,因為決策樹不能很容易地表達它們,例如XOR,奇偶校驗或復用器問題。
  • 如果某些類占主導地位,決策樹學習者會創造有偏見的樹木。因此,建議在擬合之前平衡數據集與決策樹。

?

分類?

DecisionTreeClassifier?是能夠對數據集執行多類分類的類。

與其他分類器一樣,DecisionTreeClassifier將輸入兩個數組:數組X,稀疏或密集,大小為[n_samples,n_features],保存訓練樣本,以及整數值的數組Y,大小[n_samples],持有類標簽 訓練樣本:

>>> from sklearn import tree >>> X = [[0, 0], [1, 1]] >>> Y = [0, 1] >>> clf = tree.DecisionTreeClassifier() >>> clf = clf.fit(X, Y)

安裝后,可以使用該模型來預測樣品類別:

>>> clf.predict([[2., 2.]]) array([1])

或者,可以預測每個類的概率,這是葉中相同類的訓練樣本的分數:

>>> clf.predict_proba([[2., 2.]]) array([[ 0.,? 1.]])

DecisionTreeClassifier?能夠二進制(其中標簽是[-1,1])分類和多類(其中標簽是[0,...,K-1])分類。

使用Iris數據集,我們可以構造一個樹,如下所示:

>>> from sklearn.datasets import load_iris >>> from sklearn import tree >>> iris = load_iris() >>> clf = tree.DecisionTreeClassifier() >>> clf = clf.fit(iris.data, iris.target)

經過訓練,我們可以使用導出器以Graphviz格式導出樹export_graphviz?。以下是在整個虹膜數據集上訓練的樹的示例導出:

>>> with open("iris.dot", 'w') as f: ...???? f = tree.export_graphviz(clf, out_file=f)

然后我們可以使用的Graphviz的dot工具來創建一個PDF文件(或任何其他支持的文件類型):?dot?-Tpdf?iris.dot?-o?iris.pdf

>>> import os >>> os.unlink('iris.dot')

或者,如果我們安裝了Python模塊pydotplus,我們可以直接在Python中生成PDF文件(或任何其他支持的文件類型):

>>> import pydotplus >>> dot_data = tree.export_graphviz(clf, out_file=None) >>> graph = pydotplus.graph_from_dot_data(dot_data) >>> graph.write_pdf("iris.pdf")

export_graphviz出口也支持多種美學選項,包括可以通過類著色節點(或值回歸)和如果需要的話使用顯式的變量和類名稱。IPython筆記本還可以使用Image()函數內聯渲染這些圖:

>>> from IPython.display import Image? >>> 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())

安裝后,可以使用該模型來預測樣品類別:

>>> clf.predict(iris.data[:1, :]) array([0])

或者,可以預測每個類的概率,這是葉中相同類的訓練樣本的分數:

>>> clf.predict_proba(iris.data[:1, :]) array([[ 1.,? 0.,? 0.]])

回歸


決策樹也可以應用于回歸問題,使用?DecisionTreeRegressor類。

如在分類設置中,擬合方法將作為參數數組X和y,只有在這種情況下,y預期具有浮點值而不是整數值:

>>> from sklearn import tree >>> X = [[0, 0], [2, 2]] >>> y = [0.5, 2.5] >>> clf = tree.DecisionTreeRegressor() >>> clf = clf.fit(X, y) >>> clf.predict([[1, 1]]) array([ 0.5])

復雜性

一般來說,構建平衡二叉樹的運行時間成本是?查詢時間?。雖然樹構造算法試圖產生平衡的樹,但它們并不總是平衡的。假設子樹保持近似平衡,每個節點的成本包括搜索,以找到提供熵最大減少的特征。這在每個節點都有成本?,從而導致整個樹上的總成本(通過將每個節點的成本相加)?

Scikit-learning為決策樹的構建提供了更有效的實施。一個天真的實現(如上所述)將重新計算沿著給定特征的每個新分割點的類標簽直方圖(用于分類)或平均值(用于回歸)。在所有相關樣本上預定特征,并保留正在運行的標簽數量,將降低每個節點的復雜度,從而導致總成本。這是所有基于樹的算法的選項。默認情況下,它會打開梯度提升,一般來說,訓練更快,但關閉所有其他算法,因為它傾向于減緩訓練深度樹上的訓練。

實用竅門

  • 決策樹傾向于對具有大量特征的數據進行過度整合。獲取正確的樣本比例數量是很重要的,因為在高維空間中具有少量樣本的樹很可能會過度使用。
  • 考慮事先進行維(PCA,?ICA特征選擇),使您的樹更好地找到具有歧視性的特征。
  • 通過使用該export?功能可視化您正在訓練的樹。使用max_depth=3作為初始樹深度以獲取樹是如何配合你的數據的感覺,再增加深度。
  • 請記住,填充樹的樣本數量是樹生長到的每個附加級別的兩倍。使用max_depth控制樹的大小,以防止過度擬合。
  • 使用min_samples_split或min_samples_leaf控制葉節點的樣本數。一個非常小的數字通常意味著樹將被超配,而大量將阻止樹學習數據。嘗試min_samples_leaf=5作為初始值。如果樣本大小變化很大,則浮點數可以用作這兩個參數中的百分比。兩者之間的主要區別在于min_samples_leaf保證葉片中最少的樣本數量,同時min_samples_split可以創建任意小的葉子,盡管min_samples_split在文獻中更為常見。
  • 在訓練前平衡您的數據集,以防止樹木偏向于主導階層。可以通過從每個類中抽取相等數量的樣本,或者優選地通過將每個類的樣本權重(sample_weight)的和歸一化為相同的值來進行類平衡。還要注意的是,基于權重的預修剪標準,比如min_weight_fraction_leaf不了解樣本權重的標準,對主導類別的偏向偏小min_samples_leaf。
  • 如果樣本被加權,則使用基于重量的預剪枝準則來優化樹結構將更容易,例如min_weight_fraction_leaf確保葉節點至少包含樣本權重總和的一小部分。
  • 所有決策樹都在np.float32內部使用陣列。如果培訓數據不是這種格式,將會生成數據集的副本。
  • 如果輸入矩陣X非常稀疏,則在調用預測csc_matrix之前,建議在調用擬合和稀疏csr_matrix之前將其轉換為稀疏?。當特征在大多數樣本中具有零值時,與密集矩陣相比,訓練時間可以比稀疏矩陣輸入快幾個數量級。

樹算法:ID3,C4.5,C5.0和?CART

所有各種決策樹算法是什么,它們之間有什么不同?哪一個在scikit學習中實現?

ID3(Iterative Dichotomiser 3)是由羅斯奎因蘭(Ros Quinlan)于1986年開發的。該算法創建一個多路樹,找到每個節點(即以貪婪的方式)分類特征,這將產生分類目標的最大信息增益。樹生長到最大尺寸,然后通常應用修剪步驟,以提高樹的概括性來看待數據的能力。

C4.5是ID3的后繼者,并通過動態定義將連續屬性值分割成一組離散的間隔的離散屬性(基于數字變量),消除了特征必須是分類的限制。C4.5將訓練好的樹(即ID3算法的輸出)轉換成if-then規則的集合。然后評估每個規則的這些準確性以確定應用它們的順序。如果規則的準確性沒有改善,則通過刪除規則的前提條件來完成修剪。

C5.0是Quinlan根據專有許可證發布的最新版本。它使用更少的內存,并建立比C4.5更小的規則集,同時更準確。

CART(分類和回歸樹)與C4.5非常相似,但它不同之處在于它支持數值目標變量(回歸),并且不計算規則集。CART使用在每個節點產生最大信息增益的特征和閾值來構造二叉樹。

scikit-learn使用CART算法的優化版本。

?

數學公式

給定訓練向量i = 1,...,l和標簽向量?,決策樹遞歸地分割空間,使得具有相同標簽的樣本被分組在一起。

讓節點上的數據表示。對于每個候選分割由特征和閾值,將數據劃分為?子集

在雜質用的雜質函數被計算?,這取決于任務的選擇正在解決(分類或回歸)

選擇最小化雜質的參數

遞歸的子集,并?直至達到所允許的最大深度,?

分類標準

如果一個目標是采用值0,1,...,K-1的分類結果,對于節點,表示具有?觀察的區域,

是節點中k類觀測的比例?

雜質的常見措施是基尼

交叉熵

和錯誤分類

回歸標準

如果目標是連續值,則對于表示具有觀測值的區域的節點,最小化的共同標準是均方誤差

總結

以上是生活随笔為你收集整理的scikit-learn学习笔记(六)Decision Trees(决策树)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。