Python 使用sklearn和pickle的随机林进行循环预测

Python 使用sklearn和pickle的随机林进行循环预测,python,machine-learning,runtime,pickle,random-forest,Python,Machine Learning,Runtime,Pickle,Random Forest,我在Python3.6上使用sci工具包学习,在循环中使用从Pickle加载的随机林进行预测时遇到一些运行时问题 当我从一个带有1个估计器(树)的随机林中进行预测时,每个样本的运行时间约为0.002秒。然而,当我增加估计器的数量(>1)时,无论树的数量如何,运行时间都会增长到每个样本0.1秒 以下是我保存模型的代码: clf = RandomForestClassifier(n_estimators=1, #or > 1 n_jobs=-1,

我在Python3.6上使用sci工具包学习,在循环中使用从Pickle加载的随机林进行预测时遇到一些运行时问题

当我从一个带有1个估计器(树)的随机林中进行预测时,每个样本的运行时间约为0.002秒。然而,当我增加估计器的数量(>1)时,无论树的数量如何,运行时间都会增长到每个样本0.1秒

以下是我保存模型的代码:

clf = RandomForestClassifier(n_estimators=1, #or > 1 
            n_jobs=-1,
            random_state=2,
            max_depth=15,
            min_samples_leaf=1,
            verbose=0,
            max_features='auto'
            )

clf.fit(X_train, y_train)

with open('classifier.pkl', 'wb') as fid:
    cPickle.dump(clf, fid)  
下面是我在循环中加载模型和预测的代码:

with open('classifier.pkl', 'rb') as fid:
    clf = cPickle.load(fid)

for s in samples:
    #my feature extraction method
    pred = clf.predict(feature) #feature is a 1D np array containing features computed for the sample s 
我不明白为什么运行时与树的数量不成比例,为什么它增长如此之快。是虫子还是我用错了泡菜

拜托,你能帮我吗


CB

如果在预测之前不进行pickle,你会看到同样的问题吗(我猜不会吧?)?事实上,当我连续对多棵树的样本进行预测时,我可以在pickle之前观察到同样的问题(1棵树仍然没有问题)。这是因为我在预测单个样本上的连续标签(作为一系列1D numpy阵列)?由于一次性预测所有数据集(作为2D numpy数组)似乎没有运行时问题,因此预测一个样本的一个标签作为1D np数组(约0.10秒)似乎比预测2000个样本的2000个标签作为2D numpy数组所用的时间要长。但在我的例子中,我必须在循环中实时预测标签。也许你的特征提取方法在增加运行时间?我不这么认为,因为如果我解析预先计算的特征的2D numpy数组,并逐行预测,问题仍然存在。看起来sklearn需要一定的时间先设置树,然后立即进行预测。这可以解释为什么大型2D阵列的预测运行时与一维阵列相同?但这看起来很奇怪,因为我只加载了一次分类器,同样的问题在没有pickle的情况下也会发生。。