繁体   English   中英

预测scikit-learn分类需要运行多长时间

[英]Predicting how long an scikit-learn classification will take to run

有没有办法预测根据参数和数据集从sci-kit学习运行分类器需要多长时间? 我知道,非常好,对吗?

一些分类器/参数组合非常快,有些需要很长时间,以至于我最终会杀死进程。 我想要一种预先估计需要多长时间的方法。

或者,我接受一些关于如何设置公共参数以减少运行时间的指针。

有非常特定的分类器或回归器类直接报告算法的剩余时间或进度(迭代次数等)。 通过将verbose=2 (任何高数字> 1)选项传递给各个模型的构造函数,可以启用其中的大部分功能。 注意:此行为符合sklearn-0.14。 早期版本有一些不同的详细输出(尽管仍然有用)。

最好的例子是ensemble.RandomForestClassifier或ensemble.GradientBoostingClassifier`,它打印到目前为止构建的树的数量和剩余时间。

clf = ensemble.GradientBoostingClassifier(verbose=3)
clf.fit(X, y)
Out:
   Iter       Train Loss   Remaining Time
     1           0.0769            0.10s
     ...

要么

clf = ensemble.RandomForestClassifier(verbose=3)
clf.fit(X, y)
Out:
  building tree 1 of 100
  ...

此进度信息对于估计总时间非常有用。

然后还有其他模型,如SVM,打印完成的优化迭代次数,但不直接报告剩余时间。

clf = svm.SVC(verbose=2)
clf.fit(X, y)
Out:
   *
    optimization finished, #iter = 1
    obj = -1.802585, rho = 0.000000
    nSV = 2, nBSV = 2
    ...

据我所知,线性模型等模型不提供此类诊断信息。

检查此主题以了解更多关于详细级别含义的内容: scikit-learn适合的剩余时间

如果您使用的是IPython,则可以考虑使用内置的魔术命令,例如%time%timeit

%time - Python语句或表达式的执行时间。 打印CPU和挂钟时间,并返回表达式的值(如果有)。 请注意,在Win32下,系统时间始终报告为0,因为无法测量。

%timeit -使用timeit模块执行Python语句或表达式的时间。

例:

In [4]: %timeit NMF(n_components=16, tol=1e-2).fit(X)
1 loops, best of 3: 1.7 s per loop

参考文献:

https://ipython.readthedocs.io/en/stable/interactive/magics.html

http://scikit-learn.org/stable/developers/performance.html

我们实际上正在开发一个 ,它提供了scikit-learn拟合的运行时估计。

您基本上在运行algo.fit(X,y)之前运行它以获得运行时估计。

这是一个简单的用例:

from scitime import Estimator 
estimator = Estimator() 
rf = RandomForestRegressor()
X,y = np.random.rand(100000,10),np.random.rand(100000,1)
# Run the estimation
estimation, lower_bound, upper_bound = estimator.time(rf, X, y)

随意看看!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM