决策树(三)测试和存储分类器
转载请注明作者和出处: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