Friday 1 December 2017

Python obliczanie wykładniczo ruchome średnie


Mam wiele dat i pomiar w każdej z tych dat. Chodzi o obliczanie wykładniczej średniej ruchomej dla każdej z dat. Czy ktoś wie, jak to zrobić Im nowy w python. Nie wydaje się, że średnie są wbudowane w standardową bibliotekę python, która uderza mnie za trochę dziwne. Może nie szukam we właściwym miejscu. Tak, biorąc pod uwagę następujący kod, w jaki sposób można obliczyć przenoszona ważona średnia punktów IQ dla dat kalendarza (theres prawdopodobnie lepszym sposobem na strukturę danych, wszelkie porady byłoby mile widziane) zapytał 28 stycznia 09 o 18:01 Mój python jest trochę zardzewiały (każdy może mieć ochotę edytować ten kod, aby dokonać korekt, jeśli Ive zawiedli składnię jakoś), ale tu idzie. Ta funkcja przemieszcza się do tyłu, od końca listy do początku, obliczając wykładniczą średnią ruchomą dla każdej wartości, pracując do tyłu, aż współczynnik wagi elementu będzie mniejszy niż podany epsilon. Po zakończeniu funkcji odwraca wartości przed przekazaniem listy (tak, aby były we właściwej kolejności dla wywołującego). (SIDE UWAGA: jeśli używałem języka innego niż Pythona, najpierw należy najpierw utworzyć pełną tablicę pustą, a następnie wypełnić ją wstecznie, tak że nie musiałbym jej cofać na końcu. Ale nie sądzę, że możesz zadeklarować duża pusta tablica w Pythonie, a na listach Pythona, dodawanie jest znacznie tańsze niż prepending, dlatego zbudowałem listę w odwrotnej kolejności. Proszę popraw mnie, jeśli Im nie tak.) Argumentem alfa jest współczynnik zaniku na każdej iteracji. Jeśli na przykład używasz alfa 0.5, to teraz średnia wartość średnia ruchu będzie składać się z następujących ważonych wartości: Oczywiście, jeśli masz ogromną liczbę wartości, wartości z dziesięciu lub piętnaście dni temu nie przynoszą znacznego wkładu średnia ważona w dzisiejszych czasach. Argument epsilon umożliwia ustawienie punktu odcięcia, poniżej którego przestaniesz dbać o stare wartości (ponieważ ich wkład w dzisiejszą wartość będzie nieistotny). Youd powołać funkcji coś w tym stylu: odpowiedział Jan 28 09 o 18:46 Nie wiem Python, ale dla uśrednionej części, masz na myśli wykładniczy rozpad filtr dolnoprzepustowy w postaci, w której alfa dttau, dt timestep filtra , tau stałą czasową filtra (ta zmienna forma czasowa jest następująca, wystarczy, że plik dttau nie przekracza 1,0) Jeśli chcesz filtrować coś w rodzaju daty, upewnij się, że konwertujesz na liczbę zmiennoprzecinkową jak sekundy od 1 stycznia 1970. odpowiedziałem 28 stycznia o 18:10 Znalazłem powyższy fragment kodu przez earino bardzo przydatne - ale potrzebowałem czegoś, co mogłoby ciągle wygładzić strumień wartości - więc ja refactored go do tego: i używam to tak: (gdzie pin. read () tworzy następną wartość Id do konsoli). odpowiedziałem 12 lutego 14 w 20:35 Im zawsze obliczał EMA z Pandasem: Oto przykład, jak to zrobić: Więcej informacji na temat Pandas EWMA: odpowiedział Oct 4 15 w 12:42 Nowsze wersje Pandas mają nowe i lepsze funkcje. ndash Cristian Ciupitu 11 maja 16 w 14:10 Zauważ, że w przeciwieństwie do arkusza kalkulacyjnego nie obliczyłem SMA i nie czekam na generowanie EMA po 10 próbkach. Oznacza to, że moje wartości różnią się nieznacznie, ale jeśli je skalkulujesz, następuje dokładnie po 10 próbkach. Podczas pierwszych 10 próbek, obliczona EMA jest odpowiednio wygładzona. Hmmm, wydaje się, że ta cytatka o implementacji funkcji jest w zasadzie całkiem łatwa do zerwania i sprzyja dobrej dyskusji na temat efektywności pamięci. Cieszę się, że się boję, jeśli znaczy to, że coś zostało zrobione dobrze. ndash Richard Sep 20 14 at 19:23 NumPys brak określonej funkcji specyficznej dla domeny jest prawdopodobnie związany z dyscypliną Core Teams i wiernością pierwszej dyrektywie NumPys: dostarczenie N-wymiarowej tablicy. jak również funkcje do tworzenia i indeksowania tych tablic. Podobnie jak wiele podstawowych celów, ten nie jest mały, a NumPy robi to wspaniale. Większa SciPy zawiera znacznie większą kolekcję bibliotek domenowych (zwanych podpakietami SciPy devs) - na przykład optymalizację liczbową (optymalizację), przetwarzanie sygnałów (sygnał) i integralny rachunek (integracja). Domyślam się, że twoja funkcja jest w co najmniej jednym z podpakietów SciPy (scipy. signal być może), jednak najpierw chciałbym się dowiedzieć w kolekcji sciPics SciPy. zidentyfikować odpowiednie scikit (y) i poszukać interesującej go funkcji. Scikty są niezależnie opracowywanymi pakietami opierającymi się na programie NumPySciPy i skierowane do określonej dyscypliny technicznej (np. Scikits-image, scikits-learn itp.) Kilka z nich (w szczególności niesamowity OpenOpt dla optymalizacji numerycznej) były wysoko oceniane, zanim zdecydujesz się zamieszkać w stosunkowo nowych rubrykach scikits. Strona dominikańska poświęcona była ponad 30 listom takim scikitom. choć przynajmniej niektóre z nich nie są już aktywne. Zgodnie z tą radą prowadziłbyś do scikits-timeseries, ale pakiet ten nie jest już aktywnie rozwijany. W efekcie Pandas stał się, AFAIK, biblioteką bibliotek czasowych opartych na de facto NumPy. Pandas ma kilka funkcji, które mogą być użyte do obliczenia średniej ruchomej, najprostszym z nich jest prawdopodobnie rollingmean. które używasz tak: Teraz wystarczy wywołać funkcję rollingmean przechodzącą w obiekcie Series i rozmiar okna. co w poniższym przykładzie to 10 dni. upewnij się, że działa - np. porównane wartości 10 - 15 w oryginalnych seriach w porównaniu do nowych serii wygładzonych ze średnią kroczącą Funkcja rollingmean wraz z około kilkunastu innymi funkcjami jest nieformalnie zgrupowana w dokumentacji Pandas w oknie przesuwnym rubryki, pełni drugą grupę funkcji w Pandas jest określana jako funkcja ważona wykładni (np. ewma, która oblicza wykładniczo przenoszoną średnią ważoną). Fakt, że ta druga grupa nie jest włączona do pierwszej (ruchome funkcje okien) jest prawdopodobnie dlatego, że transformowane wykładniczo wykłady nie polegają na windowIm o stałej długości w procesie tworzenia algorytmu handlu forex i chciałem spróbować swoich strzałów przy obliczaniu EMA (średnie kroczące) Moje wyniki wydają się być poprawne (w porównaniu do obliczeń zrobiłem ręcznie), więc wierzę, że następująca metoda działa, ale po prostu chciał dostać dodatkowy zestaw oczu, aby upewnić się, że im nic nie brakuje. Zauważ, że po prostu zwraca EMA za ostatnią cenę, ale nie zwraca tablicę EMA, ponieważ nie jest to, czego potrzebuję do mojej aplikacji. Rekursja jest dobrym narzędziem do właściwej pracy, ale tutaj służy do prostego zapętlenia. Jako taki kod. jest trudniejsze do odczytania i uzasadnienia. jest wolniejszy, ponieważ większość kodu w ema wymaga tylko jednokrotnego uruchomienia. nie powiedzie się z wystarczająco dużą wartością okna z powodu przelewu stosu Pythons. Proszę podać co najmniej parametry każdej z funkcji, np. Okno to jest długością okna, a pozycja ta liczy się od końca. (W rzeczywistości rzeczy byłyby jaśniejsze, gdyby pozycja była normalnym indeksem do przodu w dane) Unieś wyjątek, jeśli znajdziesz parametr, który ma nieprawidłową wartość. Wracanie Żaden zamiast tego tylko spowoduje bardziej mylące wyjątek później. W rzeczywistości, jeśli próbuję wskaźników (). Ema (closeprices, 600) otrzymuję nieskończoną rekurencję, ponieważ sma zwraca None. co sprawia, że ​​ema dzwoni sma w kółko. W poprzednim punkcie ujawniono również, że jeśli len (data) to okno 2 nie jest prawidłowym sprawdzaniem poprawności. The 1 w data-window2 1: - window 1 dont wydają się poprawne do mnie. Przypuszczam, że chcesz data-window2: - window Zwraca oświadczenie returnema w dziwnym miejscu, ponieważ w tym momencie obliczyłeś nowy currentema. Jest to podstawowy przypadek rekursji, a zazwyczaj jest to podstawa do obsługi bazy. Moja prośba o ema: odpowiedziała 26 listopada na 18:56. Całkiem płytka recenzja: nie musisz pisać klasy, co robisz (sugeruję, abyś obejrzał ten film). Twoja klasa nie zawiera żadnych danych i po prostu używa ich do swoich funkcji w tej samej jednostce. Myślę, że łatwiej byłoby zrozumieć, jeśli miałeś zdefiniować metodę classmethod, aby było oczywiste, że wcale nie będziesz polegał na jakiejkolwiek instancji. Jeszcze lepszym rozwiązaniem byłoby zdefiniowanie funkcji w module wskaźnika. odpowiedziałem 24 listopada w 18:04 Dzięki za sugestie faktycznie miałem je jako metoda klas i debatowanie tam iz powrotem między nawet przy użyciu klasy lub po prostu definiowanie funkcji modułu wskaźnikowego (co teraz zrobię). ndash ChrisC 25 listopada 14 w 19:12 Po prostu obejrzałem film także, świetne rzeczy. ndash ChrisC 25 listopada 14 w 19:43 Odpowiedź z użytkownika 2017 Stack Exchange, IncSmoothing z liczbami średnimi przenoszącymi się wykładniczo Średnia średnia ruchów ma serię godzin hałasu i zastępuje każdą wartość średnią wartością sąsiedztwa o danej wartości. Ta dzielnica może składać się wyłącznie z danych historycznych lub może być skupiona wokół danej wartości. Wartości w sąsiedztwie mogą być ważone przy użyciu różnych zestawów ciężarów. Oto przykład średnio ważonej trzypunktowej średniej ruchomej, przy użyciu danych historycznych, tutaj reprezentuje wygładzony sygnał i reprezentuje serię godzin hałasu. W przeciwieństwie do prostych ruchomej średniej ruchomej średniej ważonej wykładniczym (EWMA) dopasowuje się wartość w oparciu o wykładniczą ważoną sumę wszystkich poprzednich wartości. To jest podstawowy pomysł: To miło, ponieważ nie musisz martwić się o okno z trzema punktami, w porównaniu z pięcioma oknami, albo martwić się o odpowiedniość Twojego planu ważenia. Wraz z EWMA, poprzednie perturbacje 8220, 8221 i 8220 były zapomniane, 8221 według terminu w ostatnim równaniu, podczas gdy z oknem lub otoczeniem z dyskretnymi granicami zakłóca się zapomnienie, jak tylko wyjdzie przez okno. Uśrednianie EWMA w celu dostosowania się do trendów Po przeczytaniu o EWMA w książce z analizą danych, poszedłem szczęśliwie używając tego narzędzia na każdej pojedynczej aplikacji wygładzającej, którą natrafiłem. Dopiero później dowiedziałem się, że funkcja EWMA jest właściwa tylko dla danych stacjonarnych, tzn. Danych bez tendencji lub sezonowości. W szczególności funkcja EWMA przeciwstawia się tendencjom odbiegającym od obecnej znaczy, że jest już 8220seen8221. Więc jeśli masz hałaśliwą funkcję kapelusza, która idzie od 0, do 1, a następnie z powrotem do 0, wtedy funkcja EWMA zwróci niskie wartości po stronie wzgórza, a wysokie wartości w dół wzgórza. Jednym ze sposobów obejścia tego jest wygładzenie sygnału w obu kierunkach, marszu do przodu, a następnie marszu do tyłu, a następnie przeciętnie. W tym miejscu będziemy używać funkcji EWMA dostarczanej przez moduł pandasa. Holt-Winters Second Order EWMA Poniżej znajduje się kod Pythona implementujący metodę drugiego rzędu Holt-Winters na innej hałasowej kapcie. Post navigation Ostatnie wpisy

No comments:

Post a Comment