Latin hypercube sampling avec python
Je tiens à prélever un échantillon de la distribution définie par une fonction en de multiples dimensions (2,3,4):
f(x, y, ...) = ...
Les distributions pourraient être laid, non standard (comme une spline 3D sur les données, la somme de gaussiennes ect.). À cette fin, j'aimerais uniformément exemple de la 2..4 dimensions de l'espace, et qu'avec un autre nombre aléatoire accepter ou de rejeter le point donné de l'espace dans mon exemple.
-
Est-il prêt à utiliser python lib?
-
Est là lib python pour générer les points de cette 2..4 dimensions de l'espace avec le latin hypercube sampling, ou avec d'autres uniformes de la méthode d'échantillonnage? Bruteforce échantillonnage aléatoire et indépendant des numéros généralement des résultats plus ou moins dense des régimes de l'espace.
-
si 1) et 2) n'existe pas, est-ce que quelqu'un qui a la gentillesse de partager sa mise en œuvre pour le même problème.
Je vais l'utiliser dans un code python, mais des liens vers d'autres solutions sont également reconnus.
OriginalL'auteur user2393987 | 2014-10-01
Vous devez vous connecter pour publier un commentaire.
Je suppose que c'est une réponse tardive, mais c'est aussi pour les futurs visiteurs. Je viens de mettre en place une mise en œuvre de l'approche multi-dimensionnelle uniforme Latin Hypercube sampling sur git. C'est minime, mais très facile à utiliser. Vous pouvez générer de l'aléatoire uniforme variables échantillonnées dans n dimensions à l'aide de Latin Hypercube sampling, si vos variables sont indépendantes. Ci-dessous est un exemple de tracé de la comparaison de Monte-Carlo et le Latin Hypercube sampling avec Multi-dimensionnelle de l'Homogénéité (LHS-MDU) en deux dimensions avec une corrélation nulle.
:
), points de suspension (...
), numpy.newaxis (None
) et entier booléen ou les tableaux sont valables indices. Le défaut de ligne est l = lhsmdu.de l'échantillon(2, 10) (je suis sur python 3)Désolé pour la réponse tardive. Cela ne fonctionne actuellement qu'avec Python 2.7, je ne me dérange pas de passer du temps rendant compatible avec Python 3, si vous avez toujours l'intention de l'utiliser.
Je n'ai pas d'urgence pour l'utilisation de la bibliothèque aujourd'hui, mais si vous port pour python 3, je vais certainement l'utiliser.
Ok. Il devrait fonctionner maintenant, en supposant que vous avez toutes les dépendances de droit. Pourriez-vous le vérifier?
J'ai essayé de pip install 'lhsmdu", mais il n'y a pas de module sous ce nom.
OriginalL'auteur Sahil M
Maintenant la pyDOE bibliothèque fournit un outil pour générer Latin hypercube sur des échantillons.
https://pythonhosted.org/pyDOE/randomized.html
pour générer des échantillons de plus de n dimensions:
où n est le nombre de dimensions, d'échantillons que le nombre total de l'échantillon de l'espace.
Vous ne savez pas si elle est pertinente, mais je enregistrer ces valeurs dans un fichier texte afin que je puisse l'utiliser plus tard. Personnellement, je n'ai pas vérifié les résultats varient entre les tentatives, mais pense qu'il pourrait être une bonne idée d'avoir une copie sur mon disque dur.
Le problème c'est que je ne connais pas mon 'n' et 'p' arguments avant de la main. Cependant, j'ai pu résoudre mon problème sans modifier le pyDOE code source, par l'import numpy dans mon script principal, après que je l'importation pyDOE et puis l'exécution de numpy.aléatoire.de la graine(seed_value). Cela garantit que les chiffres sont les mêmes entre les courses.
pyDOE2 est un fork de pyDOE qui est toujours maintenu. Une amélioration de la il a, c'est que vous pouvez passer une valeur aléatoire directement à
lhs
.OriginalL'auteur Qiangzini
Ce 2-D de l'exemple des échantillons de manière uniforme sur les deux dimensions, choisit chaque point avec la constante de probabilité (ainsi garder un binôme distribués nombre de points), on choisit au hasard et sans remise de ces points à partir de l'échantillon de l'espace, et génère une paire de vecteurs que vous pouvez ensuite passer à travers votre fonction f:
OriginalL'auteur BKay