Ich verwende Sklearn, um das Gaussian Mixture Model (GMM) für einige Daten zu schätzen.Wie Sklearn GMM() Leistung Geschwindigkeit erhöhen?
Nach der Schätzung habe ich viele Abfragepunkte. Ich möchte ihre Wahrscheinlichkeiten der Zugehörigkeit zu jedem der geschätzten Gaußschen erhalten.
Der folgende Code funktioniert. Allerdings ist der gmm_sk.predict_proba(query_points)
Teil sehr langsam, da ich ihn mehrmals auf 100000 Probensätzen ausführen muss, wobei jede Probe 1000 Punkte enthält.
Ich denke, dass es passiert, weil es sequenziell ist. Gibt es eine Möglichkeit, es parallel zu machen? Oder eine andere Möglichkeit, es schneller zu machen? Vielleicht auf GPU mit TensorFlow?
Ich sah TensorFlow seinen eigenen GMM Algorithmus hat, aber es war sehr schwer zu implementieren.
Hier ist der Code, den ich geschrieben habe:
import numpy as np
from sklearn.mixture import GaussianMixture
import time
n_gaussians = 1000
covariance_type = 'diag'
points = np.array(np.random.rand(10000, 3), dtype=np.float32)
query_points = np.array(np.random.rand(1000, 3), dtype=np.float32)
start = time.time()
#GMM with sklearn
gmm_sk = GaussianMixture(n_components = n_gaussians, covariance_type=covariance_type)
gmm_sk.fit(points)
mid_t = time.time()
elapsed = time.time() - start
print("learning took "+ str(elapsed))
temp = []
for i in range(2000):
temp.append(gmm_sk.predict_proba(query_points))
end_t = time.time() - mid_t
print("predictions took " + str(end_t))
ich es gelöst! mit multiprocessing
. ersetzt nur
temp = []
for i in range(2000):
temp.append(gmm_sk.predict_proba(query_points))
mit
import multiprocessing as mp
query_points = query_points.tolist()
parallel = mp.Pool()
fv = parallel.map(par_gmm, query_points)
parallel.close()
parallel.join()
Beachten Sie, dass ich bereits "Diag" verwende. Es ist immer noch langsam. vielleicht parallelisieren? –
@itzikBenShabat die GaussianMixture-Funktion hat keinen n_jobs-Parameter (Die Anzahl der CPUs zu verwenden, um die Berechnung zu tun), aber wenn Sie einen anderen Weg nach es finden, wird es interessant sein :) Denken Sie auch, diese Aufgabe mit anderen Modul z. Tensorflow oder auch andere Software wie Matlab – sera
@itzikBenShabat haben Sie versucht, die Gauß-Komponenten zu verringern? – sera