An anderer Stelle in diesem Thread bietet user1149913 hervorragende Ratschläge (Definieren eines probabilistischen Modells) und Code für einen leistungsfähigen Ansatz (EM-Schätzung). Zwei Fragen müssen noch geklärt werden:
Wie gehe ich mit Abweichungen vom Wahrscheinlichkeitsmodell um (die in den Daten für 2011-2012 sehr deutlich und in den Unebenheiten der weniger geneigten Punkte etwas deutlich erkennbar sind)?
Identifizieren guter Startwerte für den EM-Algorithmus (oder einen anderen Algorithmus).
Verwenden Sie eine Hough-Transformation, um Nummer 2 zu adressieren . Dies ist ein Merkmalserkennungsalgorithmus, der zum Auffinden linearer Merkmalsabschnitte effizient als Radon-Transformation berechnet werden kann .
xyx , yin der Hough-Transformation. Wenn Merkmale in der ursprünglichen Zeichnung entlang einer gemeinsamen Linie oder nahe genug bei eins liegen, haben die Sammlungen von Kurven, die sie in der Hough-Transformation erzeugen, tendenziell einen gemeinsamen Schnittpunkt, der dieser gemeinsamen Linie entspricht. Indem wir diese Punkte mit der größten Intensität in der Hough-Transformation finden, können wir gute Lösungen für das ursprüngliche Problem ablesen.
Um mit diesen Daten zu beginnen, habe ich zuerst die Hilfsmittel (Achsen, Häkchen und Beschriftungen) und zum guten Teil die offensichtlich äußeren Punkte unten rechts ausgeschnitten und entlang der unteren Achse gestreut. (Wenn das Zeug nicht ausgeschnitten ist, funktioniert die Prozedur immer noch gut, aber es erkennt auch die Achsen, die Frames, die linearen Sequenzen von Ticks, die linearen Sequenzen von Labels und sogar die Punkte, die sporadisch auf der unteren Achse liegen!)
img = Import["http://i.stack.imgur.com/SkEm3.png"]
i = ColorNegate[Binarize[img]]
crop2 = ImageCrop[ImageCrop[i, {694, 531}, {Left, Bottom}], {565, 467}, {Right, Top}]
(Dies und der Rest des Codes befinden sich in Mathematica .)
Jedem Punkt in diesem Bild entspricht ein enger Kurvenbereich in der Hough-Transformation, der hier sichtbar ist. Sie sind Sinuswellen:
hough2 = Radon[crop2, Method -> "Hough"] // ImageAdjust
Dies verdeutlicht visuell den Sinn, in dem die Frage ein Linienclustering- Problem ist: Die Hough-Transformation reduziert sie auf ein Punktclustering- Problem, auf das wir jede beliebige Clustering-Methode anwenden können.
In diesem Fall ist die Clusterbildung so eindeutig, dass eine einfache Nachbearbeitung der Hough-Transformation ausreicht. Um Stellen mit der größten Intensität in der Transformation zu identifizieren, habe ich den Kontrast erhöht und die Transformation über einen Radius von etwa 1% verwischt: Das ist vergleichbar mit den Durchmessern der Diagrammpunkte im Originalbild.
blur = ImageAdjust[Blur[ImageAdjust[hough2, {1, 0}], 8]]
Durch Schwellenwertbildung wurde das Ergebnis auf zwei winzige Flecken eingegrenzt, deren Zentroide die Punkte mit der größten Intensität identifizieren: Diese schätzen die angepassten Linien.
comp = MorphologicalComponents[blur, 0.777]) // Colorize
0,777
Die linke Seite des Bildes entspricht einer Richtung von 0 Grad (horizontal), und wenn wir von links nach rechts schauen, vergrößert sich dieser Winkel linear auf 180 Grad. Wenn ich interpoliere, berechne ich, dass die beiden Blobs bei 19 bzw. 57,1 Grad zentriert sind. Wir können die Abschnitte auch an den vertikalen Positionen der Blobs ablesen. Diese Information liefert die Anfangsanpassungen:
width = ImageDimensions[blur][[1]];
slopes = Module[{x, y, z}, ComponentMeasurements[comp, "Centroid"] /.
Rule[x_, {y_, z_}] :> Round[((y - 1/2)/(width - 1)) 180., 0.1]
]
{19., 57.1}
Auf ähnliche Weise kann man die Abschnitte berechnen, die diesen Steigungen entsprechen, und diese Anpassungen ergeben:
(Die rote Linie entspricht dem winzigen rosa Punkt im vorherigen Bild und die blaue Linie entspricht dem größeren Aqua-Blob.)
Dieser Ansatz hat sich weitgehend automatisch mit dem ersten Problem befasst: Abweichungen von der Linearität verwischen die Punkte mit der größten Intensität, verschieben sie jedoch in der Regel nicht stark. Ehrlich gesagt tragen äußere Punkte während der gesamten Hough-Transformation zu einem niedrigen Rauschpegel bei, der während der Nachbearbeitungsvorgänge verschwindet.
An diesem Punkt kann man diese Schätzungen als Startwerte für den EM-Algorithmus oder für einen Likelihood-Minimierer (der bei guten Schätzungen schnell konvergiert) bereitstellen. Besser wäre es jedoch, einen robusten Regressionsschätzer wie iterativ gewichtete kleinste Quadrate zu verwenden . Es ist in der Lage , jedem Punkt ein Regressionsgewicht zuzuweisen . Niedrige Gewichte bedeuten, dass ein Punkt nicht zu einer Linie gehört. Nutzen Sie diese Gewichte, wenn Sie möchten, um jedem Punkt die richtige Linie zuzuweisen. Nachdem Sie die Punkte klassifiziert haben, können Sie gewöhnliche kleinste Quadrate (oder ein anderes Regressionsverfahren) für die beiden Punktgruppen separat verwenden.