A. python 決策樹可以調什麼參數
調用這個包:
sklearn.treesklearn(scikit-learn)可以去下載,解壓後放入C:Python27Libsite-packages直接使用。需要用同樣的方法額外下載numpy和scipy包,不然會報錯。
例子:
fromsklearn.datasetsimportload_iris
fromsklearn.model_selectionimportcross_val_score
fromsklearn.
clf=DecisionTreeClassifier(random_state=0)
iris=load_iris()
cross_val_score(clf,iris.data,iris.target,cv=10)
B. python中的sklearn中決策樹使用的是哪一種演算法
sklearn中決策樹分為DecisionTreeClassifier和DecisionTreeRegressor,所以用的演算法是CART演算法,也就是分類與回歸樹演算法(classification and regression tree,CART),劃分標准默認使用的也是Gini,ID3和C4.5用的是信息!
C. python中的sklearn中決策樹使用的是哪一種演算法
sklearn中決策樹分為DecisionTreeClassifier和DecisionTreeRegressor,所以用的演算法是CART演算法,也就是分類與回歸樹演算法(classification and regression tree,CART),劃分標准默認使用的也是Gini,ID3和C4.5用的是信息熵,為何要設置成ID3或者C4.5呢?
D. python中的sklearn中決策樹使用的是哪一種演算法
sklearn中決策樹分為DecisionTreeClassifier和DecisionTreeRegressor,所以用的演算法是CART演算法,也就是分類與回歸樹演算法(classification and regression tree,CART),劃分標准默認使用的也是Gini,ID3和C4.5用的是信息熵
E. python中的sklearn中決策樹使用的是哪一種演算法
sklearn.tree.DecisionTreeClassifier基本上使用的是CART,稍稍有區別的是它對CART的計算性能進行了優化。
你是不可以指定它使用其他演算法的。但是你可以設置sklearn.tree.DecisionTreeClassifier中criterion參數為"entropy",也就是信息增益,這樣就幾乎是ID3了。但是C4.5是基於信息增益率的,所以sklearn.tree.DecisionTreeClassifier做不到C4.5演算法。
F. 決策樹(decisionTree)
決策樹(decisionTree)是一種基本的分類和回歸方法。此文僅討論用於分類方法的決策樹。
決策樹的學習通常分為3步:
決策樹的學習的思想主要源於
定義決策樹 :
分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點(node)和有向邊(directed edge)組成。結點又分為內部結點(internal node)和葉結點(leaf node)。內部結點表示一個特徵或屬性,葉結點表示一個類。
形如:
其中,圓表示內部結點,方框表示葉結點。
if-then規則,簡單來說就是 :
舉例:對於一個蘋果,外表是紅色的是紅蘋果,外表是綠色的是青蘋果。可以表示為:
if-then規則集合具有一個重要的性質:
這就是說每一個實例都被一條路徑或規則覆蓋,並且只被一條路徑或規則覆蓋。這里所謂的覆蓋是指實例的特徵與路徑上的特徵一致,或實例滿足規則的條件。
給定數據集:
其中, 為輸入實例(特徵向量),含有 個特徵, 為類標記, , 為樣本容量。
目標 :
根據給定的訓練數據集構建一個決策樹模型,使它能夠對實例進行正確分類。
特徵選擇在於選取對訓練數據具有分類能力的特徵,這樣可以提高決策樹學習的效率。
如果我們利用某一個特徵進行分類的結果與隨機分類的結果沒什麼很大的差別的話,則稱這個特徵沒有分類能力。
那麼問題來了,怎麼選擇特徵呢?
通常特徵選擇的准則是
下面通過例子來說明一下。
目標 :
希望通過所給的訓練集數據,學習一個貸款申請的決策樹。當新的客戶提出貸款申請的時候,根據申請人的特徵利用決策樹決定是否批准貸款申請。
可見這里共有4個特徵可供選擇。用特徵選擇的准則是 。接下來介紹 。
:
熵是表示隨機變數不確定性的度量。
設 是一個取有限個值的隨機變數,其概率分布為
則隨機變數 的熵定義為
若 ,則定義 。通常對數取以2為底,或是以 為底,熵的單位分布為比特(bit)或是納特(nat)。
由上式可知,熵只依賴 的分布,而已 的值無關,則 的熵還可記作 ,即
則從定義可知
當隨機變數只取2個值的時候,例如 時, 的分布為
熵為
熵隨概率變化的曲線為
當 或 時 ,隨機變數完全沒有不確定性,當 時 ,熵取值最大,隨機變數不確定性最大。
設隨機變數 ,其聯合概率分布
條件熵 表示在已知隨機變數 的條件下隨機變數 的不確定性。隨機變數 給定條件下隨機變數 的條件熵(conditional entropy),定義為 給定條件下 的條件概率分布的熵對 的數學期望
信息增益
特徵 對訓練集 的信息增益
根據信息增益准則的特徵選擇方法:對訓練集 ,計算其每個特徵的信息增益,並比較大小,選擇信息增益最大的特徵。
前期定義各個量:
信息增益的演算法
輸入:訓練集 和特徵 ;
輸出:特徵 對訓練集 的信息增益
回看剛才的例子,
解 :
這一次我很無聊的想用一下.csv文件類型。
所以訓練數據集部分如下,我存在一個loan.csv文件里了。對.csv文件的各種處理一般由python的pandas模塊完成。
第一步,導入相關模塊
第二步,讀入數據
若是使用jupyter,可以即刻查看一下數據,和數據標簽。
可以看出,除了'ID'之外前4個標簽 'age', 'work', 'own house', 'Credit conditions'為我們一直在說的特徵 ,而最後一個標簽'label'是我們所說的類 ,所以要處理一下這些標簽,
第三步,計算訓練集 的熵 :
這里會用到pandas的一個統計數據的功能, groupby(by = [列]).groups ,將數據統計成字典的形式,這么說比較抽象,看下圖,將我們用pandas讀入的data,分為2類, , Index 表示索引,即第0,1,4,5,6,14(python計數從0開始)個數據的 ,第2,3,7,8,9,10,11,12,13個數據的 .
那麼計算訓練集 的熵
第四步,計算特徵 對數據集 的條件熵
第五步 ,計算信息增益
輸入:訓練集 和特徵 和閾值 ;
輸出:決策樹
(1) 中所有實例都屬於同一類 ,則 為單結點樹,並將類 作為該結點的類標記,返回 ;
(2) 若 ,則 為單結點樹,並將 中實例數最大的類 作為該結點的類標記,返回 ;
(3)否則,按照上述信息增益的演算法,計算 中各個特徵對 的信息增益,選擇信息增益最大的特徵 ;
(4)如果特徵 的信息增益小於閾值 ,將置 為單結點樹,並將 中實例數最大的類 作為該結點的類標記,返回 ;
(5)否則,對 的每一個可能值 ,依 將 分割為若干非空子集 ,將 中實例數最大的類 作為該結點的類標記,構建子結點,由結點及其子結點構成樹 ,返回 ;
(6)對第 個子結點,以 為訓練集,以 為特徵集,遞歸的調用步驟(1)~步驟(5),得到子樹 ,返回 。
對上述表的訓練集數據,利用ID3演算法建立決策樹。
解 :
第一次迭代 :
【特徵:有自己的房子】將數據集 劃分為2個子集 (有自己的房子)和 (沒有自己的房子),觀察一下 和 :
:
由於 所有實例都屬於同一類 ,所以它是一個葉結點,結點的類標記為「是」。
:
對於 則需從特徵 中選擇新的特徵。
第二次迭代 :
將 看作新的數據集 。【特徵:有工作】有2個可能值,劃分為2個子集 (有工作)和 (沒有工作),觀察一下 和 :
:
由於 所有實例都屬於同一類 ,所以它是一個葉結點,結點的類標記為「是」。
:
G. 基於python的決策樹能進行多分類嗎
決策樹主文件 tree.py
[python] view plain
#coding:utf-8
frommathimportlog
importjson
fromplotimportcreatePlot
classDecisionTree():
def__init__(self,criterion="entropy"):
self.tree=None
self.criterion=criterion
def_is_continuous_value(self,a):
#判斷一個值是否是連續型變數
iftype(a).__name__.lower().find('float')>-1or
type(a).__name__.lower().find('int')>-1:
returnTrue
else:
returnFalse
def_calc_entropy(self,dataset):
#計算數據集的香農熵
classes=dataset.ix[:,-1]
total=len(classes)
cls_count={}
forclsinclasses:
ifclsnotincls_count.keys():
cls_count[cls]=0
cls_count[cls]+=1
entropy=1.0
forkeyincls_count:
prob=float(cls_count[key])/total
entropy-=prob*log(prob,2)
returnentropy
def_calc_gini(self,dataset):
#計算數據集的Gini指數
classes=dataset.ix[:,-1]
total=len(classes)
cls_count={}
forclsinclasses:
ifclsnotincls_count.keys():
cls_count[cls]=0
cls_count[cls]+=1
gini=1.0
forkeyincls_count:
prob=float(cls_count[key])/total
gini-=prob**2
returngini
def_split_data_category(self,dataset,feature,value):
#對分類變數進行拆分
#將feature列的值為value的記錄抽取出來,同時刪除feature列
H. python中的sklearn中決策樹使用的是哪一種演算法
要弄清楚這個問題,首先要弄懂決策樹三大流行演算法ID3、C4.5和CART的原理,以及sklearn框架下DecisionTreeClassifier的幫助文檔。
3個演算法的主要區別在於度量信息方法、選擇節點特徵還有分支數量的不同。
ID3,採用熵(entropy)來度量信息不確定度,選擇「信息增益」最大的作為節點特徵,它是多叉樹,即一個節點可以有多個分支。
C4.5,同樣採用熵(entropy)來度量信息不確定度,選擇「信息增益比」最大的作為節點特徵,同樣是多叉樹,即一個節點可以有多個分支。
CART,採用基尼指數(Gini index)來度量信息不純度,選擇基尼指數最小的作為節點特徵,它是二叉樹,即一個節點只分兩支。
然後你認真閱讀sklearn的DecisionTreeClassifier的幫助文檔,可以發現,度量信息的方法默認是Gini,但可以改成entropy,請按需選擇;構建的樹是二叉樹;可以通過設置max_deepth、max_leaf等來實現「剪枝」,這是根據CART的損失函數減少的理論進行的。
所以總結說,如果信息度量方法按照默認的設置,那麼sklearn所用的決策樹分類器就是CART,如果改成了entropy,那麼只是使用了別的度量方法而已。其實兩者差不多。
I. python中的sklearn中決策樹使用的是哪一種演算法
sklearn中決策樹分為DecisionTreeClassifier和DecisionTreeRegressor,所以用的演算法是CART演算法,也就是分類與回歸樹演算法(classification and regression tree,CART),劃分標准默認使用的也是Gini,ID3和C4.5用的是信息熵,為何要設置成ID3或者C4.5呢