有没有办法预测根据参数和数据集从sci-kit学习运行分类器需要多长时间?我知道,非常好,对吧?
某些分类器/参数组合非常快,有些需要花费很长时间,以至于我最终会杀死进程。我想提前估计需要多长时间。
或者,我接受一些关于如何设置公共参数以减少运行时间的指示。
答案 0 :(得分:31)
有非常特定的分类器或回归器类直接报告算法的剩余时间或进度(迭代次数等)。通过将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 fit remaining time
答案 1 :(得分:0)
如果您使用的是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
答案 2 :(得分:0)
实际上,我们正在研究package,它提供了scikit-learn fit的运行时估计。
您基本上应该在运行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)
随时看看!