欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

决策树(三)测试和存储分类器

程序员文章站 2024-02-15 09:40:40
...

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