最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python機器學(xué)習(xí)算法庫scikit-learn學(xué)習(xí)之決策樹實現(xiàn)方法詳解

 更新時間:2019年07月04日 11:37:02   作者:Yeoman92  
這篇文章主要介紹了Python機器學(xué)習(xí)算法庫scikit-learn學(xué)習(xí)之決策樹實現(xiàn)方法,結(jié)合實例形式分析了決策樹算法的原理及使用sklearn庫實現(xiàn)決策樹的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python機器學(xué)習(xí)算法庫scikit-learn學(xué)習(xí)之決策樹實現(xiàn)方法。分享給大家供大家參考,具體如下:

決策樹

決策樹(DTs)是一種用于分類和回歸的非參數(shù)監(jiān)督學(xué)習(xí)方法。目標(biāo)是創(chuàng)建一個模型,通過從數(shù)據(jù)特性中推導(dǎo)出簡單的決策規(guī)則來預(yù)測目標(biāo)變量的值。

例如,在下面的例子中,決策樹通過一組if-then-else決策規(guī)則從數(shù)據(jù)中學(xué)習(xí)到近似正弦曲線的情況。樹越深,決策規(guī)則越復(fù)雜,模型也越合適。

這里寫圖片描述

決策樹的一些優(yōu)勢是:

  • 便于說明和理解,樹可以可視化表達;
  • 需要很少的數(shù)據(jù)準(zhǔn)備。其他技術(shù)通常需要數(shù)據(jù)標(biāo)準(zhǔn)化,需要創(chuàng)建虛擬變量,并刪除空白值。
  • 使用樹的成本是用于對樹進行訓(xùn)練的數(shù)據(jù)點的對數(shù)。
  • 能夠處理數(shù)值和分類數(shù)據(jù)。其他技術(shù)通常是專門分析只有一種變量的數(shù)據(jù)集。
  • 能夠處理多輸出問題。
  • 使用白盒模型。如果一個給定的情況在模型中可以觀察到,那么這個條件的解釋很容易用布爾邏輯來解釋。相比之下,在黑盒模型中(例如:在人工神經(jīng)網(wǎng)絡(luò)中,結(jié)果可能更難解釋。
  • 可以使用統(tǒng)計測試驗證模型。這樣就可以解釋模型的可靠性。
  • 即使它的假設(shè)在某種程度上違反了生成數(shù)據(jù)的真實模型,也會表現(xiàn)得很好。

決策樹的缺點包括:

  • 決策樹學(xué)習(xí)可能會生成過于復(fù)雜的樹,不能代表普遍的規(guī)則,這就稱為過擬合。修剪(目前不支持的)機制,設(shè)置葉片節(jié)點所需的最小樣本數(shù)目或設(shè)置樹的最大深度是避免此問題的必要條件。
  • 決策樹可能不穩(wěn)定,因為數(shù)據(jù)中的小變化可能導(dǎo)致生成完全不同的樹。這個問題通過在一個集合中使用多個決策樹來減輕。
  • 實際的決策樹學(xué)習(xí)算法是基于啟發(fā)式算法的,例如在每個節(jié)點上進行局部最優(yōu)決策的貪婪算法。這種算法不能保證返回全局最優(yōu)決策樹。通過在集合學(xué)習(xí)者中訓(xùn)練多個樹,可以減少這種情況,在這里,特征和樣本是隨機抽取的。
  • 有些概念很難學(xué)習(xí),因為決策樹無法很容易地表達它們,例如XOR、奇偶性或多路復(fù)用問題。

分類

決策樹分類器(DecisionTreeClassifier)是一個能夠在數(shù)據(jù)集上執(zhí)行多類分類的類。

與其他分類器一樣,決策樹分類器以輸入兩個數(shù)組作為輸入:數(shù)組X,稀疏或密集,[n_samples,n_features]保存訓(xùn)練樣本,以及數(shù)組Y的整數(shù)值,[n_samples],保存訓(xùn)練樣本的類標(biāo)簽:

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

模型可以用來預(yù)測樣本的類別:

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

或者,可以預(yù)測每個類的概率,在葉片上同一類的訓(xùn)練樣本的分?jǐn)?shù)

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

DecisionTreeClassifier可以同時進行二進制(其中標(biāo)簽為[- 1,1])分類和多類(標(biāo)簽為[0],……,k - 1])分類。

使用虹膜數(shù)據(jù)集,我們可以構(gòu)建如下的樹:

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

訓(xùn)練之后,我們可以使用export_graphviz  將樹導(dǎo)出為Graphviz格式。下面是一個在整個iris(虹膜)數(shù)據(jù)集上輸出的樹示例:

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

然后我們可以使用Graphviz的dot工具來創(chuàng)建一個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 exporter 還支持各種各樣的選項,包括根據(jù)它們的類(或用于回歸的值)著色節(jié)點,如果需要的話,還可以使用顯式變量和類名IPython還可以使用Image()函數(shù)來顯示這些情節(jié):

>>> 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())

這里寫圖片描述

模型可以用來預(yù)測樣本的類別:

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

或者,可以預(yù)測每個類的概率,這是同一類在葉子中的訓(xùn)練樣本的分?jǐn)?shù):

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

這里寫圖片描述

Examples:

Plot the decision surface of a decision tree on the iris dataset

回歸

這里寫圖片描述

使用決策樹類回歸,決策樹也可以應(yīng)用于回歸問題。

