|
GMS |

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 03.01.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.01.2008, 16:05
Titel: Ausreisser eleminieren
|
 |
hallo zusammen,
ich möchte aus einer messreihe ausreisser eleminieren und anschließend den mittelwert berechnen lassen. so weit liefert mir matlab in der help funktion auch wertvolle tips.
leider habe ich noch nicht herausgefunden, wie ich die veränderung nicht in einer neuen variable sondern in meinem datensatz selbst verändern kann.
hier mein bisheriger code:
"function y=ausreisser2(x); % x ist sollte mein Datensatz sein
y=x(:,2); % das y sollte hinterher wieder die 2. spalte in meinem datensatz sein.
mu=mean(y)
sigma=std(y)
[m,n]=size(y);
MeanMat=repmat(mu,m,1);
SigmaMat=repmat(sigma,m,1);
outlier=abs(y - MeanMat) > 3*SigmaMat;
y(any(outlier,2),: )=[];
muNeu=mean(abs(y))
sigmaNeu=std(abs(y))
plot(y);"
vielen dank für eure unterstützung.
|
|
|
|
|
Babel42 |

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 05.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.01.2008, 17:25
Titel:
|
 |
wenn ich dich richtig verstehe, gibst du deinen gesamten Datensatz an die Funktion. Dann mußt du ihn wohl auch wieder zurückgeben. Du könntest z.B eine neue Variable definieren:
function neueVar=ausreisser2(x);
...
neueVar(:,1)=x(:,1);
neueVar(:,2)=y;
oder du ersetzt überall dein y durch x(:,2) und sagst dann zum Schluss
y=x;
das wird aber nur funktionieren, wenn die länge deines y-Vektors nicht verändert wird, also gleich der spaltenlänge deines x bleibt
Ich hoff ich hab dein Quelltext richtig verstanden
grüße
_________________
„I think the problem, to be quite honest with you, is that you've never actually known what the question is.“
|
|
|
GMS |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 03.01.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.01.2008, 20:54
Titel:
|
 |
