問題タブ [numpy-einsum]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - カーネル関数の計算で numpy einsum と numexpr を使用してパフォーマンスを高速化するにはどうすればよいですか?
RBF、双曲線正接、フーリエなどのいくつかの有名なカーネルをライブラリのsvm.SVR
メソッドに定義しようとしています。sklearn
私は作業を開始しrbf
(svm に rbf 用のデフォルトのカーネルがあることは知っていますが、後でカスタマイズできるように定義する必要があります)、ここでいくつかの有用なリンクを見つけて、これを選択しました:
これを使用したのは、形状が異なる電車 ([3850,4] の形状) とテスト データ ([1200,4] の形状) に使用できるためです。しかし問題は、処理が遅すぎて、結果が出るまで長い間待たなければならないことです。cython で static-typing と memoryviews も使用しましたが、そのパフォーマンスはデフォルトのsvm
rbf カーネルほど良くありません。私はまた、同じ問題についてのこのリンクを見つけましたがnumpy.einsum
、numexpr.evaluate
私にとっては少し混乱しています。これは、速度パフォーマンスの点で最高のコードであることがわかりました。
scipy.linalg.blas からインポート sgemm
このコードは 1 つの入力 (X) に対してのみ機能し、私の場合に合わせて変更する方法が見つかりませんでした (2 つの異なるサイズの 2 つの入力 - カーネル関数は形状 (m,n) および (l,n) の行列を取得します)。svm docsに従って (m,l) を出力します)。K[i,j] = np.exp(-1*np.linalg.norm(x-y)**2)
高速化するには、最初のコードを2番目のコードに置き換えるだけでよいと思います。どんな助けでもいただければ幸いです。