《机器学习实战》第三章3.3 测试和存储分类器

《机器学习实战》系列博客主要是实现并理解书中的代码,相当于读书笔记了。毕竟实战不能光看书。动手就能遇到许多奇奇怪怪的问题。博文比较粗糙,需结合书本。博主边查边学,水平有限,有问题的地方评论区请多指教。书中的代码和数据,网上有很多请自行下载。

3.3.1测试算法:使用决策树执行分类

3.1讲述了如何构造决策树,我们可以将它用于实际的数据分类。

使用决策树的分类函数

def classify (inputTree,featLabels,testVec):
    firstStr = inputTree.keys()[0]
    secondDict = inputTree[firstStr]
    featIndex = featLabels.index(firstStr)#将标签字符串转换为索引
    for key in secondDict.keys():
        if testVec[featIndex] == key:
            if type(secondDict[key]).__name__ == 'dict':
                classLabel = classify(secondDict[key],featLabels,testVec)
            else:       
                classLabel = secondDict[key]

函数index

labels = ['a','b','c','d','e'];
featIndex = labels.index('e')
print featIndex
4
[Finished in 0.4s]

测试

>>> reload(trees)
<module 'trees' from 'trees.py'>
>>> trees.classify(myTree,labels,[1,1])
'yes'
>>> trees.classify(myTree,labels,[1,0])
'no'
>>> 

3.3.2 使用算法:决策树的存储

使用python 模块pickle 序列化对象,序列化对象可以在磁盘上保存对象,在需要的时候读取出来。

def storeTree(inputTree,filename):   
    import pickle  
    fw = open(filename,'w')    
    pickle.dump(inputTree,fw)          

def grabTree(filename):  
    import pickle  
    fr = open(filename)   
    return pickle.load(fr)  
>>> import trees
>>> myDat ,labels = trees.createDataSet()
>>> myTree  = trees.createTree(myDat, labels)
>>> myTree
{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}
>>> trees.storeTree(myTree , 'classifierStorage.txt')
>>> trees.grabTree('classifierStorage.txt')
{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}
>>> 

这里写图片描述

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

>>> import treePlotter
>>> import trees
>>> fr = open('lenses.txt')
>>> lenses = [inst.strip().split('\t') for inst in fr.readlines()]
>>> lensesLabels = ['age','prescript','astigmatic','tearRate']
>>> lensesTree = trees.createTree(lenses,lensesLabels)
>>> lensesTree 
{'tearRate': {'reduced': 'no lenses', 'normal': {'astigmatic': {'yes': {'prescript': {'hyper': {'age': {'pre': 'no lenses', 'presbyopic': 'no lenses', 'young': 'hard'}}, 'myope': 'hard'}}, 'no': {'age': {'pre': 'soft', 'presbyopic': {'prescript': {'hyper': 'soft', 'myope': 'no lenses'}}, 'young': 'soft'}}}}}}
>>> treePlotter.createPlot(lensesTree)

这里写图片描述

lenses = [inst.strip().split(‘\t’) for inst in fr.readlines()]
解析tab 键分隔的数据行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值