0

Ich habe ein Videospiele-Dataset mit vielen kategorischen Spalten. Ich habe alle diese Spalten binarisiert. Jetzt möchte ich eine Spalte (namens Rating) mit logistischer Regression vorhersagen, aber diese Spalten sind jetzt tatsächlich in 4 Spalten binarisiert (Rating_Everyone, Rating_Everyone10 +, Rating_Teen und Rating_Mature). So bewarb ich mich viermal die logistische Regression und hier ist mein Code:Wie binäre Klasse Logistische Regression mit Python

df2 = pd.read_csv('../MQPI/docs/Video_Games_Sales_as_at_22_Dec_2016.csv', encoding="utf-8") 
y = df2['Rating_Everyone'].values 
df2 = df2.drop(['Rating_Everyone'], axis=1) 
df2 = df2.drop(['Rating_Everyone10'], axis=1) 
df2 = df2.drop(['Rating_Teen'], axis=1) 
df2 = df2.drop(['Rating_Mature'], axis=1) 
X = df2.values 
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.20) 

log_reg = LogisticRegression(penalty='l1', dual=False, C=1.0, fit_intercept=False, intercept_scaling=1, 
          class_weight=None, random_state=None, solver='liblinear', max_iter=100, 
          multi_class='ovr', 
          verbose=0, warm_start=False, n_jobs=-1) 
log_reg.fit(Xtrain, ytrain) 
y_val_l = log_reg.predict(Xtest) 
ris = accuracy_score(ytest, y_val_l) 

print("Logistic Regression Rating_Everyone accuracy: ", ris) 

Und wieder:

y = df2['Rating_Everyone10'].values 
df2 = df2.drop(['Rating_Everyone'], axis=1) 
df2 = df2.drop(['Rating_Everyone10'], axis=1) 
df2 = df2.drop(['Rating_Teen'], axis=1) 
df2 = df2.drop(['Rating_Mature'], axis=1) 
X = df2.values 
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.20) 

log_reg = LogisticRegression(penalty='l1', dual=False, C=1.0, fit_intercept=False, intercept_scaling=1, 
          class_weight=None, random_state=None, solver='liblinear', max_iter=100, 
          multi_class='ovr', 
          verbose=0, warm_start=False, n_jobs=-1) 
log_reg.fit(Xtrain, ytrain) 
y_val_l = log_reg.predict(Xtest) 
ris = accuracy_score(ytest, y_val_l) 

print("Logistic Regression Rating_Everyone accuracy: ", ris) 

Und so weiter für Rating_Teen und Rating_Mature. Können Sie mir sagen, wie Sie all diese vier Ergebnisse zu einem Ergebnis zusammenführen ODER Wie kann ich dieses multiklassische logistische Regressionsproblem besser lösen?

Antwort

1

Das LogisticRegression Modell ist von Natur Griff mehrklassige Probleme:

Im Folgenden eine Zusammenfassung der von Scikit-Learn unterstützt Klassifizierer ist durch Strategie gruppiert; Sie nicht über die Meta-Schätzer in dieser Klasse müssen wenn Sie eine dieser verwenden, es sei denn, Sie

Verhalten benutzerdefinierte Klassenkombinationen wollen: Von Natur aus mehrklassige: Naive Bayes, LDA und QDA, Entscheidung Bäume, Zufällige Wälder, Nächste Nachbarn, Einstellung multi_class = 'multinomial' in sklearn.linear_model.LogisticRegression.

Als Basismodell ohne Klasse Gewichtung (wie Sie tun müssen, können Proben über die Ratings werden nicht ausgeglichen) eingestellt multi_class='multinomial' und den Solver der anderen Solver zu 'lbfgs' oder ein ändern, die mehrklassige Probleme unterstützen :

Für mehrklassige Probleme, nur 'newton-cg', 'sag' und 'LBFGS' Griff multinomial Verlust; 'Liblinear' ist auf One-versus-Rest-Schemata beschränkt.

Sie müssen also Ihre Datensätze nicht so aufteilen, wie Sie sie haben. Stellen Sie stattdessen die ursprüngliche Bewertungsspalte als die Etiketten bereit.

Hier ist ein minimales Beispiel:

X = np.random.randn(10, 10) 
y = np.random.randint(1, 4, size=10) # 3 classes simulating ratings 
lg = LogisticRegression(multi_class='multinomial', solver='lbfgs') 
lg.fit(X, y) 
lg.predict(X) 

Edit: Antwort auf einen Kommentar.

td; lr: Ich erwarte, dass das Modell diese Interaktion selbst lernen wird. Wenn nicht, könnten Sie diese Information als Feature kodieren. So gibt es keine offensichtliche Notwendigkeit, Ihre Klassen zu binärisieren.

Die Art, wie ich es verstehe, dass Sie Funktionen eines Films haben und Sie haben die MPAA-Bewertung für den Film als das Label (das Sie versuchen, vorherzusagen). Dies ist dann ein Multiklassenproblem, mit dem Sie mit der logistischen Regression (das wissen Sie) modellieren können. Dies ist das Modell, das ich oben vorgeschlagen habe.

Jetzt haben Sie erkannt, dass es einen impliziten Abstand zwischen den Klassen gibt. Die Art, wie ich diese Informationen verwenden würde, ist eine Funktion für das Modell.Allerdings würde ich zunächst geneigt sein zu sehen, dass das Modell das alleine lernen wird.

+0

Zunächst einmal danke für Ihre Antwort. Ich habe ein bisschen Dubt über: 'So müssen Sie Ihre Datensätze nicht aufteilen, wie Sie haben. Geben Sie stattdessen die ursprüngliche Bewertungsspalte als Beschriftung ein. " Wenn ich dies tue, stelle ich keine implizite Verbindung zwischen den Bewertungsklassen (E, E10 +, T und M) her, wobei E E10 am nächsten ist, aber weit von M entfernt ist (etc.)? Danke nochmal – Falkons

+0

sehe meine bearbeitete Antwort – putonspectacles

Verwandte Themen