web-dev-qa-db-ja.com

scikit-learn分類の実行にかかる時間の予測

パラメータとデータセットに基づいてsci-kit学習から分類子を実行するのにかかる時間を予測する方法はありますか?わかりました、かなりメタですよね?

一部の分類子とパラメーターの組み合わせは非常に高速で、一部には非常に時間がかかるため、最終的にプロセスを強制終了するだけです。所要時間を事前に見積もる方法を教えてください。

あるいは、実行時間を短縮するための共通パラメーターの設定方法について、いくつかの指針を受け入れます。

25
ntaggart

アルゴリズムの残り時間または進行状況(反復回数など)を直接報告する非常に特殊なクラスの分類子またはリグレッサがあります。これのほとんどは、個々のモデルのコンストラクターに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フィット残り時間

33
Sudeep Juvekar

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

0
Gustavo Bertoli

実際には、scikit-learnフィットのランタイム推定を提供する package に取り組んでいます。

基本的には、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)

お気軽にご覧ください!

0
Nathan Toubiana