Wednesday, 15 March 2017

Durchschnittlicher Standardfehler

Ich muss den Überblick über die letzten 7 Tage Arbeitsstunden in einem Flat-File-Leseschleife zu halten. Seine verwendet werden, um die Ermüdbarkeit von Arbeitsplänen zu messen. Im Moment habe ich etwas, das funktioniert, aber es scheint ziemlich ausführlich und Im nicht sicher, ob theres ein Muster, das mehr prägnant ist. Derzeit habe ich eine Java-Klasse mit einem statischen Array, um die letzten x-Tage-Daten halten, dann, wie ich durch die Datei zu lesen, hacke ich das erste Element und verschieben die anderen 6 (für eine Woche rollen insgesamt) zurück um eins. Die Verarbeitung dieses statischen Arrays erfolgt in seinem eigenen Verfahren, dh. Meine Frage: ist dies eine vernünftige Design-Ansatz, oder gibt es etwas blendend offensichtlich und einfach, diese Aufgabe zu tun Danke Jungs gefragt Aug 30 11 at 14:33 Vielen Dank Jungs: I39ve bekam die Nachricht: verwenden Sie ein übergeordnetes Objekt und nutzen Sie die Relevante Methoden oder einen Ringpuffer. Große Antworten, alle von ihnen. Wenn Sie darüber nachdenken, benötigen Sie immer Zugriff auf das gesamte Array, so können Sie loswerden, dass erste Eintrag - die ich war nicht sicher, auf eigene Faust. I39m erleichtert, dass ich hadn39t verpasste einige 1 Liner und war im Grunde auf eine vernünftige, wenn nicht effizient und knapp Track Dies ist, was ich liebe über diese Website: qualitativ hochwertige, relevante Antworten von Menschen, die ihre sht kennen. Ndash Pete855217 Aug 11, 2010, um 15:05 Uhr Warum initialisieren Sie runningTotal auf null Was ist der Typ, wo es deklariert Es wäre gut, wenn Sie einige Code-Beispiele, die tatsächlichen Java-Code ähneln setzen. Im Übrigen wäre meine Kritik die folgende: Ihre Funktion hat zu viel. Eine Funktion oder Methode sollte zusammenhängend sein. Entsprechend sollten sie eine Sache und eins nur tun. Schlimmer noch, was passiert in Ihrer for-Schleife, wenn x 5 Sie kopieren runningTotal6 in runningTotal5. Aber dann haben Sie zwei Kopien des gleichen Wertes an Position 5 und 6. In Ihrem Design, Ihre Funktion movesshuffles die Elemente in Ihrem Array berechnet die Gesamtausdruck Zeug auf Standard-Fehler liefert die Summe Es tut zu viel. Mein erster Vorschlag ist nicht zu bewegen Zeug um in der Array. Stattdessen implementieren Sie einen kreisförmigen Puffer und verwenden Sie es statt des Arrays. Es vereinfacht Ihren Entwurf. Mein zweiter Vorschlag ist, Dinge in Funktionen zusammenzufassen, die zusammenhängen: haben Sie eine Datenstruktur (ein zirkularer Puffer), der Ihnen erlaubt, sie hinzuzufügen (und dass der älteste Eintrag sinkt, wenn er seine Kapazität erreicht hat) Interator haben eine Funktion, die die Summe auf dem Iterator berechnet (Sie dont care, wenn Sie die Summe aus einem Array, Liste oder kreisförmigen bufer.) Dont nennen es insgesamt. Nennen Sie es Summe, die ist, was Sie berechnen. Das ist, was Id tun :) That39s große info luis, aber denken Sie daran, diese Funktion ist ein kleiner Teil der Funktionalität der Klasse, und es wäre Overkill zu viel Code hinzufügen, um es perfekt. Sie sind technisch korrekt, und ich verstehe, dass mein Code zu viel 39 macht, aber gleichzeitig ist es manchmal besser, auf der Seite des kleineren, klareren Codes zu irren als für Perfektion zu gehen. Angesichts meiner Java-Fähigkeiten, auch die Herstellung der Pseudocode Sie beschreiben kompilieren würde ich blasen mein Budget auf diese (), aber danke für die klare Beschreibung. Ndash Pete855217 Aug 31 11 at 2:23 Hmmm, es geht nicht um Perfektion, sondern um etablierte industrielle Praktiken, die wir seit den letzten 3 Jahrzehnten kennen. Sauberer Code ist immer einer, der partitioniert ist. Wir haben Jahrzehnte von Beweisen, die zeigen, dies ist der Weg in den allgemeinen Fall zu gehen (in Bezug auf Wirtschaftlichkeit, Fehlerreduzierung, Verständnis, etc). Es sei denn, es ist Wegwerf-Code für eine einmalige Art der Sache. Es ist niemals teuer, dies zu tun, wenn man auf diese Weise eine Problemanalyse startet. Codierung 101, brechen das Problem und der Code folgt, weder Overkill noch schwierig) ndash luis. espinal Ihre Aufgabe ist zu einfach und die Vorgehensweise Sie angenommen haben, ist sicherlich gut für den Job. Wenn Sie jedoch ein besseres Design zu verwenden möchten, müssen Sie loswerden all diese Zahl Bewegung besser werden Sie eine FIFO-Warteschlange verwenden und eine gute Verwendung von Push-und Pop-Methoden machen, die Art und Weise der Code wird nicht jede Datenbewegung widerspiegeln, sondern nur die beiden logischen Aktionen Von neuen Daten und entfernen Sie Daten, die älter als 7 Tage sind. Beantwortet Aug 30 11 at 14: 49Below können Sie meine C-Methode, um Bollinger Bands für jeden Punkt (gleitender Durchschnitt, up Band, down Band) zu berechnen. Wie Sie sehen können, verwendet diese Methode 2 für Schleifen, um die sich bewegende Standardabweichung mit dem gleitenden Durchschnitt zu berechnen. Es verwendete, eine zusätzliche Schleife zu enthalten, um den gleitenden Durchschnitt über den letzten n Perioden zu berechnen. Dieses konnte ich entfernen, indem ich den neuen Punktwert zu totalaverage am Anfang der Schleife addierte und den i - n Punktwert am Ende der Schleife entfernte. Meine Frage ist jetzt grundsätzlich: Kann ich die verbleibende innere Schleife in einer ähnlichen Weise, wie ich mit dem gleitenden Durchschnitt gehandhabt, gefragt, Jan 31 13 um 21:45 Die Antwort ist ja, können Sie. Mitte der 80er Jahre entwickelte ich einen solchen Algorithmus (wahrscheinlich nicht original) in FORTRAN für eine Prozessüberwachungs - und Steuerungsanwendung. Leider, das war vor über 25 Jahren und ich kann mich nicht erinnern, die genaue Formeln, aber die Technik war eine Erweiterung der eine für bewegte Durchschnitte, mit Berechnungen zweiten Ordnung anstelle von nur linear. Nach dem Betrachten des Codes einige, denke ich, dass ich suss heraus, wie ich es damals getan habe. Beachten Sie, wie Ihre innere Schleife macht eine Summe von Squares: in viel die gleiche Weise, dass Ihr Durchschnitt ursprünglich hatte eine Summe von Werten Die beiden einzigen Unterschiede sind die Reihenfolge (seine Macht 2 statt 1) ​​und dass Sie den Durchschnitt subtrahieren Jeder Wert, bevor Sie es quadrieren. Nun, die unzertrennlich aussehen könnte, aber in der Tat können sie getrennt werden: Nun ist das erste Wort nur eine Summe von Squares, behandeln Sie das auf die gleiche Weise, dass Sie die Summe der Werte für den Durchschnitt. Der letzte Term (k2n) ist nur der Durchschnitt quadratisch mal der Periode. Da Sie das Ergebnis durch die Periode ohnehin teilen, können Sie einfach die neue durchschnittliche quadriert ohne zusätzliche Schleife. Schließlich können im zweiten Term (SUM (-2vi) k), da SUM (vi) total kn, dann können Sie es in diese ändern: oder nur -2k2n. Die das zweifache des durchschnittlichen Quadratwinkels beträgt, sobald die Periode (n) erneut unterteilt ist. Also die endgültige kombinierte Formel ist: (achten Sie darauf, die Gültigkeit dieser zu überprüfen, da ich es Ableitung von der Spitze des Kopfes) Und Einbau in Ihren Code sollte so etwas aussehen: Vielen Dank für diese. Ich benutzte es als Grundlage für eine Umsetzung in C für die CLR. Ich entdeckte, dass in der Praxis können Sie so aktualisieren, dass newVar ist eine sehr kleine negative Zahl, und die sqrt fehlschlägt. Ich führte eine if, um den Wert auf Null für diesen Fall zu begrenzen. Nicht Idee, aber stabil. Dies trat auf, wenn jeder Wert in meinem Fenster den gleichen Wert hatte (ich benutzte eine Fenstergröße von 20 und der Wert in Frage 0,5 war, falls jemand es versuchen und reproduzieren will) ndash Drew Noakes Jul 26 13 at 15:25 Ive (Und dazu beigetragen, dass die Bibliothek) für etwas sehr ähnliches. Seine Open-Source, Portierung auf C sollte einfach sein, wie Laden-gekauft Pie (haben Sie versucht, einen Kuchen aus dem Nichts). Überprüfen Sie es: commons. apache. orgmathapi-3.1.1index. html. Sie haben eine StandardDeviation Klasse. Gehen Sie in die Stadt antwortete Jan 31 13 at 21:48 You39re willkommen Ich didn39t haben die Antwort you39re suchen. Ich definitiv didn39t bedeuten, vorzuschlagen, Portierung der gesamten Bibliothek Nur die mindestens erforderlichen Code, der ein paar hundert Zeilen oder so sein sollte. Beachten Sie, dass ich keine Ahnung, was juristische Copyright-Beschränkungen apache hat auf, dass Code, so dass you39d haben, um zu überprüfen, dass aus. Wenn Sie es verfolgen, hier ist der Link. So dass Abweichung FastMath ndash Jason Jan 31 13 am 22:36 Die meisten wichtigen Informationen wurde bereits oben gegeben --- aber vielleicht ist dies immer noch von allgemeinem Interesse. Eine winzige Java-Bibliothek zur Berechnung von gleitendem Durchschnitt und Standardabweichung finden Sie hier: githubtools4jmeanvar Die Implementierung basiert auf einer Variante der oben erwähnten Welfords-Methode. Methoden zum Entfernen und Ersetzen von Werten wurden abgeleitet, die für das Verschieben von Wert-Fenstern verwendet werden können. Smoothing Daten entfernt zufällige Variation und zeigt Trends und zyklische Komponenten Inhärent in der Sammlung von Daten über die Zeit genommen ist eine Form von zufälliger Variation. Es gibt Methoden zur Verringerung der Annullierung der Wirkung aufgrund zufälliger Variation. Eine häufig verwendete Technik in der Industrie ist Glättung. Diese Technik zeigt, wenn sie richtig angewendet wird, deutlicher den zugrunde liegenden Trend, saisonale und zyklische Komponenten. Es gibt zwei verschiedene Gruppen von Glättungsmethoden Mittelungsmethoden Exponentielle Glättungsmethoden Mittelwertbildung ist der einfachste Weg, um Daten zu glätten Wir werden zunächst einige Mittelungsmethoden untersuchen, z. B. den einfachen Mittelwert aller vergangenen Daten. Ein Manager eines Lagers möchte wissen, wie viel ein typischer Lieferant in 1000-Dollar-Einheiten liefert. Heshe nimmt eine Stichprobe von 12 Lieferanten zufällig an und erhält die folgenden Ergebnisse: Der berechnete Mittelwert oder Mittelwert der Daten 10. Der Manager entscheidet, diese als Schätzung der Ausgaben eines typischen Lieferanten zu verwenden. Ist dies eine gute oder schlechte Schätzung Mittel quadratischen Fehler ist ein Weg, um zu beurteilen, wie gut ein Modell ist Wir berechnen die mittlere quadratische Fehler. Der Fehler true Betrag verbraucht minus die geschätzte Menge. Der Fehler quadriert ist der Fehler oben, quadriert. Die SSE ist die Summe der quadratischen Fehler. Die MSE ist der Mittelwert der quadratischen Fehler. MSE Ergebnisse zum Beispiel Die Ergebnisse sind: Fehler und quadratische Fehler Die Schätzung 10 Die Frage stellt sich: Können wir das Mittel verwenden, um Einkommen zu prognostizieren, wenn wir einen Trend vermuten Ein Blick auf die Grafik unten zeigt deutlich, dass wir dies nicht tun sollten. Durchschnittliche Gewichtungen alle früheren Beobachtungen gleich In Zusammenfassung, wir sagen, dass die einfache Mittelwert oder Mittelwert aller früheren Beobachtungen ist nur eine nützliche Schätzung für die Prognose, wenn es keine Trends. Wenn es Trends, verwenden Sie verschiedene Schätzungen, die den Trend berücksichtigen. Der Durchschnitt wiegt alle früheren Beobachtungen gleichermaßen. Zum Beispiel ist der Durchschnitt der Werte 3, 4, 5 4. Wir wissen natürlich, dass ein Durchschnitt berechnet wird, indem alle Werte addiert werden und die Summe durch die Anzahl der Werte dividiert wird. Ein anderer Weg, den Durchschnitt zu berechnen, besteht darin, daß jeder Wert durch die Anzahl von Werten geteilt wird, oder 33 43 53 1 1.3333 1.6667 4. Der Multiplikator 13 wird als Gewicht bezeichnet. Allgemein: bar frac sum links (frac rechts) x1 links (frac rechts) x2,. ,, Links (frac rechts) xn. Die (links (frac rechts)) sind die Gewichte und summieren sich natürlich auf 1.


No comments:

Post a Comment