当前位置:   article > 正文

《机器学习实战笔记--第一部分 分类算法:决策树 3》_#输入三个变量(决策树,属性特征标签,测试的数据) def classify(inputtree,f

#输入三个变量(决策树,属性特征标签,测试的数据) def classify(inputtree,featlab

        构造分类器:

我们在构造了决策树之后,可以用于实际的分类了。在执行分类的时候需要决策树以及用于构造树的标签向量。程序比较测试数据与决策树上的数值,递归执行该过程直到进入叶子节点;最后将测试数据定义为叶子节点所属的类型。

  1. def classify(inputTree, featLabels, testVec):
  2. #featLabels特征标签列表
  3. firstStr = list(inputTree.keys())[0]
  4. #print('first:',firstStr)
  5. secondDict = inputTree[firstStr]
  6. #寻找用于划分数据集的特征存储在哪个位置
  7. featIndex = featLabels.index(firstStr)
  8. #print('index:',featIndex)
  9. for key in secondDict.keys():
  10. #print(key)
  11. #print(testVec[featIndex])
  12. #print('******')
  13. if testVec[featIndex] == key:
  14. if type(secondDict[key]).__name__ == 'dict':
  15. classLabel = classify(secondDict[key], featLabels, testVec)
  16. #print('classLabel:',classLabel)
  17. else:
  18. classLabel = secondDict[key]
  19. #print('classLabel:',classLabel)
  20. return classLabel

    

     运行的结果如上所示。

    现在我们已经创建了决策树分类器,但是每次使用分类的时候必须重新构造决策树,下面我们来学习如何在硬盘上存储决策树分类器。

    使用算法:决策树的储存

    构造决策树是很麻烦的一件事情,所以为了节省计算时间,最好能够在每次执行分类器时调用已经构造好的决策树,为了解决这个问题,需要使用python模块pickle序列化对象。序列化的对象可以在磁盘上保存,并在需要时读取出来。任何对象都可以执行序列化操作,字典对象也不例外。

  1. def storeTree(inputTree, filename):
  2. import pickle
  3. #存储方式默认是二进制方式。
  4. fw = open(filename, 'wb+')
  5. pickle.dump(inputTree, fw)
  6. fw.close
  7. def grabTree(filename):
  8. import pickle
  9. fr = open(filename, 'rb')
  10. return pickle.load(fr)

    

我们可以看到已经将分类器储存在硬盘上了,而不用每次都重新学习一遍了。

    示例:使用决策树预测隐形眼镜类型

(1)、收集数据:提供的文本文件

(2)、准备数据:解析tab键分隔的数据行

(3)、分析数据:快速检查数据,确保正确的解析数据内容,使用createPlot()函数绘制最终的图形。

(4)、训练算法:使用之前的createTree()函数

(5)、测试算法:编写测试函数决策树可以正确分类给定的数据实例

(6)、使用算法:存储树的数据结构,以便下次使用时无需重新构造树

  1. fr = open('lenses.txt')
  2. #strip()移除字符串两端指定字符,默认为空格
  3. lenses = [inst.strip().split('\t') for inst in fr.readlines()]
  4. print(lenses)
  5. print('*****')
  6. lensesLabels = ['age','prescript','astigmatic','tearRate']
  7. lensesTree = createTree(lenses, lensesLabels)
  8. print(lensesTree)


    最终的决策图为:

        

    医生只需要四次询问就可以确定哪种类型的眼镜,然而这些匹配的选项太多了,我们将这种问题成为过度匹配。为了减少过度匹配的问题,我们可以裁剪决策树,去掉一些不需要的叶子节点。如果叶子只增加少许信息那么就删除该节点,将它并入到其他的叶子节点中。我们会在第九章进一步讨论。

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

闽ICP备14008679号