1

Mein Modell wirft Lernkurven auf, wie ich unten gezeigt habe. Sind das in Ordnung? Ich bin ein Anfänger und überall im Internet sehe ich, dass bei Trainingsbeispielen die Trainingsnote abnehmen und dann konvergieren sollte. Aber hier steigt der Trainingswert enter image description here und konvergiert dann. Deshalb würde ich gerne wissen, ob dies einen Fehler in meinem Code anzeigt/etwas mit meiner Eingabe falsch ist?Über die spezifischen Formen von Lernkurven

Okay, ich habe herausgefunden, was mit meinem Code nicht stimmt.

train_sizes , train_accuracy , cv_accuracy = lc(linear_model.LogisticRegression(solver='lbfgs',penalty='l2',multi_class='ovr'),trainData,multiclass_response_train,train_sizes=np.array([0.1,0.33,0.5,0.66,1.0]),cv=5) 

Ich hatte keinen Regularisierungsparameter für die logistische Regression eingegeben.

Aber jetzt,

train_sizes , train_accuracy , cv_accuracy = lc(linear_model.LogisticRegression(C=1000,solver='lbfgs',penalty='l2',multi_class='ovr'),trainData,multiclass_response_train,train_sizes=np.array([0.1,0.33,0.5,0.66,1.0]),cv=5) 

Die Lernkurve sieht in Ordnung.

enter image description here Kann mir jemand sagen, warum das so ist? mit Standardregistrierungsgrad erhöht sich der Trainingswert und mit niedrigerem Reg sinkt er?

Datendetails: 10 Klassen. Bilder in verschiedenen Größen. (Ziffernklassifikation - Ziffern der Straßenansicht)

+0

Ich vermute, dass Ihr Problem mit den von Ihnen verwendeten Daten zusammenhängt. Kannst du deine Daten beschreiben? Wie viele Klassen? Wie viele pro Klasse? Ich kann mir vorstellen, dass Ihre Daten vielleicht so aufgeteilt wurden, dass es schwierig war, ein gutes Modell zu lernen, um zwischen allen Klassen zu unterscheiden. – NBartley

+0

@NBartley Bitte überprüfen Sie die bearbeitete Frage. Vielen Dank! – MLnoob

+0

Haben Sie diesen Code mehrmals ausgeführt? War das jedes Mal so? – NBartley

Antwort

0

Aufbauend auf Alex 'Antwort sieht es so aus, als ob der Standard-Regularisierungsparameter für Ihr Modell die Daten ein wenig unterpreist, denn wenn Sie die Regularisierung lockern, sehen Sie "passendere" Lernkurven. Es spielt keine Rolle, wie viele Beispiele Sie bei einem Modell werfen, das unterlegt ist.

Was Ihre Bedenken betrifft, warum der Trainings-Score im ersten Fall steigt und nicht abnimmt - dies ist wahrscheinlich eine Folge der von Ihnen verwendeten Multiclass-Daten. Mit weniger Trainingsbeispielen haben Sie weniger Bilder von jeder Klasse (weil lc versucht, die gleiche Klassenverteilung in jeder Falte des Lebenslaufs zu behalten), also bei der Regularisierung (wenn Sie C = 1 Regularisierung nennen) Es ist schwieriger für Ihr Modell, einige der Klassen genau zu erraten.

2

Sie müssen genauer in Bezug auf Ihre Messwerte sein. Welche Messwerte werden hier verwendet?

Verlust im Allgemeinen bedeutet: weniger ist besser, während Score in der Regel bedeutet: höhere besser ist.

Dies bedeutet auch, dass die Interpretation Ihres Diagramms von den verwendeten Metriken während des Trainings und der Kreuzvalidierung abhängt.

+0

Können Sie bitte die bearbeitete Frage überprüfen? Vielen Dank! – MLnoob

1

Werfen Sie einen Blick auf die zugehörige Webseite von scipy: http://scikit-learn.org/stable/modules/learning_curve.html Die Punktzahl ist in der Regel ein gewisses Maß, die maximiert werden muss (ROCAUC, Genauigkeit, ...). Intuitiv können Sie erwarten, dass je mehr Trainingsbeispiele Sie sehen, desto besser wird Ihr Modell und desto höher ist die Punktzahl. Es gibt jedoch einige Feinheiten in Bezug auf Überanpassung und Unterausstattung, die Sie im Auge behalten sollten.