
決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。類似這樣~

image.png
決策樹它根據信息熵,熵表示不確定性,信息熵表示事物信息間A/B的不確定系數(shù)(比如:拳王打你信息熵極小,因為穩(wěn)定性、確定性高,也就是概率高),決策樹算法就是根據在每次在節(jié)點需要分裂前,計算每個屬性的增益率,然后選擇增益率最大的屬性進行分裂(不確定的切分出來繼續(xù)分裂),因為信息熵越大它的數(shù)據集合占比越大,篩選出來的數(shù)據就越多。
下面是用Python寫的簡單的決策樹ID3算法,判斷顧客是否購買電腦的練習,由于csv文件不能上傳所以內容大致是這樣

tree.csv
code
import csv
from sklearn.feature_extraction import DictVectorizer
from sklearn.externals.six import StringIO
from sklearn import tree
from sklearn import preprocessing
file = open(r"D:\pypro\mleaning\tree.csv", "r")
coll = csv.reader(file)
lab = []
fature = []
tab = [t[0] for t in coll]
tit = tab[0].split("\t")
for r in tab[1:]:
lab.append(r[-1])
r1 = r.split("\t")
rowdict = {tit[cnt]: r1[cnt] for cnt in range(1,5)}
fature.append(rowdict)
# print(fature)
# print(lab)
vec = DictVectorizer()
dummyx = vec.fit_transform(fature).toarray()
print(dummyx)
print(vec.get_feature_names())
lb = preprocessing.LabelBinarizer()
dummyy = lb.fit_transform(lab)
print("dummy:" + str(dummyy))
dectree = tree.DecisionTreeClassifier(criterion="entropy")
clf = dectree.fit(dummyx, dummyy)
print("clf:" + str(clf))
由于不能上傳csv附件,如有需要,歡迎大家留言交流~