Was sind die Peak-Erkennung Algorithmen in Existenz Ich habe laute Daten, und ich möchte die Peak-Erkennung für diese Daten zu implementieren. Die Daten sind umgekehrt, eigentlich versuche ich, den Boden zu bestimmen. Hier ist eine Momentaufnahme der Daten in Excel. Ich mag es, beide Böden zu erkennen. Ich dachte über die Übergabe der Daten durch einen Tiefpaß-Filter und anschließend einen gleitenden Durchschnitt, wo ich die Spitzen zu bestimmen und innerhalb der gleitenden Durchschnitt habe ich eine andere Suche. Ich habe null DSP-Hintergrund ist dies nur ein gesunder Menschenverstand Ansatz. Ich möchte hören, was die Experten empfehlen. Ktuncer, gibt es eine Reihe von Methoden, die Sie hier verwenden können. Eine Methode, die ich empfehlen würde, ist eine diskrete Wavelet-Transformation (DWT) zu verwenden, und insbesondere auf die Daubechies Wavelet. Ich würde sagen, Daub-14 Daub-Tetra. Grundsätzlich, was Sie wirklich tun müssen, ist Trend Ihr Signal, und dann von dort aus, eine min oder max Pick. Das wird Ihre Ausreißer loswerden. Eine Daub-Tetra-Wavelet-Transformation kann Ihnen helfen, dies zu tun, und dies hilft vor allem, da Sie nicht wissen, die Art Ihres Signals. (Mit daub-14, können Sie genau darstellen Polynom-Signale von Grad 14 2 7, und es sieht aus wie Sie benötigen nicht mehr als das). Die Berechnung dieser Wavelet-Transformation komprimiert im Wesentlichen Ihre Energie in ein paar Hinweise. Diese Indikatoren stellen Gewichte auf Basisvektoren dar. Der Rest der Gewichte wird (idealerweise) nahe Null sein. Wenn Sie Geräusche in Ihrem Signal haben (wie Sie tun), diese Gewichte, die normalerweise Null waren, haben einige Gewichte jetzt, aber Sie können einfach null sie aus und verweigern Ihr Signal. Sobald dies abgeschlossen ist, können Sie dann eine einfache max min detect. Es gibt mehr Details beteiligt, können Sie mir eine E-Mail senden, wenn Sie diskutieren möchten, wie es zu implementieren. Ich habe ähnliche Arbeit auf diesem vor getan. EDIT: Hier sind einige Bilder, die Daub-Tetra Denoiser illustrieren: Ich bin kein Experte, aber hier ist, was ich tun würde: Du scheinst ein langsam schwankendes Signal zu haben, das mit Schwankungen überlagert ist. Die Spitzen, die Sie suchen, sind einige stärkere Schwankungen, also würde ich sie mit dem erkennen. Es sei X (T) Ihr Rohsignal. Nehmen Sie einen gleitenden Durchschnitt über eine geeignete Anzahl von Proben, um Y (t) einen glatten Träger zu erzeugen. Wenn Sie folgen, muss X-Y einen Nullwert haben. Berechnen Sie das Standardabweichungssigma von X-Y. Sie können Ihre Peaks erkennen, wenn (X-Y) (t) gt alpha mal sigma ist, wobei alpha typischerweise 2, 3, 4 ist. Ein Überschwingen oder ein Unterschreiten kann gezielt erkannt werden, indem der absolute Wert entfernt wird. Ist das, was Sie suchen Benutzer4749: Interessante Name :) Ok. Also ja, Sigma ist die Standardabweichung. Wir verwenden sie als Maß für die Fluktuationsamplitude. Auf Ihre Daten, sieht es ziemlich konstant über die Zeit, so zeigt es, dass es der richtige Ansatz ist. Die Logik bedeutet, dass ein Peak detektiert wird, wenn er größer als diese Fluktuationen ist, so dass wir bei der Detektion robust sind. Tun Sie MATLAB iw wir würden Ihr Signal haben, könnten wir zumindest die Spitze der Gipfel sehr leicht. Ndash Jean-Yves User4749 Grundsätzlich, was hier geschieht, wird Ihr Y (t) das 39trend only39 Signal sein. Auch Mittelwert. So, jetzt sind Sie subtrahieren den Durchschnitt Ihres Signals, aus dem Signal. Das ist der X (t) - Y (t) Teil. Also, was bleibt ist Ihr Lärm. Nun, (vorausgesetzt, Ihr Lärm ist Gaußscher), nehmen Sie Ihre std, ampsigmaamp. Betrachten wir nun alle Werte von abs (X (t) - Y (t)) gt 4sigma. Warum dies im Grunde bedeutet in Englisch, quotDiscard 99.99 aller Werte, die wahrscheinlich das Rauschen, und lassen Sie nur Werte nicht aufgrund von noisequot. Ndash Mohammad Feb 3 12 am 5:21 Peak-Erkennung hat eine ganze Reihe von Anwendungen, für 1D oder multidimensionale Signale. Hier sind ein paar Beispiele zeigen, wie vielfältig diese Signale und ihre Interpretationen eines Peaks werden können: Die ursprüngliche Plakate 1D Daten Hough Transformation eines Bildes, entspricht jeder Peak einer Zeile in der ursprünglichen Bild Autokorrelation eines Bildes, jeder Peak entspricht a Frequenz, die eine periodische Musterverallgemeinerte Kreuzkorrelation eines Bildes und einer Schablone enthüllt, entspricht jeder Peak einem Auftreten der Schablone im Bild (wir könnten daran interessiert sein, nur das beste Peak oder mehrere Peaks zu erfassen) Ergebnis der Filterung eines Bildes für Harris Ecken entspricht jeder Peak einer Ecke im Originalbild. Dies sind Definitionen und Erkennungstechniken von Spitzen, die ich getroffen habe - sicher gibt es andere, die ich entweder vergessen oder nicht wissen, und hoffentlich andere Antworten werden sie decken. Die Vorverarbeitungstechniken umfassen das Glätten und Denieren. Mohammads Antwort ist über Wavelets, und Sie können verschiedene Verwendungen von ihnen in der Dokumentation von Mathematicas WaveletThreshold (wo ich auch meine Beispiele von, übrigens). Dann suchen Sie nach Maxima. Abhängig von Ihrer Anwendung benötigen Sie nur die globalen Maxima (zB Bildregistrierung), einige lokale Maxima (zB Zeilendetektion) oder viele lokale Maxima (Keypoints-Erkennung): Dies kann iterativ geschehen und danach der höchste Wert in den Daten gesucht werden Löschen eines Bereichs um den ausgewählten Peak usw., bis der höchste verbleibende Wert unter einem Schwellenwert liegt. Alternativ können Sie die lokalen Maxima innerhalb einer bestimmten Nachbarschaftsgröße aussuchen und nur jene lokalen Maxima halten, deren Werte über einer Schwelle liegen - einige empfehlen, die lokalen Maxima basierend auf ihrer Distanz zum Rest der lokalen Maxima zu halten desto besser). Das Arsenal hat auch morphologische Operationen: Erweiterte Maxima und Top-Hat-Transformation können beide geeignet sein. Sehen Sie die Ergebnisse von drei dieser Techniken auf einem Bild, das für Harris-Ecken gefiltert wurde: Darüber hinaus versuchen manche Anwendungen, Peaks bei Sub-Pixel-Auflösung zu finden. Interpolation, die applikationsspezifisch sein kann, ist praktisch. Soweit ich weiß, gibt es keine silberne Kugel, und die Daten werden zeigen, welche Techniken am besten funktionieren. Es wird wirklich schön sein, mehr Antworten zu haben, esp. Kommen aus anderen Disziplinen. Wir brauchen ein Frühwarnsystem. Ich bin mit einem Server, der bekanntermaßen Performance-Probleme unter Last. Fehler werden in einer Datenbank zusammen mit einem Zeitstempel aufgezeichnet. Es gibt einige manuelle Eingriffsschritte, die genommen werden können, um die Serverbelastung zu verringern, aber nur, wenn jemand das Problem kennt. Angesichts einer Reihe von Fehlern, wie kann ich erkennen, der Beginn einer Spike in Fehlern (in Echtzeit) Wir können periodisch oder bei jedem Fehler auftreten. Wir kümmern uns nicht um gelegentliche Fehler, haben aber keine bestimmte Schwelle. Ich konnte nur jemanden benachrichtigen, wenn wir bekommen, sagen wir, drei Fehler in fünf Minuten, aber Im sicher Theres ein besserer Weg. Id mögen in der Lage sein, die Empfindlichkeit des Algorithmus auf der Grundlage der Rückkopplung aus den Sysadmins anzupassen. Für jetzt, theyd es wie es ziemlich empfindlich sein, obwohl wir wissen, dass wir einige falsche Positives erwarten können. Ich bin nicht ein Statistiker, die Im sicher ist offensichtlich, und die Umsetzung dieses muss relativ einfach mit unseren bestehenden Tools: SQL Server und old-school ASP JScript. Ich bin nicht auf der Suche nach einer Antwort im Code, aber wenn es zusätzliche Software benötigt, wird es wahrscheinlich nicht für uns arbeiten (obwohl ich unpraktisch, aber ideale Lösungen als Kommentar, für meine eigene Neugier willkommen). Ich habe 5 Monate seit Sie diese Frage gestellt, und hoffentlich haben Sie etwas herausgefunden. Im gehen, um ein paar verschiedene Vorschläge hier, in der Hoffnung, dass Sie einige Verwendung für sie in anderen Szenarien zu finden. Für Ihre Use-Case Ich glaube nicht, dass Sie auf Spike-Erkennung Algorithmen suchen müssen. So geht hier: Lets Beginn mit einem Bild der Fehler auf einer Zeitleiste: Was Sie wollen, ist eine numerische Indikator, ein Maß für, wie schnell die Fehler kommen. Und diese Maßnahme sollte dem Schwellenwert zugänglich sein - Ihre Sysadmins sollten in der Lage sein, Grenzen einzustellen, die kontrollieren, mit welchen Sensibilitätsfehlern zu Warnungen werden. Sie erwähnten Spikes, ist der einfachste Weg, um einen Spike ist es, ein Histogramm über alle 20-Minuten-Intervall zu ziehen: Ihre Sysadmins würde die Empfindlichkeit auf der Grundlage der Höhen der Bars, d. H. Die meisten Fehler tolerierbar in einem 20-Minuten-Intervall gesetzt. (An diesem Punkt können Sie sich fragen, ob die 20-Minuten-Fensterlänge kann nicht angepasst werden. Es kann, und Sie können die Fensterlänge als Definition des Wortes zusammen in der Phrase Fehler, die zusammen auftreten denken.) Was ist das Problem mit dieser Methode für Ihr bestimmtes Szenario Nun, ist Ihre Variable eine Ganzzahl, wahrscheinlich weniger als 3. Sie würde nicht Ihre Schwelle auf 1 setzen, da das nur bedeutet, jeder Fehler ist eine Warnung, die nicht benötigt einen Algorithmus. Also Ihre Auswahl für die Schwelle werden 2 und 3 sein. Dies gibt nicht Ihre sysadmins eine ganze Menge von feinkörnigen Kontrolle. Anstatt die Fehler in einem Zeitfenster zu zählen, müssen Sie die Anzahl der Minuten zwischen dem aktuellen und dem letzten Fehler verfolgen. Wenn dieser Wert zu klein wird, bedeutet dies, dass Ihre Fehler immer häufiger auftreten und Sie eine Warnung auslösen müssen. Ihre Sysadmins werden wahrscheinlich die Grenze bei 10 setzen (d. H. Wenn Fehler weniger als 10 Minuten auseinander liegen, sein ein Problem) oder 20 Minuten. Vielleicht 30 Minuten für ein weniger geschäftskritisches System. Diese Maßnahme bietet mehr Flexibilität. Im Gegensatz zu Maßnahme 1, für die es einen kleinen Satz von Werten, mit denen Sie arbeiten konnten, haben Sie jetzt eine Maßnahme, die eine gute 20-30 Werte bietet. Ihre Sysadmins haben daher mehr Spielraum für die Feinabstimmung. Es gibt einen anderen Weg, um dieses Problem zu nähern. Anstatt die Fehlerfrequenzen zu betrachten, kann es möglich sein, die Fehler vorherzusagen, bevor sie auftreten. Sie haben erwähnt, dass dieses Verhalten auf einem einzelnen Server aufgetreten ist, der Leistungsprobleme aufweist. Sie können bestimmte Key Performance Indicators auf dieser Maschine überwachen und ihnen sagen, wann ein Fehler auftritt. Genauer gesagt würden Sie CPU-Auslastung, Speicherverbrauch und KPIs in Bezug auf Disk I O betrachten. Wenn Ihre CPU-Nutzung 80 überschreitet, werden die Systeme verlangsamen. (Ich weiß, dass du gesagt hast, dass du keine Software installieren willst und sein wahres, dass du das mit PerfMon machen könntest.) Aber für die Leute, die hierher gekommen sind, gibt es kostenlose Tools, die es für dich tun werden, wie Nagios und Zenoss Um in einer Zeitreihe etwas über die Spike-Erkennung zu finden: Spike-Erkennung in einer Zeitreihe Das einfachste, was Sie tun sollten, ist, einen gleitenden Durchschnitt Ihrer Eingabewerte zu berechnen. Wenn Ihre Serie x1, x2 ist. , Dann würden Sie einen gleitenden Durchschnitt nach jeder Beobachtung als: Mk (1 - alpha) M alpha xk berechnen, wobei das Alpha bestimmt, wie viel Gewicht den letzten Wert von xk ergibt. Wenn Ihr neuer Wert sich zu weit von dem gleitenden Durchschnitt entfernt hat, zum Beispiel dann eine Warnung auslösen. Gleitende Durchschnitte sind nett, wenn Sie mit Realzeitdaten arbeiten. Aber vorausgesetzt, Sie haben bereits ein Bündel von Daten in einer Tabelle, und Sie wollen nur SQL-Abfragen dagegen ausführen, um die Spikes zu finden. Ich würde vorschlagen: Berechnen Sie den Mittelwert Ihrer Zeitreihe Berechnen Sie die Standardabweichung Sigma Isolieren Sie die Werte, die mehr als 2sigma über dem Mittelwert sind (Sie müssen möglicherweise anpassen, dass der Faktor 2) Mehr Spaß Zeug über Zeitreihen Viele real-world Zeitreihen weisen zyklisches Verhalten auf. Es gibt ein Modell namens ARIMA, die Ihnen hilft, diese Zyklen aus Ihrer Zeitreihe zu extrahieren. Gleitende Mittelwerte, die das zyklische Verhalten berücksichtigen: Holt und Winters suchte ich nach Online-Erkennungsalgorithmen. Und die meisten gefundenen akademischen Artikel, die über meinem Kopf sind. Sie können die Antwort halten, aber don39t meinen persönlichen quotsimplequot Test bestehen. Korrigieren Sie mich, wenn ich 39m falsch, aber ich don39t glaube, I39m auf der Suche nach einem Peak-Erkennung Algorithmus. Sobald die Fehler erreicht haben, scheint es, dass per Definition I39ve meine Chance verpasst, um das Schlimmste der Frage zu verbessern. Entschuldigt, wenn meine Verwendung von quotspikequot verwirrend war. Ich glaube, ich muss einen weiteren Anstieg der Fehler vorherzusagen oder einen großen Schritt zu identifizieren. Ndash dbenton Oct 25 12 at 15:26 1 für Statistische Prozesssteuerung, theres einige nützliche Informationen hier auf Schritt-Abfragung. Für SPC ist es nicht zu schwer, eine Umsetzung der Western Electric Rules oder der Nelson Rules zu schreiben. Machen Sie einfach einen USP im SQL-Server, der durch einen Datensatz iterieren und pingen jeden Punkt gegen die Regeln mit seinen benachbarten Punkten. Vielleicht summieren sich die Anzahl der Fehler pro Stunde (je nach Ihren Bedürfnissen). Diese Art von bezieht sich auf eine Frage, die ich auf Stack Overflow eine Weile zurück (habe nur penned eine schnelle Antwort, wenn es hilft): Statistical Process Control Charts in SQL Server 2008 R2
No comments:
Post a Comment