我们以决策树分类器为例。
构造决策树是很耗时的任务,即使处理很小的数据集,如果数据集很大,将会耗费更多的计算时间。然而用创建好的决策树解决(新样本)的分类问题,则可很快完成。因此,为了节省计算时间,最好能够在每次执行对新样本的分类问题时调用已经构造好的决策树,也即我们需使用训练集离线训练(offline training)决策树。为了解决这个问题,我们可以使用 Python 的 pickle 模块序列化对象。
序列化对象可以在磁盘上保存对象,并在任何需要的时候读取出来,任何对象都可执行序列化操作,字典对象自然也不例外。
import pickle
def dumpTree(tree, filename):
with open(filename, 'wb') as fp:
pickle.dump(tree, fp)
def loadTree(filname):
with open(filename, 'rb') as fp:
return pickle.load(fp, encoding='latin1')
通过上述代码,我们可将分类器存储在硬盘上,而不用每次对数据分类时重新学习一遍(一次训练,多次测试,是不是也有些 amortization,耗时分担的意味),这也是决策树的优点之一。
注:并给所有的分类器模型都可持久化,比如 KNN(K近邻算法),KNN 算法它是基于新样本到训练数据的距离进行的分类,存在一种直接的交互和依赖。