Ich muss die Histogramm-Schnittpunkt-Kernel-Matrizen für die Verwendung von LIBSVM in MATLAB vorberechnen.Wie vektorisiert man die Schnittpunktkernfunktion in MATLAB?
Angenommen, x, y sind zwei Vektoren. Die Kernfunktion ist K (x, y) = Summe (min (x, y)). Um effizient zu sein, sollten in den meisten Fällen die Operationen vektorisiert werden.
Was ich tun möchte, ist wie Berechnung der Kernel-Matrizen wie Berechnung der euklidischen Abstand zwischen zwei Matrizen, wie pdist2 (A, B, 'euklidischen'). Nachdem ich die Funktion 'intKernel' definiert hatte, konnte ich den Schnittstellenkern durch Aufruf von pdist2 (A, B, intKernel) berechnen.
Ich weiß, dass die Funktion 'pdist2' eine Option sein kann. Aber ich habe keine Ahnung, wie ich die selbstdefinierte Entfernungsfunktion schreiben soll. Ich weiß zwar nicht, wie ich den Schnittpunkt-Kernel zwischen Vektor (1-mal-M) und Matrix (M-mal-N) in einem Condens-Ausdruck kodieren soll.
"Repmat" möglicherweise nicht durchführbar, weil die Matrix wirklich groß ist, sagen wir, 20000-von-360000.
Jede Hilfe wäre willkommen.
Grüße, Peiyun
Ich habe diese Art von Ausdruck zuvor versucht, während es für subskribierte Zuordnung Dimensionskonflikt verursachen würde. Zum Beispiel a = rand (1, 10); b = Rand (10, 10); pdist2 (a, b, @ (x, Y) Summe (bsxfun (@min, x, Y), 1)); – Peiyun
Ich habe es herausgefunden. Der distance_kernel sollte sein: distance_kernel = @ (x, Y) Summe (bsxfun (@min, x, Y), 2), und es wird über Spalten summieren. – Peiyun
@Peiyun Ja, du hast Recht, ich bearbeite meine Antwort. – Bentoy13