導航:首頁 > 編程語言 > python評論樹講解

python評論樹講解

發布時間:2025-02-08 10:17:10

A. Python中的樹你知道嗎

樹與二叉樹

在了解二叉樹之前,我們要先了解樹的一些概念,方便我們對二叉樹的理解。

什麼是樹?

樹(英語:tree)是一種抽象數據類型(ADT)或是實作這種抽象數據類型的數據結構,用來模擬具有樹狀結構性質的數據集合。

它是由n(n>=1)個有限節點組成一個具有層次關系的集合。把它叫做「樹」是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:

每個節點有零個或多個子節點;

沒有父節點的節點稱為根節點;

每一個非根節點有且只有一個父節點;

除了根節點外,每個子節點可以分為多個不相交的子樹;

樹的術語:

節點的度: 一個節點含有的子樹的個數稱為該節點的度;

樹的度: 一棵樹中,最大的節點的度稱為樹的度;

根結點: 樹的最頂端的節點,繼續往下分為子節點

父節點: 子節點的上一層為父節點

兄弟節點: 具有同一個父節點的節點稱為兄弟節點

葉子節點/終端節點: 不再有子節點的節點為葉子節點

二叉樹:

二叉樹是樹的特殊一種,具有如下特點:

每個節點最多有兩個子樹,節點的度最大為2

左子樹和右子樹是有順序的,次序不能顛倒

即是某節點只有一個子樹,也要區分左右子樹

二叉樹的性質:

在非空二叉樹的第i層,最多有2i-1個節點(i>=1)

在深度為K的二叉樹上最多有2k-1個節點(k>.1)

對於任意一個非空的二叉樹,如果葉子節點個數為n0,度數為2的節點數為n2,則有n0=n2+1

推倒過程:在一棵二叉樹中,除了葉子節點(度為0)外,就剩下度為2(n2)和度為1(n1)的節點了。則樹的節點總數為T = n0 + n1 + n2;在二叉樹中節點總數為T,而連線總數為T-1 = 2*n2 + n1,所以就有:n0 + n1 + n2 - 1 = 2 *n2 + n1,得到n0=n2+1。

特殊的二叉樹

滿二叉樹

在二叉樹中除了葉子節點,其他所有節點的度為2,且所有的葉子節點都在同一層上,這樣的二叉樹成為滿二叉樹。

滿二叉樹的特點:

葉子節點只能出現在最下一層

非葉子節點度數一定為2

在同樣深度的二叉樹中,滿二叉樹的節點個數最多,葉子節點數最多

完全二叉樹

如果二叉樹中除去最後一層葉子節點後為滿二叉樹,且最後一層的葉子節點依次從左到右分布,則這樣的二叉樹稱為完全二叉樹

完全二叉樹的特點:

葉子節點一般出現在最下一層,如果倒數第二層出現葉子節點,一定出現在右部連續位置

最下層葉子節點一定集中在左部連續位置

同樣節點的二叉樹,完全二叉樹的深度最小(滿二叉樹也對)

小例題:

某完全二叉樹共有200個節點,該二叉樹中共有()個葉子節點?

解:n0 + n1 + n2 = 200, 其中n0 = n2 + 1,n1 = 0或者1 (n1=1,出現在最下一層節點數為奇數,最下一層節點數為偶數,則n1=0), 因為n0為整數,所以最後算得n0 = 100。

完全二叉樹的性質:

具有n個節點的完全二叉樹的深度為log2n+1。log2n結果取整數部分。

如果有一棵有n個節點的完全二叉樹的節點按層次序編號,對任一層的節點i(1 <= i <= n)

1. 如果i=1,則節點是二叉樹的根,無父節點,如果i>1,則其父節點為i/2,向下取整

2. 如果2*1>n,那麼節點i沒有左孩子,否則其左孩子為2i

3. 如果2i+1>n那麼節點沒有右孩子,否則右孩子為2i+1

驗證:

第一條:

當i=1時,為根節點。當i>1時,比如結點為7,他的雙親就是7/2= 3;結點9雙親為4.

第二條:

結點6,62 = 12>10,所以結點6無左孩子,是葉子結點。結點5,52 = 10,左孩子是10,結點4,為8.

第三條:

