1

Ich habe Probleme mit dem richtigen Aufruf von Scikits logistischer Regression für den Mehrklassenfall. Ich benutze den lbgfs Solver, und ich habe den multi_class Parameter auf Multinomial gesetzt.Mehrklassenlogistische Regression in SciKit Learn

Es ist mir unklar, wie die zutreffenden Klassenbeschriftungen beim Anpassen des Modells übergeben werden. Ich hatte angenommen, dass es ähnlich/wie für die Random Forest Classifier Multiklasse, wo Sie [n_samples, m_classes] Dataframe übergeben. Dadurch bekomme ich jedoch einen Fehler, dass die Daten eine schlechte Form haben. ValueError: schlechte Eingabeform (20, 5) - in diesem winzigen Beispiel gab es 5 Klassen, 20 Beispiele.

Bei der Überprüfung der Dokumentation für die Fit-Methode heißt es, dass die Wahrheitswerte als [n_samples,] übergeben werden - was dem Fehler entspricht, den ich bekomme - aber ich habe keine Ahnung, wie man das Modell dann trainiert mehrere Klassen. Also, das ist meine Frage: Wie übertrage ich den ganzen Satz von Klassenbezeichnungen an die Fit-Funktion?

Ich konnte Beispielcode im Internet nicht finden, um modellieren, noch diese Frage auf StackOverflow .. aber ich bin sicher, dass jemand wissen muss, wie es geht!

in dem folgenden Code, train_features = [N_SAMPLES, nn_features], truth_train = [N_SAMPLES, m_classes]

clf = LogisticRegressionCV(class_weight='balanced', multi_class='multinomial', solver='lbfgs') 
clf.fit(train_features, truth_train) 
pred = clf.predict(test_features) 

Antwort

4

Sie scheinen verwirrend Begriffe mehrklassige und Multilabelhttp://scikit-learn.org/stable/modules/multiclass.html, kurz zu sein:

  • Multiclass classification means a classification task with more than two classes; e.g., classify a set of images of fruits which may be oranges, apples, or pears. Multiclass classification makes the assumption that each sample is assigned to one and only one label: a fruit can be either an apple or a pear but not both at the same time.

Somit Daten [n_samples, n_features] und Etiketten sind [n_samples]

  • Multilabel classification assigns to each sample a set of target labels. This can be thought as predicting properties of a data-point that are not mutually exclusive, such as topics that are relevant for a document. A text might be about any of religion, politics, finance or education at the same time or none of these.

So Daten [n_samples, n_features] und Etiketten sind [n_samples, n_labels]

Und Sie scheinen für Multilabel suchen werden (wie für mehrklassige Etiketten sollten 1-dim). Zurzeit sind in sklearn die einzigen Methoden, die Multilabel unterstützen,: Entscheidungsbäume, zufällige Wälder, nächstgelegene Nachbarn, Ridge-Regression.

Wenn Sie multlabel Problem mit diffent Modell lernen, verwenden Sie einfach OneVsRestClassifier als Multilabel-Wrapper um Ihre Logistische Regression

http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier

+0

Dank für Ihre Antwort danken. Ich suche eigentlich nach Multi-Klasse, das heißt, jede Probe ist nur einer Klasse. ABER, was ich mit der Gesamtstruktur gemacht hatte, war, die Klassenzuweisungen in boolesche Arrays umzuwandeln, und so kam ich zum n x m Array. Also, wenn ich Sie richtig verstehe, sollte ich meine Klassenbezeichnungen in Ganzzahlen konvertieren und ein einzelnes n_sample long-Array erstellen, in dem die Werte, die es annehmen kann, den verschiedenen Klassenbezeichnungen zugeordnet werden. Ist das korrekt? Danke für Ihre Hilfe. –

+0

Ja, und Sie sollten das gleiche mit Bäumen tun. Andernfalls passen Sie stattdessen das Multilabel-Modell an. – lejlot

+0

@lejlot Ich habe Scikit logistische Regression für Multi-Vorhersage von Skalaren verwendet. Antwort von dukebody in https://stackoverflow.com/questions/36760000/python-how-to-use-multinomial-logistic-regression-using-sklearn funktioniert auch für mich. Vielleicht habe ich deine Antwort missverstanden? –

Verwandte Themen