PDA

View Full Version : [Frage] 2.2.1 Loocv


TheWhiteRabbit
16-04-2007, 17:35
Hmm...

It is not even necessary to remove it, one can simply ignore the training set feature vector with a distance of zero to the feature vectore which is being classified.

Heißt das ich mach mal
Data = load('glass.data')
for i=1:length(Data)
function_BerechneProzente(Data,i)
end

und hier wäre dann das "i" die momentane Testreihe die ich ignoriere. Das heißt in der Funktion BerechneProzente setze ich die Euklidische Distanz für die Reihe i des Data-Arrays das übergeben wird auf 0 und die Reihe i selbst als Testreihe. Oder?

TheWhiteRabbit
16-04-2007, 18:50
k falls das der richtige weg ist, hab ich gleich ein zwei weitere fragen.

Als erstes hab ich 75 Trainigsdaten und 75 Testdaten.

in eine Funktion übergeb ich die Trainingsdaten und die Testdaten. Weiters die Spalten in denen die Features stehen(hier 1-4) und die Anzahl der Klassen. In diesem Fall drei.


%Übergabe des Trainingsets
%Testsets
% von k
%Anzahl der Klassen
%Spalten mit den Features
function percentage = process_error_percentage(trainset, testset, k, c, featureColumns)
Nun soll man aber eine Funktion Programmieren die auch für 2.2 geht.

Nun mach ich es wie schon oben gesagt. Ich nehme i als Testreihe und den Rest als Trainingsdaten.

Hier sind die Spalten in denen ich die Features habe nun 2-10. Also übergeb ich dies als Array. K nun weiS ich dass die ID und das Klassenmerkmal keine Features sind. Nun kann ich ja Euklidische Distanz ohne prob berechnen.

Wenn ich das ganze in 7 Klassen splitten soll, sollts auch kein prob sein, da hinten ja einfach der Zahl nach unterschieden wird.

AAAABER wenn ich zwischen Window und non Window unterscheiden muss, habe ich keine Ahnung wie ich das dieser Funktion am besten als Parameter übergebe. Da ja >4 und <4 unterschieden werden muss.

Natürlich könnt ich nen Integer Wert entscheiden lassen welcher "Modus" grad dran is. Nur dann is es doch wieder nicht allgemein oder?

Hüüülfe :D

buschti
17-04-2007, 10:56
Hmm...

It is not even necessary to remove it, one can simply ignore the training set feature vector with a distance of zero to the feature vectore which is being classified.

Heißt das ich mach mal
Data = load('glass.data')
for i=1:length(Data)
function_BerechneProzente(Data,i)
end

und hier wäre dann das "i" die momentane Testreihe die ich ignoriere. Das heißt in der Funktion BerechneProzente setze ich die Euklidische Distanz für die Reihe i des Data-Arrays das übergeben wird auf 0 und die Reihe i selbst als Testreihe. Oder?

Auf 0 setzen mußt Du nichts. Wenn Dein zu klassifzierender Feature-Vektor auch im Trainingsset enthalten ist, wird er klarerweise die Distanz 0 haben. Da Du den aber nicht mitzählen willst, ignorierst Du den 'feature vector with a distance of zero'.

LG
Sebastian (EFME-Tutor)

buschti
17-04-2007, 11:04
k falls das der richtige weg ist, hab ich gleich ein zwei weitere fragen.

Als erstes hab ich 75 Trainigsdaten und 75 Testdaten.

in eine Funktion übergeb ich die Trainingsdaten und die Testdaten. Weiters die Spalten in denen die Features stehen(hier 1-4) und die Anzahl der Klassen. In diesem Fall drei.


%Übergabe des Trainingsets
%Testsets
% von k
%Anzahl der Klassen
%Spalten mit den Features
function percentage = process_error_percentage(trainset, testset, k, c, featureColumns)
Nun soll man aber eine Funktion Programmieren die auch für 2.2 geht.

Nun mach ich es wie schon oben gesagt. Ich nehme i als Testreihe und den Rest als Trainingsdaten.

Hier sind die Spalten in denen ich die Features habe nun 2-10. Also übergeb ich dies als Array. K nun weiS ich dass die ID und das Klassenmerkmal keine Features sind. Nun kann ich ja Euklidische Distanz ohne prob berechnen.

Wenn ich das ganze in 7 Klassen splitten soll, sollts auch kein prob sein, da hinten ja einfach der Zahl nach unterschieden wird.

AAAABER wenn ich zwischen Window und non Window unterscheiden muss, habe ich keine Ahnung wie ich das dieser Funktion am besten als Parameter übergebe. Da ja >4 und <4 unterschieden werden muss.

Natürlich könnt ich nen Integer Wert entscheiden lassen welcher "Modus" grad dran is. Nur dann is es doch wieder nicht allgemein oder?

Hüüülfe :D

Du mußt ja nicht unbedingt eine Funktion process_error_percentage machen, wo du alles übergibst. Du kannst ja auch ein einfaches Skript machen, in dem Du in einer for-Schleife nacheinander jeden Feature-Vektor mit Deiner knn-Funktion klassifizierst.
Und für das 2-Klassen-Problem würd ich einfach in einer Vorverarbeitung die Klassenlabels von glass abändern (1-4 wird 1 und 5-7 wird 2).

LG
Sebastian (EFME-Tutor)

Swoncen
17-04-2007, 16:25
Ich hab eine Funktion, die nach kNN klassifiziert und eine Funktion, die sich die Fehlerrate ausrechnet. Der kNN Klassifikator rechnet sich nur aus, wohin der Datensatz am ehesten geht und beim Fehler berechnen kannst ja eine Entscheidungsvariable machen.