Beim Training mit einer partial_fit-Funktion in scikit learn erhalte ich den folgenden Fehler, ohne dass das Programm endet, wie ist das möglich und was sind die Rückwirkungen davon, obwohl sich das trainierte Modell korrekt verhält und korrekte Ergebnisse liefert. Ist das etwas, worüber man sich Sorgen machen muss?
%Vor%Ich verwende die folgende modifizierte Trainingsfunktion, da ich eine konstante Liste von labels \ classes pflegen muss, da partial_fit das Hinzufügen neuer Klassen \ labels bei nachfolgenden Läufen nicht erlaubt, die Klasse prior ist in jedem Batch von Trainingsdaten gleich:
%Vor%Auch beim zweiten Aufruf von partial_fit wird der folgende Fehler für die Klassenanzahl = 2000 ausgegeben, und die Trainingsbeispiele sind 3592 beim Aufruf von model = self.train (featureset, classes = labels, partially = partially):
%Vor%Wohin gehe ich aufgrund des Fehlers falsch? Bedeutet das, dass ich falsch dimensionierte Daten einlege? Ich habe versucht zu folgen, ich rufe jetzt an:
%Vor%jedes Mal, wenn die Teilanpassung aufgerufen wird. Früher habe ich FitTransform für jeden Teilanruf verwendet. Ist das richtig?
%Vor%Nach vielen Versuchen war es mir möglich, den folgenden Code zu bekommen, indem ich den ersten Aufruf verrechnete, aber ich hatte angenommen, dass die eingelegten Dateien des Klassifizierers nach jeder Iteration an Größe zunehmen würden, aber ich bekomme für jeden Stapel die gleiche PKL-Datei was nicht möglich ist:
%Vor%Hier ist der gesamte Code:
%Vor% Sie erhalten diese Warnung, weil RuntimeWarning
für 0 aufgerufen wird:
Das liegt daran, dass in einem Aufruf einige Klassen überhaupt nicht dargestellt werden (sie haben eine Zählung von 0) und daher wird np.log
auf 0 aufgerufen. Sie brauchen sich darüber keine Gedanken zu machen.
Ich verwende die folgende modifizierte Trainingsfunktion, da ich eine konstante Liste von labels \ classes pflegen muss, da partial_fit das Hinzufügen neuer Klassen \ labels bei nachfolgenden Läufen nicht erlaubt, die Klasse prior ist in jedem Batch der Trainingsdaten gleich / p>
np.log
verwenden. partial_fit
, dass Priors zu den Daten passen (im Grunde berechnen sie Frequenzen). Bei Verwendung von MultinomialNB
wird diese Berechnung inkrementell durchgeführt, sodass Sie dasselbe Ergebnis erhalten, als hätten Sie einen einzelnen partial_fit
-Aufruf verwendet. Auch beim zweiten Aufruf von partial_fit wird der folgende Fehler für die Klassenanzahl = 2000 ausgegeben und die Trainingsbeispiele sind 3592 beim Aufruf von model = self.train (featureset, classes = labels, partially = partially)
Hier brauchen wir mehr Details. Ich bin verwirrt, dass fit
von Form X
ist und doch in der Traceback von Form (n_samples, n_features)
zu sein scheint. Das bedeutet (2000,11430)
hat 2000 Samples.
Der Fehler bedeutet in der Tat, dass die Dimensionen Ihrer Eingaben inkonsistent sind. Ich würde vorschlagen, X
, X.shape
nach der Vektorisierung für jeden y.shape
-Aufruf zu drucken.
Sie sollten auch nicht partial_fit
oder fit
auf dem Vektorizer aufrufen, der fit_transform
für jeden X
Aufruf umwandelt: Sie sollten einmal anpassen und dann X transformieren Stellen Sie sicher, dass Sie konsistente Dimensionen für Ihr transformiertes X erhalten.
Hier ist der Code, den Sie uns mitgeteilt haben:
%Vor% Soweit ich das beurteilen kann, ist daran nicht viel falsch, aber wir brauchen wirklich mehr Kontext dafür, wie Sie es hier benutzen
Ein Nitpick: Ich denke, es wäre klarer, wenn Sie die Variable partial_fit
als Klassenattribut verwenden, da diese Variable für jeden classes
-Aufruf identisch sein muss.
Hier könnten Sie etwas falsch machen, wenn Sie dem Konstruktor partial_fit
Argument andere Werte übergeben.
Weitere Informationen, die uns helfen könnten:
classes
, _vectorizer
? Mit welchem Klassifikator arbeiten Sie letztendlich? Das Problem hier, glaube ich, kann in dem Fehler
gesehen werden %Vor% Beachten Sie die (2000,11430) (2000, 10728 ) (2000,11430), Sie liefern ein Dataset mit einer anderen Anzahl von Features, daher kann es die Anzahl der Features seit sie nicht bestimmen sind im zweiten Satz anders, und dies gibt den Fehler. Es zeigt nur den Fehler an und stürzt nicht ab, da der Fehler höchstwahrscheinlich in einem try catch
-Block abgefangen wird.
Wahrscheinlich möchten Sie der Funktion partial_fit
keine anderen Features (Attribute) geben. Ihr Algorithmus funktioniert immer noch, weil er auf die verbleibenden zwei Chuncks passt, aber der zweite Chunck wird höchstwahrscheinlich ignoriert.
Tags und Links python machine-learning scikit-learn