在分類設(shè)置中,fit方法將數(shù)組X和y作為參數(shù),只有在這種情況下,y被期望有浮點值而不是整數(shù)值:

>>> 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])

Examples:

Decision Tree Regression

多輸出問題

一個多輸出問題是一個受監(jiān)督的學(xué)習(xí)問題,有幾個輸出可以預(yù)測,即當(dāng)Y是一個二維數(shù)組[n_samples,n_output]。

當(dāng)輸出之間沒有相關(guān)性時,解決這類問題的一個非常簡單的方法是建立n個獨立的模型,即每一個輸出,然后使用這些模型獨立地預(yù)測每一個輸出。

然而,因為可能與相同輸入相關(guān)的輸出值本身是相關(guān)的,通常更好的方法是構(gòu)建一個能夠同時預(yù)測所有n輸出的單一模型。首先,它需要較低的培訓(xùn)時間,因為只構(gòu)建了一個估計值。其次,結(jié)果估計量的泛化精度通常會增加。

對于決策樹,這種策略可以很容易地用于支持多輸出問題。這需要以下更改:

  • 在葉子中存儲n個輸出值,而不是1;
  • 使用分割標(biāo)準(zhǔn)來計算所有n輸出的平均下降。

這個模塊提供了支持多輸出問題的方法,通過DecisionTreeClassifier 和DecisionTreeRegressor實現(xiàn)這個策略。

如果決策樹符合大小(n_samples,n_output)的輸出數(shù)組Y,那么得到的估計值將是:

  • 預(yù)測輸出的n_output值;
  • predict_proba上輸出類概率的n_output數(shù)組。

多輸出決策樹回歸中顯示了多輸出樹的回歸。在這個例子中,輸入X是一個單一的實際值,輸出Y是X的正弦和余弦。

這里寫圖片描述

Examples:

決策樹多輸出回歸

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python實現(xiàn)批量下載SMAP數(shù)據(jù)

    Python實現(xiàn)批量下載SMAP數(shù)據(jù)

    在科學(xué)研究和數(shù)據(jù)分析中,獲取大規(guī)模的遙感數(shù)據(jù)是一個常見的任務(wù),本文將詳細(xì)為大家介紹如何利用Python實現(xiàn)SMAP數(shù)據(jù)的批量下載,需要的可以參考下
    2023-12-12
  • Python海象運算符超詳細(xì)講解

    Python海象運算符超詳細(xì)講解

    海象運算符的英文原名叫Assignment Expresions,翻譯過來也就是賦值表達式,不過現(xiàn)在大家更普遍地稱之為海象運算符,就是因為它長得真的太像海象了
    2023-01-01
  • 詳解Python多線程Selenium跨瀏覽器測試

    詳解Python多線程Selenium跨瀏覽器測試

    本篇文章主要介紹了Python多線程Selenium跨瀏覽器測試,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • Python爬蟲之Selenium實現(xiàn)鍵盤事件

    Python爬蟲之Selenium實現(xiàn)鍵盤事件

    這篇文章主要介紹了Python爬蟲之Selenium實現(xiàn)鍵盤事件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python入門基礎(chǔ)之變量及字符串

    Python入門基礎(chǔ)之變量及字符串

    Python是一個不錯的語言,Python語言簡單易懂還具有強大的編程能力,同時對于大數(shù)據(jù)分析有很明顯的幫助,這篇文章主要給大家介紹了關(guān)于Python入門基礎(chǔ)之變量及字符串的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • python中自帶的三個裝飾器的實現(xiàn)

    python中自帶的三個裝飾器的實現(xiàn)

    這篇文章主要介紹了python中自帶的三個裝飾器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python空值判斷方式(if xxx和if xxx is None的區(qū)別及說明)

    python空值判斷方式(if xxx和if xxx is None的區(qū)別及說明

    這篇文章主要介紹了python空值判斷方式(if xxx和if xxx is None的區(qū)別及說明),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python實現(xiàn)串口通信(pyserial)過程解析

    Python實現(xiàn)串口通信(pyserial)過程解析

    這篇文章主要介紹了Python實現(xiàn)串口通信(pyserial)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 詳解pandas中缺失數(shù)據(jù)處理的函數(shù)

    詳解pandas中缺失數(shù)據(jù)處理的函數(shù)

    這篇文章主要為大家詳細(xì)介紹一下pandas中處理缺失數(shù)據(jù)的一些函數(shù),文中具體講解了一下各個函數(shù)的使用,需要的可以參考一下
    2022-01-01
  • pycharm 實現(xiàn)本地寫代碼,服務(wù)器運行的操作

    pycharm 實現(xiàn)本地寫代碼,服務(wù)器運行的操作

    這篇文章主要介紹了pycharm 實現(xiàn)本地寫代碼,服務(wù)器運行的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評論

芜湖市| 莱阳市| 正定县| 巴彦淖尔市| 政和县| 兴化市| 柳江县| 武定县| 仙桃市| 繁峙县| 宝应县| 固始县| 始兴县| 宕昌县| 漠河县| 沾化县| 红安县| 准格尔旗| 清丰县| 呼和浩特市| 九台市| 上饶市| 平乡县| 沐川县| 石嘴山市| 翁牛特旗| 页游| 澳门| 元阳县| 汉沽区| 和平县| 安徽省| 满洲里市| 莎车县| 华蓥市| 延津县| 大石桥市| 武夷山市| 宝坻区| 蒙自县| 滨州市|