Friday 13 January 2017

Mouvement Moyenne Algorithme Python

J'ai une série de dates et de mesures à chacune de ces dates. J'aimerais calculer une moyenne mobile exponentielle pour chacune des dates. Est-ce que quelqu'un sait comment faire ceci Im nouveau à python. Il ne semble pas que les moyennes sont intégrées dans la bibliothèque standard de python, ce qui me paraît un peu bizarre. Peut-être que je ne cherche pas au bon endroit. Donc, étant donné le code suivant, comment pourrais-je calculer la moyenne mobile pondérée des points de QI pour les dates de calendrier (theres probablement une meilleure façon de structurer les données, tout conseil serait apprécié) demandé Jan 28 09 at 18:01 My python is a Un peu rusty (n'importe qui peut se sentir libre pour éditer ce code pour faire des corrections, si Ive a brouillé la syntaxe en quelque sorte), mais ici va. Cette fonction se déplace vers l'arrière, de la fin de la liste au début, en calculant la moyenne mobile exponentielle pour chaque valeur en travaillant vers l'arrière jusqu'à ce que le coefficient de pondération pour un élément soit inférieur à l'épsilon donné. À la fin de la fonction, il inverse les valeurs avant de retourner la liste (de sorte qu'ils sont dans l'ordre correct pour l'appelant). (NOTE LATÉRALE: si j'utilisais une langue autre que python, je devais créer un tableau vide en taille réelle, puis le remplir à l'envers, de sorte que je ne devais pas l'inverser à la fin. Un grand tableau vide en python. Et dans les listes de python, l'ajout est beaucoup moins cher que le pré-paiement, c'est pourquoi j'ai construit la liste dans l'ordre inverse. Je me corrige si Im mal.) L'argument alpha est le facteur de désintégration à chaque itération. Par exemple, si vous avez utilisé un alpha de 0,5, alors la valeur moyenne mobile d'aujourd'hui serait composée des valeurs pondérées suivantes: Bien sûr, si vous avez obtenu un tableau énorme de valeurs, les valeurs de dix ou quinze jours ne contribuera pas beaucoup à Moyenne pondérée d'aujourd'hui. L'argument epsilon vous permet de définir un point de coupure, en dessous duquel vous cesserez de vous soucier des anciennes valeurs (puisque leur contribution à la valeur d'aujourd'hui sera insignifiante). Youd invoquer la fonction quelque chose comme ceci: Je ne sais pas Python, mais pour la partie moyenne, voulez-vous dire un filtre passe-bas exponentiellement en décomposition de la forme où alpha dt tau, dt le timestep de la Filtre, tau la constante de temps du filtre (la forme variable-timestep de ceci est comme suit, juste le clip dt tau pour ne pas être plus que 1.0) Si vous voulez filtrer quelque chose comme une date, assurez-vous de convertir à un flottant - J'ai trouvé l'extrait de code ci-dessus par earino assez utile - mais j'avais besoin de quelque chose qui pourrait continuellement lisser un flux de valeurs - donc je l'ai refacturé à ceci: et Je l'utilise comme ceci: (où pin. read () produit la prochaine valeur Id comme à consommer). Répondre fév 12 14 at 20h35 Im toujours calculer EMAs avec Pandas: Voici un exemple comment le faire: Plus d'infos sur Pandas EWMA: Réponse Oct 4 15 at 12:42 Don39t versions plus récentes de Pandas ont de nouvelles et meilleures fonctions. Ndash Cristian Ciupitu 11 mai à 14:10 Notez que contrairement à leur feuille de calcul, je ne calculer le SMA, et je ne pas attendre pour générer l'EMA après 10 échantillons. Cela signifie que mes valeurs diffèrent légèrement, mais si vous le tracer, il suit exactement après 10 échantillons. Au cours des 10 premiers échantillons, le calcul EMA I est correctement lissé. I a essentiellement un tableau de valeurs comme ceci: Le tableau ci-dessus est simplifié, Im collecte 1 valeur par milliseconde dans mon code réel et je dois traiter la sortie sur un algorithme J'ai écrit pour trouver le pic le plus proche avant un point dans le temps. Ma logique échoue parce que dans mon exemple ci-dessus, 0.36 est le vrai pic, mais mon algorithme regarderait en arrière et verrait le tout dernier nombre 0.25 comme le pic, car il y a une diminution à 0.24 avant lui. L'objectif est de prendre ces valeurs et de leur appliquer un algorithme qui les lisse un peu pour que je possède des valeurs plus linéaires. (C.-à-d.: Id comme mes résultats à curvy, pas jaggedy) On m'a dit d'appliquer un filtre exponentiel de moyenne mobile à mes valeurs. Comment puis-je le faire C'est vraiment difficile pour moi de lire les équations mathématiques, je traite beaucoup mieux avec le code. Comment puis-je traiter les valeurs dans mon tableau, en appliquant un calcul de moyenne exponentielle de la mobilité pour les égaliser demandée Feb 8 12 at 20:27 Pour calculer une moyenne mobile exponentielle. Vous devez garder un certain état autour et vous avez besoin d'un paramètre de réglage. Cela nécessite une petite classe (en supposant que vous utilisiez Java 5 ou plus tard): Instantiate avec le paramètre de décroissance que vous voulez (peut prendre l'accord doit être entre 0 et 1), puis utilisez la moyenne () pour filtrer. Lors de la lecture d'une page sur une récurrence mathématique, tout ce que vous avez vraiment besoin de savoir lorsque vous le transformer en code est que les mathématiciens aiment écrire des index dans des tableaux et des séquences avec des indices. (Theyve quelques autres notations ainsi, ce qui ne l'aide pas.) Cependant, l'EMA est assez simple car vous devez seulement se souvenir d'une vieille valeur aucune arrays compliqués d'état requis. Répondre févr. 8 12 at 20h42 TKKocheran: Pretty much. Notez que les premiers termes de la séquence moyenne sauteront un peu en raison des effets de frontière, mais vous obtenez ceux avec d'autres moyennes mobiles aussi. Cependant, un bon avantage est que vous pouvez envelopper la logique de la moyenne mobile dans le moyager et expérimenter sans déranger le reste de votre programme trop. Ndash Donal Fellows Feb 9 12 at 0:06 J'ai de la difficulté à comprendre vos questions, mais je vais essayer de répondre de toute façon. 1) Si votre algorithme a trouvé 0,25 au lieu de 0,36, alors il est faux. C'est faux parce qu'il suppose une augmentation ou une diminution monotone (qui monte ou monte toujours). Sauf si vous moyenne toutes vos données, vos points de données --- comme vous les présenter --- sont non linéaires. Si vous voulez vraiment trouver la valeur maximale entre deux points dans le temps, découpez votre tableau de tmin à tmax et trouvez le maximum de ce sous-tableau. 2) Maintenant, le concept de moyennes mobiles est très simple: imaginez que j'ai la liste suivante: 1.4, 1.5, 1.4, 1.5, 1.5. Je peux le lisser en prenant la moyenne de deux nombres: 1.45, 1.45, 1.45, 1.5. Notez que le premier nombre est la moyenne de 1,5 et 1,4 (deuxième et premier nombres) la deuxième (nouvelle liste) est la moyenne de 1,4 et 1,5 (troisième et deuxième liste ancienne) la troisième (nouvelle liste) la moyenne de 1,5 et 1,4 (Quatrième et troisième), et ainsi de suite. J'aurais pu faire la période trois ou quatre, ou n. Remarquez comment les données sont beaucoup plus lisses. Une bonne façon de voir les moyennes mobiles au travail est d'aller à Google Finance, sélectionnez un stock (essayez Tesla Motors assez volatile (TSLA)) et cliquez sur technicals au bas du graphique. Sélectionnez Moyenne mobile avec une période donnée, et Moyenne mobile exponentielle pour comparer leurs différences. Moyenne mobile exponentielle est juste une autre élaboration de cela, mais pondère les données plus anciennes moins que les nouvelles données, c'est une façon de biais le lissage vers l'arrière. Veuillez lire l'entrée de Wikipedia. Donc, c'est plus un commentaire qu'une réponse, mais la petite boîte de commentaire était juste à minuscule. Bonne chance. Si vous avez des problèmes avec les mathématiques, vous pourriez aller avec une moyenne mobile simple au lieu d'exponentielle. Donc, la sortie que vous obtenez serait les derniers termes x divisé par x. Pseudocode non testé: Notez que vous devrez manipuler les parties de début et de fin des données car clairement vous ne pouvez pas moyenne les 5 derniers termes lorsque vous êtes sur votre 2e point de données. En outre, il existe des moyens plus efficaces de calculer cette moyenne mobile (somme somme - la plus récente la plus récente), mais c'est pour obtenir le concept de ce qui se passe à travers. Réponse 2016 Stack Exchange, Inc


No comments:

Post a Comment