Erstmal vielen Dank für deine rasche antwort.
kann sein das es die an einem langen tag gelegen hat aber ich komm mit deinen vorschlägen nicht so ganz zurecht.
"function neueVar=ausreisser3(x);
y=x(:,2);
mu=mean(y)
sigma=std(y)
[m,n]=size(y);
MeanMat=repmat(mu,m,1);
SigmaMat=repmat(sigma,m,1);
outlier=abs(y - MeanMat) > 3*SigmaMat;
y(any(outlier,2), =[0];
muNeu=mean(abs(y))
sigmaNeu=std(abs(y))
neueVar(:,1)=x(:,1);
neueVar(:,2)=y;"
hast du das so gemeint? ich bekomme auch so keine neue Variable ausgegeben. da ich mit der funktion ca 150 datensätze korrigieren möchte, wäre es ausserdem nicht schlecht, wenn der alte .mat filename erhalten bleiben könnte.
Vielen Dank.
|
|
|
Babel42 |

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 05.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.01.2008, 09:43
Titel:
|
 |
Ich glaub ich habe dein quelltext nicht richtig überblickt. du ziehst einen Vektor y aus deinem Datensatz. Aus diesem werden die ausreiser entfernt. also steht in y zum schluss der korrigierte Vektor?
wenn das so ist muß der ja nur noch aus der funktion zurück übergeben werden (zusammen mit dem teil von x, welchen du noch benötigst) das sollte in neueVar drin stehen.
grüße
_________________
„I think the problem, to be quite honest with you, is that you've never actually known what the question is.“
|
|
|
GMS |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 03.01.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2008, 21:12
Titel:
|
 |
tja, ich glaub ich habe das ist eher ein generelles problem aus functionen was im workspace zu verändern. denn ist y nicht nur eine temporäre variable, die nach beenden der function auch schon wieder weg ist?
ich denke ich muss das ganze eher noch in ein skript einbinden.
so nach dem motto:
"Var=aussreisser(Messung1);
Messung1(:,2)=Var;"
das ganze halt im workspace. oder hast du noch ne ansdere idee?
grüße
|
|
|
nschlange |

Ehrenmitglied
|
 |
Beiträge: 1.320
|
 |
|
 |
Anmeldedatum: 06.09.07
|
 |
|
 |
Wohnort: NRW
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 07.01.2008, 21:23
Titel:
|
 |
Hi,
ich hab die Problematik noch nicht ganz verstanden, aber eine
Möglichkeit, den Gültigkeitsbereich einer Variable über die Grenzen
einer Funktion hinaus zu erweitern ist
global
Ist aber eher eine 'Notlösung'.
_________________
Viele Grüße
nschlange
"Chuck Norris ejakuliert fluessigen Stahl!"
|
|
|
Michaela |

Forum-Century
|
 |
Beiträge: 239
|
 |
|
 |
Anmeldedatum: 12.07.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: bis 2007b
|
 |
|
|
 |
|
Verfasst am: 08.01.2008, 12:06
Titel:
|
 |
Liegen die Datensätze denn alle in mat files vor? Dann schreib dir doch eine schleife, die der Reihe nach jedes mat öffnet, die Korrektur vornimmt und wieder abspeichert. Um Fehler zu vermeiden, kannst Du die Ausgabe ja mit gleichem Dateinamen in einem anderen Verzeichnis machen, dann wird nichts aus versehen überschrieben.
_________________
---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
|
|
|
Babel42 |

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 05.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.01.2008, 12:16
Titel:
|
 |
Ja nschlange hat schon eine Möglichkeit benannt. du kannst deine Variable am Anfang des Skrips und in der Funktion als 'global' definieren dann wird sie auch durch die Funktionen verändert. Ist aber nicht so vorteilig, da du ja mehrere Datensätze hast und nicht alle als global definieren willst
ansonsten rufst du die Funktion in einem Skript auf und übergibst doch deine Matrix mit dem Messdaten via:
var=aussreisser(Messung1); %Nun steht in Var die veränderten Messdaten
Messung1=Var;
ODER Messung1(:,2)=Var(:,2);
Du kannst auch gleich:
Messung1=aussreisser(Messung1)
schreiben
Du willst doch aber nur Spalte 2 verändern. Wenn du also Spalte 1 in der Funktion nicht brauchst, dann kannst du sie auch etwas umschreiben und nur die spalte 2 deiner Messdaten-Matrix übergeben.
Messung(:,2)= aussreiser(Messung(:,2));
Viel erfolg
Grüße
_________________
„I think the problem, to be quite honest with you, is that you've never actually known what the question is.“
|
|
|
steve |

Ehrenmitglied
|
 |
Beiträge: 2.029
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: Wien
|
 |
|
 |
Version: R2024a
|
 |
|
|
 |
|
Verfasst am: 08.01.2008, 15:28
Titel:
|
 |
Hi,
ich habe den Code noch nicht richtig verstanden...
Inwiefern werden denn deine Ausreisser eleminiert? Werden die Einträge gelöscht? Wenn ja, dann müssen die zugehörigen Wertepaare gelöscht werden.
Ansonsten probier es so, wie es Babel42 vorgeschlagen hat.
Wenn das vom Prinzip her funktioniert, kannst du versuchen Manuelas Vorschlag umzusetzen.
Gruß
Alex
PS: Verwendet doch bitte für die Code-Zeilen die Code-Umgebung - das erleichtert das Lesen ungemein
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
GMS |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 4
|
 |
|
 |
Anmeldedatum: 03.01.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.01.2008, 21:53
Titel:
|
 |
also ich habe die vorschläge von babel durchgeführt und es funktioniert.
vielen dank, dafür.
... und für die anderen vorschläge auch !!
mich würde jetzt noch der vorschlag von michaela mit der schleife interessieren.
die datensätze liegen im .mat vor, leider habe ich mit schleifen noch nicht so recht auseinandergesetzt.
|
|
|
Babel42 |

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 05.10.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.01.2008, 10:06
Titel:
|
 |
Hallo GMS,
ideal wäre es, wenn die Dateien alle den gleichen Namen hätten und durchnummeriert sind. So in etwa:
Messung1
Messung2 ... MessungX
dann würde es so in etwa funktionieren:
Es gab schon öfters Anfragen wegen dynamischen Dateinamen hier im Programmierung-Forum. Vielleicht findest du dort noch bessere Lösungen...
grüße
PS. zum Beispiel hier:
http://www.gomatlab.de/dynamischer-.....rung-den-bilder-t338.html
_________________
„I think the problem, to be quite honest with you, is that you've never actually known what the question is.“
|
|
|
Michaela |

Forum-Century
|
 |
Beiträge: 239
|
 |
|
 |
Anmeldedatum: 12.07.07
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: bis 2007b
|
 |
|
|
 |
|
Verfasst am: 09.01.2008, 12:58
Titel:
|
 |
|
 |
|
GMS hat Folgendes geschrieben: |
mich würde jetzt noch der vorschlag von michaela mit der schleife interessieren.
die datensätze liegen im .mat vor, leider habe ich mit schleifen noch nicht so recht auseinandergesetzt. |
Hallo GMS,
hier eine Skizze, wie es aussehen könnte:
Es gibt ein Verzeichnis c:\input und ein Verzeichnis c:\output bzw beliebig anders benannt
Da Du Mat-files einlädst und abspeicherst, ist es wichtig, dass die Variablen in Deinem FUnktionsaufruf alle anders benannt sind als in dem *.mat file, damit es nicht zu Konflikten kommt. Daher habe ich alle Variabeln hier mal mit dem Suffix KONVERTIERUNG_ versehen
Soweit erstmal als Vorschlag. Eventuell ist es leichter, wenn Du die load und save Befehle gleich in deinen FUnktionsaufruf integrierst (dann hast Du innerhalb der FUnktion ohnehin einen sauberen Workspace, und musst Dich nicht so sehr um doppeltes Variablen-Bennenn kümmern, und deiner FUnktion einfach nur den Dateinamen als string übergibst.
Bin heut krank daheim und sicher noch öfter im Internet. Bei Rückfragen einfach melden.
_________________
---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
|
|
|
irvine |

Forum-Newbie
|
 |
Beiträge: 1
|
 |
|
 |
Anmeldedatum: 21.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.06.2008, 18:44
Titel:
|
 |
Kennt jemand eine Möglichkeit eine auf einer Distanzmatrix basierende "Outlier - Detection" vorzunehmen? Habe nämlich keine Punkte im Raum, sondern nur eine symmetrische Distanzmatrix mit Diagonalen = 0.
Also erstmal danke für die "schnellen Antworten" und "großen Hilfen" hier . Hab jetzt selber was gefunden. Wens interessiert: Das Ding heißt ODIN und bassiert auf kNearestNeighbors, hängt aber von zwei Parametern k und t ab.
|
|
|
dim_ka |

Forum-Newbie
|
 |
Beiträge: 1
|
 |
|
 |
Anmeldedatum: 15.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.03.2010, 14:24
Titel:
|
 |
Hallo,
kann mir jemand helfen? Ich bin absolutes Noob in Matlab, möchte aber auch diese funktion nutzen. Ich habe eine Variable x.mat mit 3000 double-Werten. In der Datei sind auch solche Aussreiser drin.
Kann mir jemand Schritt für Schritt erklären, wie ich die eleminieren kann.
Ich habe schon versucht den Code aus dem 1. Beitrag auszuführen - Matlab schreibt
Zitat: |
Error in ==> ausreisser3 at 2
y=x(:,2); % das y sollte hinterher wieder die 2. spalte in meinem
datensatz sein. |
Danke im Voraus
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|