Monday 30 October 2017

Rekursiivinen Liikkuvan Keskiarvon Algoritmi


Haluan toteuttaa iteratiivisen algoritmin, joka laskee painotetun keskiarvon. Erityinen paino-laki ei ole väliä, mutta sen pitäisi olla lähellä 1 uusimmille arvoille ja lähellä 0 vanhimmalle. Algoritmin tulisi olla iteratiivinen. eli ei pitäisi muistaa kaikkia aiempia arvoja. Sen pitäisi tietää vain yksi uusin arvo ja kaikki yhteenlasketut tiedot menneisyydestä, kuten aiempien keskimääräisten arvojen, summien, laskenta jne. Esimerkiksi seuraava algoritmi voi olla: Se antaa eksponentiaalisen painon pienentämisen, mikä ei ehkä ole hyvä. Voidaanko astetta alentaa painoa tai jotain Seuraavassa noudatetaan lakisääteisiä vaatimuksia: 1) Paino laskee menneisyyteen 2) Minulla on jonkinasteinen tai tyypillinen kesto, joten vanhempien arvojen kesto on paljon pienempi kuin uudemmilla 3) I pitäisi pystyä asettamaan tämän keston tarvitsen seuraavia. Oletetaan, että vi ovat arvoja, joissa v1 on ensimmäinen. Oletetaan myös, että wi ovat painoja. Mutta w0 on viimeinen. Joten ensimmäisen arvosanan jälkeen minulla on ensimmäinen keskiarvo Kun toinen arvo v2 tuli, minun pitäisi olla keskimäärin Seuraavalla arvolla minun olisi pitänyt huomata, että painoprofiili liikkuu minun kanssani, kun liikuten arvo-järjestyksessä. Toisin sanoen jokaisella arvolla ei ole koko painoarvoa. Tavoitteenani on saada tämä paino alhaisemmaksi menemällä menneisyyteen. Mutta minun tehtäväni on, että keskiarvo lasketaan uudelleen joka kerta, kun uusi arvo tulee, kun vanhat arvot ovat uudelleenpainotettuja. OP Sinun tehtäväsi on lähes aina mahdotonta, vaikka poikkeuksellisen yksinkertaisilla painotusohjelmilla. Pyydä O (1) - muistia tuottamaan keskiarvot, joiden painotus on muuttumassa. Esimerkiksi, kun uusia arvoja siirretään, jotkut melkein mielivaltaisesti muuttuvat paino-sekvenssit. Tämä on mahdotonta injektoinnin vuoksi. Kun yhdistät numerot yhteen, menetät valtavan määrän tietoja. Esimerkiksi, vaikka sinulla olisi painovektori. alkuperäistä arvo-vektoria ei voitu palauttaa tai päinvastoin. On vain kaksi asiaa, joista voin ajatella, mistä voisit päästä eroon tästä: jatkuvat painot, kuten 2,2,2. 2: tämä vastaa verkossa olevaa keskimääräistä algoritmia, jota et halua, koska vanhoja arvoja ei painoteta uudelleen. Aiempien vastausten suhteelliset painot eivät muutu. Esimerkiksi voit tehdä painoja 8,4,2,1. ja lisää uusi elementti mielivaltaisella painolla. 1. mutta sinun on korotettava kaikki edelliset samalla kertoimella, kuten 16,8,4,21. Joten jokaisessa vaiheessa lisäät uuden mielivaltaisen painon ja uuden mielivaltaisen reskalaation menneisyyteen, joten sinulla on 2 vapausaste (vain 1, jos haluat säilyttää pistetunnuksesi normalisoituna). Painonvektorit, joita voit saada, näyttäisivät: Näin ollen mikä tahansa painotus, jota voit tehdä, näyttää toimivan (ellei sinun tarvitse pitää asia normalisoituna painojen summana, jolloin sinun on jaettava uusi keskiarvo uudella summa, jonka voit laskea pitämällä vain O (1) muistia). Pelkästään moninkertaistaa edellinen keskiarvo uudella s: llä (joka epäsuorasti jakautuu pistetuotteen yli painoihin) ja kiinnittyy uuteen wnewValue-arvoon. Vastaa Mar 29 12 at 21:27 Tässä Im olettaen, että haluat painot summaavat 1. Niin kauan kuin voit luoda suhteellisen painon ilman, että se muuttuu tulevaisuudessa, voit päätyä ratkaisuun, joka jäljittelee tätä käyttäytymistä. Oletetaan, että olet määrittänyt painoasi sekvenssiksi ja määritellyt syötteen järjestyksessä. Tarkastellaan muotoa: summa (s0i0 s1i1 s2i2. Snin) summa (s0 s1 s2. Sn). Huomaa, että on vähäpätöisesti mahdollista laskea tämä vähitellen muutamalla aggregaatiotasolla: Tietenkin laskemalla WeightFromCounter () tässä tapauksessa ei pitäisi tuottaa painoja, jotka summa yhteen - temppu täällä on, että me keskimäärin jakamalla summa painoja niin että loppujen lopuksi painot näyttävät olevan lähes yhtä suuria. Todellinen temppu on, kuinka voit laskea WeightFromCounter (). Voit yksinkertaisesti palauttaa laskurin itse esimerkiksi esimerkiksi huomauttaen, että viimeinen painotettu numero ei välttämättä ole lähellä laskureiden summaa välttämättä, joten et voi päätyä haluamaasi tarkkaan ominaisuuksiin. (Se on vaikea sanoa, koska, kuten mainitsin, olet jättänyt melko avoimen ongelman.) Vastasi 28. maaliskuuta klo 21.45 Ongelmana on, että painot muuttuvat kunkin uuden arvon mukaan. Teidän tapauksessanne he eivät ole. ndash Suzan Cioc Mar 29 12 at 14:43 Todelliset käytetyt painot ovat muuttumassa jokaisen uuden arvon - rivitavarat on jaettu peräkkäin suuremmalla määrällä, mikä vahvistaa, että käytetyt käytetyt painot aina summaavat 1. ndash Kaganar Mar 29 12 klo 14.45 Tämä on liian pitkä kommentin lähettämiseen, mutta voi olla hyödyllistä tietää. Oletetaan, että sinulla on: w0vn. wnv0 (soita tämä w0..nvn..0 lyhyeksi) Seuraava vaihe on: w0vn1. wn1v0 (ja tämä on w0..n1vn1..0 lyhyt) Tämä tarkoittaa sitä, että tarvitsemme tapa laskea w1..n1vn..0 alkaen w0..nvn..0. Sen varmasti on mahdollista, että vn..0 on 0. 0, z, 0. 0 missä z on jossain paikassa x. Jos meillä ei ole ylimääräistä tallennusta, niin f (zw (x)) zw (x 1) missä w (x) on paikan x paino. Yhtälön uudelleenjärjestely, w (x 1) f (zw (x)) z. No, w (x 1) on parempi vakio vakiolle x, joten f (zw (x)) z on parempi. Tällöin f: n on annettava z propagoi - eli f (zw (x)) zf (w (x)). Mutta täällä taas on kysymys. Huomaa, että jos z (joka voi olla mikä tahansa numero) voi levitä f: n kautta. niin w (x) voi varmasti. Joten f (zw (x)) w (x) f (z). Täten f (w (x)) w (x) f (z). Mutta vakiona x. w (x) on vakio, ja siten f (w (x)) on parempi myös vakio. w (x) on vakio, joten f (z) on parempi, jotta w (x) f (z) on vakio. Siten f (w (x)) w (x) c jossa c on vakio. Joten, f (x) cx jossa c on vakio, kun x on painoarvo. Eli jokainen paino on edellisen monikerta. Siten painot muodostavat muodon w (x) mbx. Huomaa, että tämä olettaa, että ainoa tieto f on viimeinen aggregoitu arvo. Huomaa, että jossakin vaiheessa sinua vähennetään tähän tapaukseen, ellei sinun ole halukas tallentamaan ei-vakio-annostesi tietoja. Et voi edustaa todellisia numeroita ääretön pituinen vektori, jolla on todellinen määrä, mutta voit lähentää niitä jollakin tavalla jatkuvalla, rajallisella määrällä tallennusta. Mutta tämä olisi vain lähentämistä. Vaikka minulla ei ollut tarkkoja todisteita, päätelmäni on, että mitä haluat, on mahdotonta tehdä suurella tarkkuudella, mutta voit käyttää log (n) tilaa (joka voi olla myös O (1) monille käytännön sovellukset) laadun laadun lähentämiseksi. Saatat pystyä käyttämään vielä vähemmän. Olen yrittänyt käytännössä koodata jotain (Java). Kuten on sanottu, tavoitteesi ei ole saavutettavissa. Voit laskea keskimäärin vain jonkin verran viimeisiä muistutettuja arvoja. Jos sinun ei tarvitse olla tarkka, voit lähentää vanhempia arvoja. Yritin tehdä sen muistamalla viimeiset 5 arvot täsmälleen ja vanhemmat arvot vain SUMmed 5 arvot, muistaa viimeiset 5 SUMS. Sitten monimutkaisuus on O (2n) muistiin viimeiset nnn-arvot. Tämä on erittäin karkea approksimaatio. Voit muokata lastValues - ja lasAggregatedSums-kokoelmakokoja haluamallasi tavalla. Katso tämä ascii-art-kuva, jossa yritetään näyttää viimeisten arvojen kaavio, joka osoittaa, että ensimmäiset sarakkeet (vanhemmat tiedot) muistetaan aggregoiduksi arvoksi (ei erikseen), ja vain ensimmäiset 5 arvot muistetaan erikseen. Haaste 1. Minun esimerkkinä ei lasketa painoja, mutta mielestäni ei pitäisi olla ongelma, että voit lisätä viimeisen AggregatedSumsin painoja asianmukaisesti - ainoa ongelma on se, että jos haluat vanhempien arvojen pienempiä painoja, se olisi vaikeampaa, koska taulukko pyörii, joten ei ole helppoa tietää, mikä paino, mihin ryhmäkokoonpanoon. Ehkä voit muokata algoritmia aina siirtämään arvoja matriisissa sen sijaan, että pyöritettäisiin. Tällöin painojen lisääminen ei saisi olla ongelma. Haaste 2. Sarjat alustetaan 0 arvolla, ja nämä arvot laskevat keskimäärin alusta alkaen, vaikka emme saaneet riittäviä arvoja. Jos käytät algoritmia pitkään, et todennäköisesti vaivaudu siitä, että se oppii jo jonkin aikaa alussa. Jos et, voit lähettää muutoksen -) vastasi 21. tammikuuta 14 klo 15:59 Vastauksesi 2017 Stack Exchange, Inc Ohjelman tärkein vika on se, että rekursiivinen laskenta on virheellinen. Keskiarvon laskemiseksi sinun on saatava nykyisen arvon summa ja jäljellä olevat arvot. jaa sitten summa arvojen mukaan. Arvojen määrä on num. Nykyinen arvo on mikä tahansa calculatenumber () palauttaa. Jäljellä olevien arvojen summa on num-1 kerrottuna jäljellä olevien arvojen keskiarvolla. Jäljellä olevien arvojen keskiarvo lasketaan tekemällä rekursiivinen puhelun keskiarvoon (). Siksi kirjoitamme seuraavaa: Täydellinen ohjelma, joka käyttää tätä toimintoa, saattaa näyttää tältä: Huomaa, että tämä ei ole hyvä tapa laskea keskiarvoa, koska menetät täsmällisesti joka kerta, kun jakaa nykyisen summan numerolla. Kun tämä keskiarvo kertyy uudelleen, kun rekursiivinen puhelu palaa, divisioonassa menetetyt merkittävät numerot eivät palauta. Tuhotat tietoja jakamalla ja kertomalla summa. Tarkempaa tarkkuutta varten sinun kannattaa seurata summaa läpi elementit, ja sitten jakaa lopussa. Toinen näkökohta on se, mitä tarkoitetaan liikkuvan keskiarvon avulla. Mitä yllä toteutettu ei ole liukuva keskiarvo vaan kiinteä keskiarvo. Se on elementtien kiinteän ikkunan keskiarvo. Jos siirrät ikkunaa yhdellä sijainnilla, sinun on aloitettava koko ja laskettava summa uudelleen. Oikea tapa toteuttaa liikkuva ikkuna on seurata kaikkia elementtejä ikkunassa. Kun siirrät ikkunan yhden sijainnin oikealle, poistat vasemmanpuoleisen elementin ikkunasta ja vähennät arvon summasta, lisää sitten uusi oikein oikein oleva elementti ikkunaan ja lisää sen arvo summaan. Eli mikä tekee siitä liikkuvan summan. Liikkuvan summan jakaminen elementtien lukumäärän mukaan antaa sinulle liukuvan keskiarvon. Luonnollinen tapa toteuttaa liikkuva ikkuna on jono, koska voit lisätä uusia elementtejä päähän ja pop vanhoja elementtejä hännästä. vastasi 22.11. klo 17.44 Tilastoissa yksinkertainen liukuva keskiarvo on algoritmi, joka laskee viimeisten n näytteiden painottamattoman keskiarvon. Parametria n kutsutaan usein ikkunan kooksi, koska algoritmia voidaan pitää ikkunana, joka liukuu datapisteiden yli. Käyttämällä algoritmin rekursiivista formulaatiota näytteeseen tarvittavia toimenpiteitä vähennetään yhteen lisäykseen, yksi vähennyslasku ja yksi jako. Koska muotoilu on riippumaton ikkunan koosta n. ajonaikaisen monimutkaisuuden O (1). eli vakio. Painottamattoman liikkuvan keskiarvon rekursiivinen kaava on, jossa avg on liikkuvan keskiarvon ja x on datapiste. Joten, kun ikkuna liukuu oikealle, yksi datapiste, hännän putoaa ulos ja yksi datapiste, pää, siirtyy sisään. Toteutus Yksinkertaisen liikkuvan keskiarvon toteutuksessa on otettava huomioon seuraavat algoritmin alustus: Niin kauan kuin ikkuna ei täytä täysin arvoja, rekursiivinen kaava epäonnistuu. Säilytys Tarvittaessa tarvitaan häntäelementtiä, joka toteutuksesta riippuen edellyttää n-elementtien tallennusta. Omat toteutukseni käyttää esitettyä kaavaa, kun ikkuna on täynnä arvoja ja muuten siirtyy kaavalle, joka päivittää keskiarvon laskemalla edellisten elementtien summan uudelleen. Huomaa, että tämä voi johtaa numeerisiin epävakaisuuksiin liukulukujen aritmeettisen vuoksi. Muistin kulutuksen osalta toteutus käyttää iteraattoreita seuraamaan pää - ja hännänelementtejä. Tämä johtaa toteutukseen, jossa on jatkuvia muistivaatimuksia ikkunasta riippumatta. Tässä on päivitysproseduuri, joka liukuu ikkunaan oikealle. Useimmissa kokoelmissa mitätöidään niiden luetteloijat, kun kohdeyleisöä muutetaan. Täytäntöönpano perustuu kuitenkin voimassa oleviin luetteloijaryhmiin. Erityisesti streaming-pohjaisissa sovelluksissa kohde-kokoelma on muutettava, kun uusi elementti saapuu. Yksi tapa käsitellä tätä on luoda yksinkertainen pyöreä kiinteä koon koko n1, joka ei koskaan mitätöi sen iteraattoreita ja vuorotellen lisäämällä elementti ja soita Shift. Toivon, että voisin selvittää, miten todella toteuttaa tämä, koska testitoiminto on hyvin hämmentävä minulle8230 Täytyykö minun muuntaa data Array, sitten ajaa SMA sma uusi SMA (20, array) 20 jaksoa SMA Miten käsitellä shift () - toiminto Onko rakentajien toteutettava. (anteeksi sekaannus). Sinun ei tarvitse muokata tietojasi taulukkoon niin kauan kuin tietojasi toteuttaa IEnumerable1 ja lueteltu tyyppi on kaksinkertainen. Yksityisviestien osalta sinun on muutettava DataRow-nimeksi kaksinkertaiset arvot. Sinun lähestymistapa toimii. Vaihto, liu'uttaa ikkunan yhden sijainnin vasemmalle. Kun sanat 40: n arvot ja 20 ajoittaisen SMA: n datasarjalle on 21 asentoa, ikkuna sopii (40 8211 20 1). Joka kerta kun soitat Shift () - ikkunaan, ikkuna siirretään vasemmalle yhdellä sijainnilla ja keskiarvo () palauttaa nykyisen ikkunan sijainnin SMA: n. Tämä tarkoittaa kaikkien arvojen painottamatonta keskiarvoa ikkunan sisällä. Lisäksi toteutukseni avulla voidaan laskea SMA, vaikka ikkuna ei ole täysin täytetty alussa. Joten pohjimmiltaan Toivottavasti tämä auttaa. Kaikki lisäkysymykset Tekijänoikeusilmoitus Christoph Heindl ja cheind. wordpress, 2009-2012. Tämän materiaalin luvaton käyttö ja tai päällekkäisyys ilman tämän blogin kirjoittajan nimenomainen kirjallista lupaa ja omistaja on ehdottomasti kielletty. Osia ja linkkejä voidaan käyttää edellyttäen, että Christoph Heindlille annetaan täydellinen ja selkeä luottamus ja cheind. wordpress sopivalla ja täsmällisellä suunnalla alkuperäiseen sisältöön. Viimeisimmät viestit Trendien hallinta: rekursiiviset liikkuvat keskimääräiset säännöt ja Internet-varastot Wai Mun Fong. Lawrence H. M. Yong Rahoituksen ja kirjanpidon laitos, Singaporen kansallinen yliopisto, 1 Business Link, Kent Ridge, Singapore 117592, Singapore Hyväksytty 24. heinäkuuta 2003. Saatavilla verkossa 24. maaliskuuta 2004. Internetin osakekurssit ovat viime aikoina nousseet ja laskeneet. spekulatiivinen kupla Internet-sektorilla. Tutkimme, olisiko sijoittajat voinut hyödyntää Internet-varastojen vauhtia käyttäen yksinkertaisia ​​liikkuvaa keskimääräistä kaupankäyntisääntöä. Simuloimme reaaliaikaista teknistä kaupankäyntiä käyttäen rekursiivista kaupankäyntistrategiaa, jota sovelletaan yli 800 liukuva keskiarvoon. Tilastollisessa päätelmässä otetaan huomioon ehdollinen heteroskedastiisuus ja yhteiset riippuvuudet. Mitään todisteita merkittävistä kaupallisista voitoista ei ole. Useimmat Internet-varastot käyttäytyvät satunnaisiksi kävijöiksi, ja tämä yhdessä korkean volatiliteetin kanssa voi olla syynä liikkuvat keskimääräisten sääntöjen huonoon suorituskykyyn. Internet-varastot Keskimääräisten sääntöjen siirtäminen Rekursiivinen strategia Bootstrap JEL-luokitus Taulukko 6. Kuva 2. Kuva 3. Kuva 4. Vastaava kirjailija. Puh. 65-6874-6693 fax: 65-6779-2083. Copyright 2004 Elsevier B. V. Kaikki oikeudet pidätetään. Viittaus artikkeleihin () Suositeltavat artikkelit Kirjan sisältö Copyright 2017 Elsevier B. V. lukuun ottamatta tietyt kolmannen osapuolen toimittamat sisällöt. ScienceDirect on Elsevier B. V: n rekisteröity tavaramerkki. Sivusto käyttää evästeitä. Jos haluat hylätä tai oppia lisää, käy Evästeet - sivulla. Kirjaudu sisään laitoksen kautta

No comments:

Post a Comment