机器学习实战之决策树(三)测试和存储分类器

转载请注明作者和出处:https://blog.csdn.net/weixin_45814668
微信公众号:qiongjian0427
知乎:https://www.zhihu.com/people/qiongjian0427
Github代码获取:https://github.com/qiongjian/Machine-learning/
Python版本: Python3.x

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

def classify(inputTree,featLabels,testVec):
    # 得到树的第一个特征
    firstStr=list(inputTree.keys())[0]
    # 得到第一个对应的值
    secondDict=inputTree[firstStr]
    # 得到树中第一个特征对应的索引
    # index方法查找当前列表中第一个匹配firstStr变量的元素的
    featIndex = featLabels.index(firstStr)
    # 遍历树
    for key in secondDict.keys():
        # 如果在secondDict[key]中找到testVec[featIndex]
        if testVec[featIndex]==key:
            # 判断secondDict[key]是否为字典
            if type(secondDict[key]).__name__=='dict':
                # 若为字典,递归的寻找testVec
                classLabel=classify(secondDict[key],featLabels,testVec)
            else:
                # 若secondDict[key]为标签值,则将secondDict[key]赋给classLabel
                classLabel=secondDict[key]
    # 返回类标签
    return classLabel

运行结果:
在这里插入图片描述

2.使用算法:决策树的储存

构造决策树是很耗时的任务,即使处理很小的数据集,如前面的样本数据,也要花费几秒的时间,如果数据集很大,将会耗费很多计算时间。然而用创建好的决策树解决分类问题,则可以很快完成。

因此,为了节省计算时间,最好能够在每次执行分类时调用已经构造好的决策树。

为了解决这个问题,需要使用Python模块pickle序列化对象,序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。

任何对象都可以执行序列化操作,字典对象也不例外。

# 决策树的序列化
def storeTree(inputTree,filename):
    # 导入pickle模块
    import pickle
    # 打开文件,pickle采用二进制读写
    fw=open(filename,'wb')
    # 决策树序列化
    pickle.dump(inputTree,fw)
    #关闭文件
    fw.close()
    
# 读取序列化的树
def grabTree(filename):
    import pickle
    fr=open(filename,'rb')
    # 返回读到的树
    return pickle.load(fr)

运行结果:
在这里插入图片描述将分类器储存在硬盘上这是决策树的优点之一,像knn就做不到。

END

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值