結點5,2*5+1>10,沒有右孩子,結點4,則有右孩子。

更多Python相關知識,請移步Python視頻教程繼續學習!!

B. ML - 決策樹(decision tree)

機器學習中分類和預測演算法的評估:

判定樹是一個類似於流程圖的樹結構:其中,每個內部結點表示在一個 屬性上的測試 ,每個分支代表一個 屬性輸出 ,而每個樹葉結點代表 類或類分布 。樹的最頂層是根結點。
機器學習中分類方法中的一個重要演算法

信息和抽象,如何度量?

1948年,香農提出了 」信息熵(entropy)「的概念

一條信息的信息量大小和它的不確定性有直接的關系,要搞清楚一件非常非常不確定的事情,或者

是我們一無所知的事情,需要了解大量信息==> 信息量的度量就等於不確定性的多少

例子:猜世界盃冠軍,假如一無所知,猜多少次?

每個隊奪冠的幾率不是相等的

比特(bit)來衡量信息的多少

變數的不確定性越大,熵也就越大

3.1 決策樹歸納演算法 ( ID3

1970-1980, J.Ross. Quinlan, ID3演算法

選擇屬性(A為age時)判斷結點

信息獲取量(Information Gain)
Gain(A) = Info(D) - Infor_A(D)
Gain(A) =按yes/no分的熵 - 按A屬性分類的熵

通過A來作為節點分類獲取了多少信息

類似
Gain(income) = 0.029
Gain(student) = 0.151
Gain(credit_rating)=0.048
所以,選擇age作為第一個根節點

重復。。。

演算法:

*其他演算法:

C4.5 : Quinlan

Classification and Regression Trees (CART): (L. Breiman, J. Friedman, R. Olshen, C. Stone)

共同點:都是貪心演算法,自上而下(Top-down approach)

區別:屬性選擇度量方法不同: C4.5 (gain ratio), CART(gini index), ID3 (Information Gain)

先剪枝

後剪枝

直觀,便於理解,小規模數據集有效

處理連續變數不好(離散化,閾值選擇對結果影響大)

類別較多時,錯誤增加的比較快

可規模性一般

1. Python

2. Python機器學習的庫: scikit-learn

2.1: 特性:

簡單高效的數據挖掘和機器學習分析

對所有用戶開放,根據不同需求高度可重用性

基於Numpy, SciPy和matplotlib

開源,商用級別:獲得 BSD許可

2.2 覆蓋問題領域:

分類(classification), 回歸(regression), 聚類(clustering), 降維(dimensionality rection)

模型選擇(model selection), 預處理(preprocessing)

3. 使用用scikit-learn

安裝scikit-learn: pip, easy_install, windows installer

安裝必要package:numpy, SciPy和matplotlib, 可使用 Anaconda (包含numpy, scipy等科學計算常用package)

4. 例子:

文檔: http://scikit-learn.org/stable/moles/tree.html

安裝 Graphviz: http://www.graphviz.org/
配置環境變數
轉化dot文件至pdf可視化決策樹:dot -Tpdf iris.dot -o outpu.pdf

閱讀全文

與python評論樹講解相關的資料

熱點內容
思科常用配置命令 瀏覽:377
水容易被壓縮嗎 瀏覽:753
java項目試題 瀏覽:315
為什麼安卓拍照沒有蘋果成相快 瀏覽:516
安卓版的蘋果手機叫什麼 瀏覽:373
手機怎麼解壓文件夾壓縮包 瀏覽:459
起源任務咋解壓 瀏覽:976
加密式的監督檢查 瀏覽:549
光遇怎麼分辨安卓國服和渠道服 瀏覽:242
ico解壓教程 瀏覽:632
程序員偏右 瀏覽:17
超算上可以進行vasp編譯嘛 瀏覽:174
北京通app怎麼注冊登錄 瀏覽:820
iphone上的數據怎麼轉移到安卓 瀏覽:743
python求每個時段平均值 瀏覽:244
安卓手機右上出現Hg什麼意思 瀏覽:69
程序員神經 瀏覽:753
dns伺服器在電腦上有什麼用 瀏覽:915
杭州大媽喜歡程序員 瀏覽:687
python評論樹講解 瀏覽:681