Hallo,
ich habe folgende Aufgaben/Problemstellung:
Ich habe x verschiedene Signale, die zeitgleich aufgenommen werden. Die
Signale haben in gewisser Weise eine Abhängigkeit. Diese Abhängigkeit
kann aber nicht exakt in eine Formel gepackt werden. Es kann sich z.B.
um Wetterdaten wie: Temperatur, Grad der Bewölkung, Windgeschwindigkeit,
Windrichtung, Niederschlag etc. handeln.
Nun fällt einer der Sensoren, z.B. zur Messung der Temperatur T, für
einen Zeitraum t aus.
Für diesen Zeitraum t, für den die Messgröße T nun nicht vorliegt, soll
die Messgröße (in diesem Falle T) geschätzt werden.
In Betracht können ja verschiedene Dinge gezogen werden:
- bisheriger Verlauf der Messgröße T
- zukünftiger verlauf der Messgröße T (nicht immer möglich)
- Zusammenhang zwischen T und den restlichen Messgrößen, die ohne
Unterbrechung vorhanden sind
Mit welchen Methoden lassen sich diese Daten fusionieren, um den
fehlenden Signalabschnitt t der Temperatur T möglichst genau (d.h. mit
den Erkenntnissen/Erfahrungen der vorhanden/nachfolgenden Messdaten) zu
interpolieren/abzuschätzen.
Eignen sich hier z.B. künstliche neuronale Netze (KNN)? Wenn ja, welcher
Typ?
Welche anderen mathematischen Methoden lassen sich anwenden, um ein
solches Problem generell zu lösen?
Danke schonmal für Anregungen und Diskussionen
Servus, DerWolf
Kurz mal bei Google gesucht:
http://www.uh.edu/~bsorense/kalman.pdf
Damit sollte dir schon mal ein kleiner Einstieg gelingen.
p.s.: Du hast schon Recht mit deiner Frage. Die Grundlage des normalen
Kalman-Filters bzw. der ARMA-Modelle bildet ein lineares
Gleichungssystem. Du gehst also davon aus, dass dein zu schätzender
Prozess sich durch lineare Gleichungen beschreiben lässt.
Ja das stimmt schon. Ich bin auf dem Gebiet nun nicht so der Crack, aber
was ich mal gemacht habe: Mittels linearer Prädiktion kann man aus einem
vorhandenen Stück Signal Koeffizienten ermitteln. Mit denen kann man
dann das Signal, wenn es mal abgebrochen ist, fortführen mittels
digitaler Filtergleichung. Kurze Aussetzer eines Audiosignals kann man
so unhörbar ausgleichen. Einfach mal nach linearer Prädiktion suchen.
Was du suchst ist ein Prädiktor für die Temperatur als Funktion aller
zur Verfügung stehenden Messwerte. Um das praktisch umzusetzen kannst du
dir ein paar Variablen heraussuchen von denen du meinst sie enthalten
Information über die vorauszusagende Temperatur, z.B. die Temperatur 1
Tag zuvor, 1 Tag danach, vor einem Jahr, und die sonstigen aktuellen
Messwerte, und versuchen damit einen Prädiktor zu trainieren (z.B. ein
KNN, linear wird nicht gut funktionieren). Ob das verglichen mit
einfachen Methoden (Mittelwert zwischen Temperatur 1 Tag zuvor und 1 Tag
danach) viel bringt halte ich aber für zweifelhaft.
Ok, das mit der linearen Prädiktion sehe ich mir genauer an.
Aber ich will ja zusätzlich noch die Information aus mehreren
Datenströmen vereinen.
Nehmen wir an, ich messe die Temperatur T und die Bewölkung B. Nimmt B
zu, so sinkt die T (andere Einflüsse jetzt mal aussen vor gelassen).
Es exisitiert hier also ein Zusammenhang zwischen B und T.
Da die Veränderung der Bewölkung B aber nicht periodisch ist, denke ich,
ist es schwierig, das nur anhand von B vorherzusagen. Betrachte ich aber
T und weiß aus der Erfahrung, dass es einen Zusammenhang gibt, so kann
ich von T auf den Verlauf von B schließen (bzw. andersherum)
Fällt also Temp.Sensor aus, kann ich den weiteren Verlauf anhand der
Messung von B schätzen.
Nun, in diesem recht einfach Beispiel ist das ganze noch gut
Vorstellbar. Es sollen aber mehr Eingangsvariablen berücksichtigt
werden.
Auch weiß ich vorher noch nicht, wie die einzelnen Parameter
zusammenhängen. Das könnte man durch scharfes hinsehen natürlich
herausfinden (bis zu einem gewissen Grade).
Aber so eine Art lernendes System wäre schon toll.
@Andreas:
Das mit den KNN dachte ich auch schon, nur kenne ich mich damit noch
nicht gut genug aus um abschätzen zu können, ob sie für dieses Proble
geignet sind.
Wenn ich Möglichkeiten wie den von Dir genannten Mittelwert ausschließe
(weil ich z.B. nur einen Tag lang messe), wären dann KNN ein gutes
Mittel?
Andreas:
Könntest du vielleicht noch erläutern, warum du meinst, dass eine
lineare Prädiktion nicht funktioniere? Ist nicht kritisch gemeint,
sondern eher aus eigenem Interesse.
Gast1 schrieb:
> Könntest du vielleicht noch erläutern, warum du meinst, dass eine> lineare Prädiktion nicht funktioniere?
Ich glaube einfach nicht dass es man durch eine Linearkombination von
Variablen wie Niederschlagsmenge, Windrichtung usw. auf die Temperatur
kommt. So ein Zusammenhang sieht vielleicht so aus, "wenn starker Wind
von Westen kommt, dann ist es kälter"; das ist nicht linear.
DerWolf schrieb:
> Wenn ich Möglichkeiten wie den von Dir genannten Mittelwert ausschließe> (weil ich z.B. nur einen Tag lang messe), wären dann KNN ein gutes> Mittel?
Würde ich schon sagen, aber kommt auf die Daten an. Wenn es einen starke
Abhängigkeit zwischen den anderen Messdaten und der Temperatur gibt,
dann ist ein KNN meiner Meinung nach der vielversprechendste Ansatz.
Aber zu viel würde ich mir nicht erwarten. Wahrscheinlich wäre es
einfacher den Temperatursensor redundant auszulegen :)
Ok, da gebe ich dir volkommen Recht. Jedoch denke ich, dass der Aufwand
für ein KNN deutlich höher ist als für einen linearen Prädiktor. Wenn
ich da irre, korrigiere mich bitte.
Wie wäre es, die Temperatur aus den alten Temperaturwerten vor dem
Ausfall linear vorherzusagen und die anderen Messwerte nur für eine
Abschätzung des Fehlers der geschätzten Temperatur zu benutzen? Z.B.:
Die Temperatur stimmt erstmal ganz gut, dann ändert sich plötzlich der
Wind und es regnet. So ist es ja sehr wahrscheinlich, dass sich die
Temperatur stark ändert. Vielleicht solltest du dann einfach ehrlich
sein und einen Fehler ausgeben, bevor du versucht, da noch irgendwas
vorherzusagen.
Hallo,
also danke schonmal für die Hinweise.
Ich bin mit meiner Frage eher darauf aus, welches Prinzip der DSV hier
geeignet ist. Ich habe keine realen Sensoren die ich doppelt auslegen
möchte. Es geht wirklich darum, ein geeignetes Verfahren anzuwenden, um
die fehlenden Daten zu schätzen, und zwar, wie gesagt entweder aus dem
bisherigen Signalverlauf oder/und den anderen, parallel aufgenommenen
Daten.
Interessant ist meiner Meinung nach, wie lang die Datenlücken sind.
Ausfälle über Stunden kann man sicher gut rausrechnen. Einen
Datenausfall über eine Woche inter/extrapolieren geht sicher auch, aber
wie aussagekräftig ist dann so ein Verlauf? Wie lange hälst du alte
Daten vor? Ich würde versuchen nach ähnlichen Verläufen in der
Vergangenheit zu suchen und daraus die fehlenden Daten abzuleiten.
Ok,
also die suche nach ähnliche Mustern in der Vergangenheit ist gut. Die
Frage ist nur, wie man das am geschickestens automatisierrt (es handelt
sich um Datenmengen, die nicht von Hand machbar sind). umsetzt.
Irgendwie schwirren mir noch diese KNN im Kopf rum.
Meine Vorstellung von KNN:
1. Ich füttere das KNN mit Datenströmen, welche nicht i.O. sind. Hier
soll das KNN Zusammenhänge zwischen den verschiedenen Eingabedaten
herstellen und sich "merken"
2. Fehlt ein Abschnitt, soll das KNN mit seinem bisheringen Wissen (und
durch die Eingabe des Benutzers, des der Abschnitt fehlerhaft ist),
diesen Abschnitt rekonstruieren.
Wäre das so in etwa denkbar? Welche KNN eignen sich? Gibt es geeignete
fertige KNN (z.B. in Matlab), die man mit entsprechenden Daten
trainieren könnte?
MfG, DerWolf
Ich denke mit einem linearen Verfahren wird man nur stückweise stetige
Lösungen bekommen, niemals jedoch ein Gleichungssytem erhalten, um bei
jeder beliebigen Wettersituation einen fehlenden Parameter auszurechnen.
Dann müsste man schon eine Vielzahl von prägnanten Wettersituationen
herausnehmen und dabei jeweils die Abhängigkeit der Messwerte
untereinander ermitteln.
Ganz sicher lässt sich diese gewonnene Abhängigkeit nicht auf einen
anderen Ort übertragen (Wettergeschehen an einem Ort auzeichnen, offline
Parameter erzeugen und dann mehrere Messstationen damit speisen).
Kalman-Filter eignen sich super, um aus verrauschen Messsignalen eines
bekannten und exakt beschreibbaren Systems ein gutes Signal zu erhalten.
Das geht aber nur mit dem entsprechenden Apriori-Wissen über das System.
Beim Wetter ist das so ein Problem - man kann das nicht in eine Kiste
einsperren und mal alle Parameterabhängigkeiten durchprobieren.
Gerade bei längeren Aussetzern oder vorher unbekannten Eingangssignalen
sind gut trainierte Neuronale Netz stark (Beispiel: Temperatursensor
fällt bei Eisregen und Windstärke 10 aus. So ein Wetterphänomen ist
selten und daher im Vorfeld vermutlich als Kalman-Filter nicht
parametriebar).
Bei KNN:
Normalerweise macht man mit einem KNN zunächst eine Trainingshase durch
um die Abhängigkeiten der Parameter zu trainieren. Anschließend werden
Wertemuster angelegt und das KNN entscheidet sich dann mit Hilfe des
trainierten Musters, welcher Ausgabewert wohl passt.
Je mehr Muster trainiert werden, desto besser ist das Ergebnis.
@Mischu:
VIelen Dank für die ausführlichen Erläuterungen.
Das werde ich mich wohl mal in die KNN einarbeiten müssen/wollen.
Hast Du Erfahrungen mit KNNs und kannst einen Typ von KNN für diese Art
von Aufgabe empfehlen? Gibt es fertige Tool, mit denen man rumprobieren
kann, bevor man dann was passendes selber programmiert (ich muss sowas
immer erstmal ausprobieren, um die Funktionsweise besser verstehen zu
können ;) )
Grußl, DerWolf
Als NN würde ich dir Recurrent Cascade Correlation Networks empfehlen.
Also auf alle Fälle einen Netzwerktyp der sequientiell abhängige Muster
erlernen kann. Einfache NNs reichen nicht für deine Aufgabenstellung da
du dann eine enorm große Inputneuronenschicht benötigst um parallel alle
sequentiellen Muster anlegen zu können. Recurrente NNs dagegen haben
intern Verküpfungen von jedem Ausgang eines "Neurons" zu dessen oder
vorherigen Neuroneneingängen. Somit bildet sich eine Art von
"Gedächtnis" und das Netzwerk kann vom aktuell angeklegten Muster an der
Inputschicht Bezüge zu allen vorherig angelegten Mustern herstellen. Man
kann also das Netzwerk auf Muster in sequentiell angelegten Mustern am
Eingang trainieren. Also mal nach Recurrente NNs suchen. Das Recurrente
Cascade Correlation Network hat nun intern einen optimierten lernfähigen
Aufbau der Neuronen. Während der Trainingsphase des NNs wächst die
Anzahl an neuronen in den einzelnen Neuronenschichten. Alle
Neuronenschichten wachsen wie eine Kaskade und die neuronen einer
Schicht sind mit ihren Ausgängen auch mit den vorherigen
Neuronenschichten verknüpft, eg. recurrent verknüpft. Der Vorteil des
RCC NNs ist nun das es meist optimale Netzwerke kreiert, dh. während der
Tra8iningsphasen bildet sich ein Netzwerk das das gestellte Problem mit
optimal wenigen Neuronen bewältigen kann. Bei herkömmlichen NNs wird man
nach dem Training oft mit anderen Verfahren das Netzwek "komprimieren"
müssen. Ein weiterer Vorteil ist das man den Trainingsalgorithmus beim
RCC NN sehr leicht mit zb. GA/EAs (genetischen Algorithmen/Evolutions
Strategieen) aufbohren kann. Bei einem RCC NN wird während der
Trainingsphase, zum schon teilweise fertig trainierte NN, eine Gruppe
von neuen Kandidaten Neuronen so trainiert als wäre jedesd schon im NN
8integriert. Nach der Trainigsphase dieser Kandidatenneuronen selektiert
man das best angepasste Neuron und fügt es in das netzwerk endgültig
ein. Diese Selektion und die vorherige pseudozufällige Initialisierung
der Kandidatengruppe sind Prinzipien der Evolutionslehre, sprich
Genetische Algorithem und/oder Evolutionsstrategieren.
Mein Delphi Source zum RCC umfasst ca. 2500 Zeilen Source.
Gruß Hagen