决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。类似这样~
决策树它根据信息熵,熵表示不确定性,信息熵表示事物信息间A/B的不确定系数(比如:拳王打你信息熵极小,因为稳定性、确定性高,也就是概率高),决策树算法就是根据在每次在节点需要分裂前,计算每个属性的增益率,然后选择增益率最大的属性进行分裂(不确定的切分出来继续分裂),因为信息熵越大它的数据集合占比越大,筛选出来的数据就越多。
下面是用Python写的简单的决策树ID3算法,判断顾客是否购买电脑的练习,由于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附件,如有需要,欢迎大家留言交流~