私は次の機能を使用しています:
kernel = @(X,Y,sigma) exp((-pdist2(X,Y,'euclidean').^2)./(2*sigma^2));
次の方法で、一連のカーネルを計算します。
K = [(1:size(featureVectors,1))', kernel(featureVectors,featureVectors, sigma)];
ただし、featureVectors
は巨大な行列 (10000x10000 など) であるため、カーネルの計算に非常に長い時間がかかります (例: K
)。
どういうわけか計算を高速化することは可能ですか?
編集:コンテキスト
libsvm
変数名とセマンティクスからお気づきかもしれませんが、ガウス カーネルを使用して を介して分類子を使用しています。
私は今(多かれ少なかれ)#terms~=10000
と#docs~=10000
. この #terms は、ストップワードの削除とステミングの結果です。このコースは、10000
機能を持つことが理にかなっていることを示しています。
残念ながら、libsvm
Gaussian カーネルは自動的に実装されません。したがって、手で計算する必要があります。私はここからアイデアを取り入れましたが、カーネルの計算 (参照された質問で示唆されているように) は本当に遅いです。