Jag har i huvudsak en mängd värden som denna: Ovanstående array är förenklad, jag samlar 1 värde per millisekund i min riktiga kod och jag behöver bearbeta utmatningen på en algoritm som jag skrev för att hitta den närmaste toppen före en tidpunkt. Min logik misslyckas eftersom i mitt exempel ovan är 0.36 den riktiga toppen, men min algoritm skulle se bakåt och se det sista numret 0,25 som toppen, eftersom det är en minskning till 0,24 före den. Målet är att ta dessa värden och tillämpa en algoritm för dem som släpper ut dem lite så att jag har mer linjära värden. (dvs: Jag tycker att mina resultat är kurva, inte jaggediga) Jag har blivit tillsagd att tillämpa ett exponentiellt glidande medelfilter till mina värden. Hur kan jag göra det här Det är verkligen svårt för mig att läsa matematiska ekvationer, jag hanterar mycket bättre med kod. Hur bearbetar jag värden i min array, tillämpar en exponentiell glidande medelberäkning för att jämföra dem ut frågade 8 feb 12 kl 20:27 för att beräkna ett exponentiellt glidande medelvärde. du behöver behålla en del tillstånd och du behöver en inställningsparameter. Detta kräver en liten klass (förutsatt att du använder Java 5 eller senare): Instantiate with decay parameteren du vill ha (det kan ta tuning ska vara mellan 0 och 1) och sedan använda genomsnittet () för att filtrera. När du läser en sida om någon matematisk återkommande, behöver allt du verkligen vet när du gör det till kod, att matematiker gillar att skriva index i arrayer och sekvenser med prenumerationer. (Theyve några andra noteringar också, vilket inte hjälper.) EMA är dock ganska enkel eftersom du bara behöver komma ihåg ett gammalt värde, inga komplicerade tillståndsskivor krävs. svarat 8 feb 12 kl 20:42 TKKocheran: Ganska mycket. Det är inte bra när saker kan vara enkla (Om du börjar med en ny sekvens, få en ny medelvärde.) Observera att de första villkoren i den genomsnittliga sekvensen kommer att hoppa runt lite på grund av gränseffekter, men du får de med andra glidande medelvärden för. En bra fördel är dock att du kan förflytta den glidande genomsnittliga logiken till medelvärdena och experimentera utan att störa resten av ditt program för mycket. ndash Donal Fellows Feb 9 12 på 0:06 Jag har svårt att förstå dina frågor, men jag kommer att försöka svara ändå. 1) Om din algoritm hittat 0,25 istället för 0,36, då är det fel. Det är fel eftersom det förutsätter en monotonisk ökning eller minskning (det går alltid upp eller går alltid ner). Om du inte genomsnittar ALLA dina data, dina datapunkter --- som du presenterar dem --- är olinjära. Om du verkligen vill hitta det maximala värdet mellan två punkter i tid, skivar du din matris från tmin till tmax och hittar maximal av den subarrayen. 2) Nu är begreppet glidande medelvärden mycket enkelt: tänk att jag har följande lista: 1,4, 1,5, 1,4, 1,5, 1,5. Jag kan släta ut det genom att ta medeltalet av två tal: 1,45, 1,45, 1,45, 1,5. Observera att det första numret är medeltalet 1,5 och 1,4 (andra och första siffror) den andra (nya listan) är genomsnittet av 1,4 och 1,5 (tredje och andra gamla listan) den tredje (nya listan) i genomsnitt 1,5 och 1,4 (fjärde och tredje), och så vidare. Jag kunde ha gjort det period tre eller fyra, eller n. Lägg märke till hur dataen är mycket mjukare. Ett bra sätt att se glidande medelvärden på jobbet är att gå till Google Finance, välj ett lager (försök Tesla Motors ganska flyktiga (TSLA)) och klicka på technicals längst ner i diagrammet. Välj Flytta genomsnittet med en given period och Exponentiell glidande medelvärde för att jämföra deras skillnader. Exponentiellt glidande medelvärde är bara en annan utarbetande av detta, men vikter äldre data mindre än de nya data så är det ett sätt att förspänna utjämningen mot baksidan. Vänligen läs Wikipedia-posten. Så det här är mer en kommentar än ett svar, men den lilla kommentarrutan var bara för liten. Lycka till. Om du har problem med matte kan du gå med ett enkelt rörligt medel istället för exponentiellt. Så den produkt du får är de sista x-termerna dividerad med x. Obestämd pseudokod: Observera att du kommer att behöva hantera start - och slutdelarna av data eftersom du klart inte kan räkna med de senaste 5 termerna när du befinner dig på din andra datapunkt. Det finns också mer effektiva sätt att beräkna detta glidande medelvärde (summa summan - äldsta nyaste), men det här är att få konceptet av vad som händer över. svarade den 8 februari 12 på 20: 41What039s skillnaden mellan glidande medelvärde och vägat glidande medelvärde Ett glidande medelvärde på 5 år baserat på ovanstående priser skulle beräknas med följande formel: På grundval av ekvationen ovan var genomsnittspriset under perioden listade ovan var 90,66. Att använda glidande medelvärden är en effektiv metod för att eliminera starka prisfluktuationer. Huvudbegränsningen är att datapunkter från äldre data inte vägs något annorlunda än datapunkter nära början av datasatsen. Det här är där viktade glidande medelvärden kommer till spel. Viktiga medelvärden tilldelar tyngre viktning till mer aktuella datapunkter eftersom de är mer relevanta än datapunkter i det avlägsna förflutna. Summan av viktningen ska lägga till upp till 1 (eller 100). För det enkla glidande medlet fördelas viktningarna jämnt, varför de inte visas i tabellen ovan. Slutpriset för AAPLExponential Moving Average (EMA) Den klassiska EMA-formeln är: Till skillnad från Simple Moving Average. där vikten av alla föregående staplar är lika, gör Exponential Moving Average den senaste baren viktigare. Vikten av varje äldre stång minskar exponentiellt. Nedan är ett viktdiagram för N 10 (1 är nuvarande pris, 2 föregående och så vidare): Viktformeln är där jag är ett avstånd till den senaste fältet. 0 betyder den senaste, 1 föregående stapel och så vidare. Första värdet Formeln hänvisar till föregående värde och det finns inget standardavtal vad är det första (äldsta) värdet. Olika implementeringar av EMA-användningar: Det första priset (MT4, Marketscope) eller The Simple Moving Average av de första N-priserna (Stockcharts). I stället för enkelt rörligt medelvärde kan det exponentiala rörliga medelvärdet användas exakt som enkelt rörande medelvärde. speciellt i situationen när inertiteten av Simple Moving Average är inte kan ignoreras. Jämför bara EMA (10) och MVA (10) som tillämpas på samma priser: Begränsningar Det exponentiella rörliga genomsnittsvärdet baseras på alla tidigare värden, så indikatorns resultat för en viss stapel beror på hur mycket historisk data tas i beaktande. Så, i läget när mer historisk data laddas, kan indikatorns värde skilja sig från den tidigare beräknade. Indikatorer Denna artikel i Other Languagesnet. sourceforge. openforecast. models Klass WeightedMovingAverageModel En vägd glidande genomsnittlig prognosmodell baseras på en konstgjort konstruerad tidsserie där värdet för en given tidsperiod ersätts med det viktade medlet av det värdet och värdena för några antal föregående tidsperioder. Som du kanske har gissat från beskrivningen är den här modellen bäst lämpad för tidsseriedata, dvs data som ändras över tiden. Eftersom prognosvärdet för en given period är ett vägt genomsnitt av de föregående perioderna, kommer prognosen alltid att ligga kvar efter antingen ökningar eller minskningar i de observerade (beroende) värdena. Till exempel, om en dataserie har en noterbar uppåtgående trend, kommer en vägd, glidande medelprognos generellt att ge en underskattning av värdena för den beroende variabeln. Den viktade glidande genomsnittsmodellen, som den rörliga genomsnittsmodellen, har en fördel jämfört med andra prognosmodeller, eftersom det släpper ut toppar och tråg (eller dalar) i en uppsättning observationer. Men som den rörliga genomsnittsmodellen har den också flera nackdelar. I synnerhet producerar denna modell inte en verklig ekvation. Därför är det inte allt som är användbart som ett medium långt prognosverktyg. Det kan bara på ett tillförlitligt sätt användas för att förutse några perioder i framtiden. Sedan: 0.4 Författare: Steven R. Gould Fields ärvde från klassen net. sourceforge. openforecast. models. AbstractForecastingModel WeightedMovingAverageModel () Konstruerar en ny vägd glidande genomsnittsprognosmodell. WeightedMovingAverageModel (dubbelvikter) Konstruerar en ny vägd rörlig genomsnittsprognosmodell med angivna vikter. prognos (double timeValue) Returnerar prognosvärdet för den beroende variabeln för det angivna värdet av den oberoende tidsvariabeln. getForecastType () Returnerar ett eller två ordnamn för denna typ av prognosmodell. getNumberOfPeriods () Returnerar det aktuella antalet perioder som används i denna modell. getNumberOfPredictors () Returnerar antalet prediktorer som används av den underliggande modellen. setWeights (dubbelvikter) Ställer in vikterna som används av den här vägda glidande prognosmodellen med de angivna vikterna. toString () Detta bör överskridas för att ge en textbeskrivning av den aktuella prognosmodellen inklusive, om möjligt, några härledda parametrar som används. Metoder som ärva från klassen net. sourceforge. openforecast. models. AbstractTimeBasedModel WeightedMovingAverageModel Konstruerar en ny vägd glidande genomsnittsprognosmodell med angivna vikter. För att en giltig modell ska konstrueras, bör du ringa init och passera i en dataset som innehåller en serie datapunkter med tidsvariabeln initialiserad för att identifiera den oberoende variabeln. Storleken på viktsmatrisen används för att bestämma antalet observationer som ska användas för att beräkna det vägda glidmedlet. Dessutom kommer den senaste perioden att ges den vikt som definieras av det första elementet i matrisen, dvs vikter0. Storleken på vikten array används också för att bestämma mängden framtida perioder som effektivt kan prognostiseras. Med ett 50 dagars viktat glidande medelvärde kan vi inte med rimlighet - med någon noggrannhet - prognostisera mer än 50 dagar bortom den senaste perioden för vilken data finns tillgänglig. Även prognoser nära slutet av det här intervallet är sannolikt inte opålitligt. Anmärkning på vikter Generellt bör vikterna som passerar till denna konstruktör, lägga till upp till 1,0. Men som en bekvämlighet, om summan av vikterna inte lägger till upp till 1,0, vågar denna implementering alla vikter proportionellt så att de summerar till 1,0. Parametrar: vikter - en uppsättning vikter för att tilldela de historiska observationerna vid beräkning av det vägda glidmedlet. WeightedMovingAverageModel Konstruerar en ny vägd glidande genomsnittsprognosmodell, med namnet variabel som oberoende variabel och angivna vikter. Parametrar: independentVariable - namnet på den oberoende variabel som ska användas i den här modellen. vikter - en uppsättning vikter för att tilldela de historiska observationerna vid beräkning av det vägda rörliga genomsnittet. WeightedMovingAverageModel Konstruerar en ny vägd glidande genomsnittsprognosmodell. Denna konstruktör är avsedd att endast användas av underklasser (det är därför skyddad). Eventuella underklasser som använder denna konstruktör måste senare anropa (skyddad) setWeights-metoden för att initialisera vikterna som ska användas av denna modell. WeightedMovingAverageModel Konstruerar en ny vägd rörlig genomsnittsprognosmodell med hjälp av den givna oberoende variabeln. Parametrar: independentVariable - namnet på den oberoende variabel som ska användas i den här modellen. setWeights Ställer in vikterna som används av denna viktade glidande genomsnittsprognosmodell till de angivna vikterna. Denna metod är avsedd att endast användas av underklasser (det är därför skyddad), och endast i samband med den (skyddade) enargumentkonstruktorn. Varje underklass som använder enargumentkonstruktören måste sedan ringa setWeights innan man anropar metoden AbstractTimeBasedModel. init (net. sourceforge. openforecast. DataSet) för att initiera modellen. Anmärkning på vikter I allmänhet bör vikterna som passeras till denna metod öka till 1,0. Men som en bekvämlighet, om summan av vikterna inte lägger till upp till 1,0, vågar denna implementering alla vikter proportionellt så att de summerar till 1,0. Parametrar: vikter - en uppsättning vikter för att tilldela de historiska observationerna vid beräkning av det vägda glidmedlet. Returnerar prognosvärdet för den beroende variabeln för det angivna värdet av den oberoende tidsvariabeln. Underklasser måste implementera denna metod på ett sådant sätt i överensstämmelse med den prognosmodell de implementerar. Underklasser kan använda sig av getForecastValue och getObservedValue-metoderna för att erhålla tidigare prognoser och observationer. Specificeras av: prognos i klassen AbstractTimeBasedModel Parameters: timeValue - värdet av tidsvariabeln för vilken ett prognosvärde krävs. Returnerar: prognosvärdet för den beroende variabeln för den angivna tiden. Kasta: IllegalArgumentException - om det inte finns tillräckligt med historiska data - observationer skickade till init - för att generera en prognos för det angivna tidsvärdet. getNumberOfPredictors Returnerar antalet prediktorer som används av den underliggande modellen. Returnerar: antalet prediktorer som används av den underliggande modellen. getNumberOfPeriods Returnerar det aktuella antalet perioder som används i denna modell. Specificeras av: getNumberOfPeriods i klassen AbstractTimeBasedModel Returns: det aktuella antalet perioder som används i denna modell. getForecastType Returnerar ett eller två ordnamn för denna typ av prognosmodell. Håll det här kort. En längre beskrivning bör genomföras i toString-metoden. Detta bör överskridas för att ge en textbeskrivning av den nuvarande prognosmodellen, inklusive eventuella härledda parametrar, där det är möjligt. Specificeras av: toString i gränssnittet ForecastingModel Overrides: toString i klassen AbstractTimeBasedModel Returns: en strängpresentation av den aktuella prognosmodellen och dess parametrar.
No comments:
Post a Comment