Ich muss einen möglichst genauen Wert für die Helligkeit einer hauptsächlich stabilen Lichtquelle bei zwölf Leuchtkraftwerten erhalten. Der Sensor ist nicht perfekt, und das Licht kann gelegentlich heller oder dunkler "flackern", was ignoriert werden kann, weshalb ich Ausreißer erkennen muss (glaube ich?).
Ich habe hier einige Ansätze nachgelesen und kann mich nicht entscheiden, welchen Ansatz ich wählen soll. Die Anzahl der Ausreißer ist nie im Voraus bekannt und wird häufig Null sein. Flimmern ist im Allgemeinen eine sehr große Abweichung von der stabilen Helligkeit (genug, um sich wirklich mit einem Durchschnitt zu messen, der mit einem großen Geschenk aufgenommen wurde), aber nicht unbedingt.
Hier ist ein Beispielsatz von 12 Messungen zur Vollständigkeit der Frage:
295,5214, 277,7749, 274,6538, 272,5897, 271,0733, 292,5856, 282,0986, 275,0419, 273,084, 273,1783, 274,0317, 290,1837
Mein Bauchgefühl ist, dass es in diesem speziellen Set wahrscheinlich keine Ausreißer gibt, obwohl 292 und 295 etwas hoch aussehen.
Meine Frage ist also, was wäre hier der beste Ansatz? Ich sollte erwähnen, dass die Werte aus der euklidischen Entfernung der RG- und B-Komponenten des Lichts von einem Nullpunkt (schwarz) stammen. Es wäre programmatisch schmerzhaft, aber möglich, bei Bedarf auf diese Werte zurückzugreifen. Der euklidische Abstand wurde als Maß für die "Gesamtstärke" verwendet, da mich die Farbe nicht interessiert, sondern nur die Stärke der Ausgabe. Es besteht jedoch eine vernünftige Wahrscheinlichkeit, dass das von mir erwähnte Flackern eine andere RGB-Zusammensetzung aufweist als die übliche Ausgabe.
Im Moment spiele ich mit einer Funktion, die sich wiederholt, bis eine stabile Mitgliedschaft der zulässigen Maßnahmen erreicht ist durch:
- Ermitteln der Standardabweichung
- Wenn Sie alles außerhalb von beispielsweise 2 SDs in eine Ignorierliste aufnehmen
- Neuberechnung des Durchschnitts und der SD mit ausgeschlossener Ignorierliste
- Überlegen Sie anhand des neuen Durchschnitts und der SD erneut, wen Sie ignorieren möchten (bewerten Sie alle 12).
- Wiederholen, bis es stabil ist.
Gibt es irgendeinen Wert in diesem Ansatz?
Alle Kommentare dankbar angenommen!
quelle
Antworten:
Ausreißer in kleinen Proben können immer sehr schwierig zu erkennen sein. In den meisten Fällen würde ich sogar befürworten, dass ein "Ausreißer" -Wert möglicherweise nicht problematisch ist und der Ausschluss möglicherweise unangemessen ist, wenn Sie der Meinung sind, dass Ihre Daten nicht unverblümt beschädigt sind. Wahrscheinlich ist die Verwendung robuster statistischer Techniken sinnvoller und näher an einer Mittelweglösung. Sie haben eine kleine Stichprobe; Versuchen Sie, jeden Stichprobenpunkt zählen zu lassen. :) :)
In Bezug auf Ihren vorgeschlagenen Ansatz: Ich würde eine Normalitätsannahme für Ihre Daten mit einer 68-95-99.7-Regel nicht voreilig durchsetzen (wie Sie es anscheinend mit Ihrer heuristischen 2SD-Regel tun). Chebyshevs Ungleichung setzt ausnahmsweise eine 75-88,9-93,8-Regel voraus, die eindeutig weniger starr ist. Es gibt auch andere " Regeln "; Der Abschnitt Ausreißer identifizieren im Ausreißer- Lemma in Wikipedia enthält ein Bündel von Heuristiken.
Angesichts der Tatsache, dass Sie eine wirklich kleine Stichprobe haben, würde ich Ihnen raten, Daten nicht hastig auszuschließen, wenn Sie der Meinung sind, dass Ihre Stichprobe nicht offensichtlich beschädigt ist (ein Mensch mit einer Körpergröße von 9'4 "). Ihre" vermuteten Ausreißer "könnten unverfälschte Daten sein. Ihre Verwendung könnte Ihre Analyse eher unterstützen als schädigen.
quelle
Dixons Q-Test für Ausreißer in sehr kleinen Datensätzen scheint gut zu dieser Situation zu passen:
http://en.wikipedia.org/wiki/Dixon%27s_Q_test
http://www.chem.uoa.gr/applets/AppletQtest/Text_Qtest2.htm
quelle
Zeigen Sie auf die erste - es kann sich lohnen, zur RGB-Farbe zurückzukehren. Es ist selten gut, Daten wegzuwerfen, und die Größe des RGB-Vektors ist nicht die einzige Möglichkeit, die Helligkeit darzustellen. Die wahrgenommene Helligkeit ist unterschiedlich, ebenso wie der Wert im HSV.
Aber wenn Sie das beiseite legen und mit den Daten umgehen, die Sie haben, haben Sie darüber nachgedacht, dies als Klassifizierungsproblem anstatt als Modellierungsproblem zu definieren und maschinelles Lernen durchzuführen? Sie haben eine Eingabe, bei der es sich um einen Vektor mit 12 reellen Werten handelt (die Helligkeitswerte). Sie haben eine Ausgabe, die ein Vektor von 12 Binärwerten ist (1 = Inlier, 0 = Outlier). Holen Sie sich mehrere Sätze von Helligkeitsmesswerten und beschriften Sie sie selbst von Hand, um zu zeigen, welcher Helligkeitswert in jedem Satz ein Inlier / Ausreißer ist. Etwas wie das:
Führen Sie dann die gesamte Partie durch einen Klassifikator:
Und du bist fertig! Sie müssen sich nicht die Mühe machen, die "Regel" zu finden, die Lieferanten von Ausreißern trennt. Holen Sie sich einfach ein paar Datensätze, die sinnvoll aussehen, und lassen Sie die Maschine das für Sie tun :)
~~~
BEARBEITEN: Im Übrigen ähnelt Ihre vorgeschlagene Methode, bei der Sie iterativ einen Gaußschen Wert anpassen und dann jede Stichprobe mehr als 2 Standardabweichungen entfernt als Ausreißer klassifizieren, einem Erwartungsmaximierungsalgorithmus. Etwas wie das:
Wenn Sie diesen Weg gehen, lohnt es sich möglicherweise, nach EM-Algorithmen zu suchen und zu überprüfen, welche Annahmen Sie in Ihr Modell einbauen.
quelle