J'utilise Sklearn pour estimer le modèle de mélange gaussien (GMM) sur certaines données.Comment augmenter Sklearn GMM prédire() la vitesse de performance?
Après l'estimation, j'ai beaucoup de points de requête. Je voudrais obtenir leurs probabilités d'appartenance à chacun des estimés gaussiens.
Le code ci-dessous fonctionne. Cependant, la partie gmm_sk.predict_proba(query_points)
est très lente car j'ai besoin de l'exécuter plusieurs fois sur 100000 ensembles d'échantillons, où chaque échantillon contient 1000 points. Je suppose que ça arrive parce que c'est séquentiel. Y a-t-il un moyen de le rendre parallèle? Ou tout autre moyen de le rendre plus rapide? Peut-être sur GPU en utilisant TensorFlow?
J'ai vu tensorflow a son propre GMM algorithme, mais il était très difficile à mettre en œuvre.
Voici le code que je l'ai écrit:
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))
Je l'ai résolu! en utilisant multiprocessing
. vient de remplacer
temp = []
for i in range(2000):
temp.append(gmm_sk.predict_proba(query_points))
avec
import multiprocessing as mp
query_points = query_points.tolist()
parallel = mp.Pool()
fv = parallel.map(par_gmm, query_points)
parallel.close()
parallel.join()
Notez que j'utilise déjà "diag". C'est encore lent. peut-être paralléliser? –
@itzikBenShabat La fonction GaussianMixture n'a pas de paramètre n_jobs (Le nombre de processeurs à utiliser pour effectuer le calcul) mais si vous trouvez un autre moyen de le publier, cela sera intéressant :) En outre, envisagez d'effectuer cette tâche en utilisant un autre module, par exemple. tensorflow ou même d'autres logiciels comme Matlab – sera
@itzikBenShabat avez-vous essayé de diminuer les composants gaussiens? – sera