1. 程式人生 > >大數據-決策樹

大數據-決策樹

entropy rop 轉換 car span 算法 都是 決策樹歸納 共同點

決策樹/判定樹:是一個類似於流程圖的樹結構,其中,每個內部結點表示在一個屬性上的測試,每個分支代表一個屬性輸出,而每個樹葉結點代表類或類分布。樹的最頂層是根結點。

熵(entropy)概念:信息量的度量就等於不確定性的多少。一條信息的信息量大小和它的不確定性有直接的關系,要搞清楚一件非常不確定的事情,需要了解大量的信息。

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

決策樹歸納算法 (ID3)

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

選擇屬性判斷結點

信息獲取量(Information Gain):Gain(A) = Info(D) - Infor_A(D)

技術分享

其中pi表示第i個類別在整個訓練元組中出現的概率,可以用屬於此類別元素的數量除以訓練元組元素總數量作為估計。熵的實際意義表示是D中元組的類標號所需要的平均信息量。

在信息增益中,衡量標準是看特征能夠為分類系統帶來多少信息,帶來的信息越多,該特征越重要。對一個特征而言,系統有它和沒它時信息量將發生變化,而前後信息量的差值就是這個特征給系統帶來的信息量。所謂信息量,其實就是熵。

其他算法:

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)

決策樹的優點:

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

決策樹的缺點:

處理連續變量不好

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

可規模性一般

決策樹應用:

data.xls是需要訓練的數據集,dataTest.xls是測試集

#!/usr/bin/python
# -*- coding: utf-8 -*-
import pandas as pd from sklearn.tree import DecisionTreeClassifier as DTC data_train = pd.read_excel(decisionTree/data.xls, index_col=u序號)#指定以"序號"為索引 data_test = pd.read_excel(decisionTree/dataTest.xls, index_col=u序號) ‘‘‘ data_train[‘天氣‘] = data_train[‘天氣‘].map({‘好‘:‘1‘, ‘壞‘:‘0‘}) data_train[‘是否周末‘] = data_train[‘是否周末‘].map({‘是‘:‘1‘, ‘否‘:‘0‘}) data_train[‘是否有促銷‘] = data_train[‘是否有促銷‘].map({‘是‘:‘1‘, ‘否‘:‘0‘}) data_train[‘銷量‘] = data_train[‘銷量‘].map({‘高‘:‘1‘, ‘低‘:‘0‘}) ‘‘‘ #數據是類別標簽,要將它轉換為數據 #用1來表示“好”、“是”、“高”這三個屬性,用0來表示“壞”、“否”、“低” data_train[data_train == u] = 1 data_train[data_train == u] = 1 data_train[data_train == u] = 1 data_train[data_train != 1] = 0 data_test[data_test == u] = 1 data_test[data_test == u] = 1 data_test[data_test != 1] = 0 x = data_train.iloc[:,:3].as_matrix().astype(int) y = data_train.iloc[:,3].as_matrix().astype(int) print(真實結果:%s%y) data_test = data_test.iloc[:,:3].as_matrix().astype(int) dtc = DTC(criterion=entropy) dtc.fit(x, y) y_pred = dtc.predict(data_test) print(預測結果:%s%y_pred)

大數據-決策樹