当前位置:   article > 正文

第1章 决策树算法及其在商品购买行为预测的应用_购物决策因素决策树模型

购物决策因素决策树模型

本文主要介绍决策树的过程:

目录

1.决策树

2.决策树的构建

2.1信息熵

2.2节点构建

2.3决策树的优缺点

3.决策树的编程实现。

3.1 Python编码实现

3.2输出


1.决策树

决策树一般都是自上而下的来生成的。每个决策事件都可能引出两个或多个事件,导致不同的结果,把这种决策分支画成图形很像一棵树的枝干,故称决策树。

基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处熵值为0(叶节点中的实例都属于一类)。

2.决策树的构建

2.1信息熵

 在决策树构建的过程中,我们需要一个衡量标准来确定每次数据划分所带来的收益,这个标准就是信息熵,以0-1二分类问题为例,衡量一个节点的信息熵公式如下:

信息熵越大代表信息越抽象,决策树中节点信息熵规则为:Entropy(parent)> Entropy(son)> Entropy(grandson)> ...... > 0

2.2节点构建

杜撰了一批数据集,用于具体构建决策树:

决策树中常用ID3归纳算法构建节点,信息获取量过程:Gain(A) = Info(D) - Info_A(D)

通过购买结果来作为分类,看获取了多少信息量。

故:Gain(年龄) = Info(D) - Info_年龄(D) = 0.94 - 0.69 = 0.25bits

类似地,可以计算出Gain(收入) = 0.03 ,Gain(是否学生) = 0.15,Gain(信用) = 0.05

ID3算法归纳认为,选择年龄作为归纳树的父节点。

父节点的分裂结果为:

对于购买结果为no的情况可以重复上述运算过程,完成一棵完整决策树的构建。

2.3决策树的优缺点

决策树的优点:直观,便于理解,小规模数据集有效;

决策树的缺点:处理连续变量不好,类别较多时,错误增加的比较快。

3.决策树的编程实现。

3.1 Python编码实现

用sklearn实现决策树,代码如下:

  1. from sklearn.feature_extraction import DictVectorizer
  2. import csv
  3. from sklearn import tree
  4. from sklearn import preprocessing
  5. from sklearn.externals.six import StringIO
  6. # Read in the csv file and put features into list of dict and list of class label
  7. allElectronicsData = open(r'train_set.path', 'rt')
  8. reader = csv.reader(allElectronicsData)
  9. headers = next(reader)
  10. print(headers)
  11. featureList = []
  12. labelList = []
  13. for row in reader:
  14. labelList.append(row[len(row)-1])
  15. rowDict = {}
  16. for i in range(1, len(row)-1):
  17. rowDict[headers[i]] = row[i]
  18. featureList.append(rowDict)
  19. print(featureList)
  20. # Vetorize features
  21. vec = DictVectorizer()
  22. dummyX = vec.fit_transform(featureList) .toarray()
  23. print("dummyX: " + str(dummyX))
  24. print(vec.get_feature_names())
  25. print("labelList: " + str(labelList))
  26. # vectorize class labels
  27. lb = preprocessing.LabelBinarizer()
  28. dummyY = lb.fit_transform(labelList)
  29. print("dummyY: " + str(dummyY))
  30. # Using decision tree for classification
  31. # clf = tree.DecisionTreeClassifier()
  32. clf = tree.DecisionTreeClassifier(criterion='entropy')
  33. clf = clf.fit(dummyX, dummyY)
  34. print("clf: " + str(clf))
  35. # Visualize model
  36. with open("Dtree.dot", 'w') as f:
  37. f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)
  38. oneRowX = dummyX[0, :]
  39. print("oneRowX: " + str(oneRowX))
  40. newRowX = oneRowX
  41. newRowX[0] = 1
  42. newRowX[2] = 0
  43. print("newRowX: " + str(newRowX))
  44. predictedY = clf.predict(newRowX)
  45. print("predictedY: " + str(predictedY))

3.2输出

结果输出为:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/901521
推荐阅读
相关标签
  

闽ICP备14008679号