5

Ich versuche, die admit-Variable mit Prädiktoren wie gre, gpa und Rängen vorherzusagen. Aber die Vorhersagegenauigkeit ist sehr gering (0,66) .Das Dataset ist unten angegeben. https://gist.github.com/abyalias/3de80ab7fb93dcecc565cee21bd9501aWie erhöht man die Modellgenauigkeit der logistischen Regression in Scikit Python?

Bitte entnehmen Sie die folgenden Codes:

In[73]: data.head(20) 
Out[73]: 

    admit gre gpa rank_2 rank_3 rank_4 
0  0 380 3.61  0.0  1.0  0.0 
1  1 660 3.67  0.0  1.0  0.0 
2  1 800 4.00  0.0  0.0  0.0 
3  1 640 3.19  0.0  0.0  1.0 
4  0 520 2.93  0.0  0.0  1.0 
5  1 760 3.00  1.0  0.0  0.0 
6  1 560 2.98  0.0  0.0  0.0 

y = data['admit'] 
x = data[data.columns[1:]] 

from sklearn.cross_validation import train_test_split 
xtrain,xtest,ytrain,ytest = train_test_split(x,y,random_state=2) 

ytrain=np.ravel(ytrain) 

#modelling 
clf = LogisticRegression(penalty='l2') 
clf.fit(xtrain,ytrain) 
ypred_train = clf.predict(xtrain) 
ypred_test = clf.predict(xtest) 

In[38]: #checking the classification accuracy 
accuracy_score(ytrain,ypred_train) 
Out[38]: 0.70333333333333337 
In[39]: accuracy_score(ytest,ypred_test) 
Out[39]: 0.66000000000000003 

In[78]: #confusion metrix... 
from sklearn.metrics import confusion_matrix 
confusion_matrix(ytest,ypred) 

Out[78]: 
array([[62, 1], 
     [33, 4]]) 

diejenigen sind falsch predicting.How die Modellgenauigkeit zu erhöhen?

+1

Sie könnten mit der Optimierung des C-Parameters der logistischen Regression beginnen. Sie können auch verschiedene Klassifizierungsmethoden wie SVMs und Bäume ausprobieren. – geompalik

+2

Sie sollten nicht versuchen, die Genauigkeit Ihres Test-Sets zu optimieren. Sie sollten auf dem Trainingssatz optimieren und das Testset als Objektbewertung der Methode verwenden. Können Sie Ihre Antwort so bearbeiten, dass die Genauigkeitsquote basierend auf dem Trainingssatz angezeigt wird? – ncfirth

+0

Hallo, Genauigkeit basiert auf Trainingssatz hinzugefügt. –

Antwort

22

Da beim maschinellen Lernen mehr mit dem Experimentieren mit den Features und Modellen zu tun hat, gibt es keine richtige Antwort auf Ihre Frage. Einige meiner Vorschläge für Sie wäre:

1. Eigenschaft Skalierung und/oder Normalisierungs - Überprüfen Sie die Waage Ihres gre und gpa Funktionen. Sie unterscheiden sich in 2 Größenordnungen. Daher wird Ihre gre Funktion am Ende die anderen in einem Klassifikator wie Logistische Regression dominieren. Sie können alle Ihre Funktionen auf die gleiche Skalierung normalisieren, bevor Sie sie in ein maschinelles Lernmodell einfügen. This ist eine gute Anleitung zu den verschiedenen Skalierungs- und Normalisierungsklassen, die in scikit-learn zur Verfügung stehen.

2. Klassenungleichgewicht - Suchen Sie nach Klassenungleichgewicht in Ihren Daten. Da Sie mit der Annahme/Ablehnung von Daten arbeiten, wäre die Anzahl der Zurückweisungen wesentlich höher als die der angenommenen. Die meisten Klassifizierer in SkLearn einschließlich LogisticRegression haben einen class_weight Parameter. Die Einstellung auf balanced könnte auch im Falle eines Klassenungleichgewichts funktionieren.

3. Optimieren andere Partituren - Sie befinden sich auf andere Kennzahlen optimieren können auch wie Log-Verlust und F1-Score. Der F1-Score könnte im Falle eines Klassenungleichgewichts nützlich sein. This ist eine gute Anleitung, die mehr über das Scoring spricht.

4. Hyper Tuning - Grid Search - Sie können Ihre Genauigkeit verbessern, indem ein Gitter Suche abzustimmen Durchführung der Hyper Ihres Modells. Im Fall von LogisticRegression ist der Parameter C ein Hyperparameter. Außerdem sollten Sie die Verwendung der Testdaten während der Rastersuche vermeiden. Führen Sie stattdessen eine Kreuzvalidierung durch. Verwenden Sie Ihre Testdaten nur, um die endgültigen Zahlen für Ihr endgültiges Modell zu melden. Bitte beachten Sie, dass GridSearch für alle von Ihnen getesteten Modelle durchgeführt werden sollte, da dann nur Sie in der Lage sind zu sagen, was Sie von jedem Modell am besten erreichen können. Scikit-Learn stellt hierfür die Klasse GridSearchCV zur Verfügung. This Artikel ist auch ein guter Ausgangspunkt.

5. Weitere Klassifikatoren erkunden - Logistische Regression lernt eine lineare Entscheidungsfläche, die Ihre Klassen trennt. Es könnte möglich sein, dass Ihre 2 Klassen nicht linear trennbar sind. In einem solchen Fall müssen Sie möglicherweise andere Klassifikatoren wie Support Vector Machines betrachten, die komplexere Entscheidungsgrenzen lernen können. Sie können auch Baum-basierte Klassifizierer wie Decision Trees betrachten, die Regeln aus Ihren Daten lernen können. Stellen Sie sich diese als eine Reihe von If-Else-Regeln vor, die der Algorithmus automatisch aus den Daten lernt. Oft ist es schwierig, die richtigen Bias-Variance Tradeoff mit Decision Trees zu erhalten, also würde ich Ihnen empfehlen, Random Forests zu betrachten, wenn Sie eine beträchtliche Menge an Daten haben.

6. Fehleranalyse - Gehen Sie für jedes Ihrer Modelle zurück und sehen Sie sich die Fälle an, in denen sie versagen. Sie könnten am Ende feststellen, dass einige Ihrer Modelle auf einem Teil des Parameterraums gut funktionieren, während andere besser auf anderen Teilen arbeiten. Wenn dies der Fall ist, geben Ensemble Techniques wie VotingClassifier Techniken oft die besten Ergebnisse. Modelle, die Kaggle-Wettbewerbe gewinnen, sind oft Ensemble-Modelle.

7. Weitere Funktionen _ Wenn all dies fehlschlägt, bedeutet das, dass Sie nach mehr Funktionen suchen sollten.

Hoffe, dass hilft!

+0

Schöne Antwort. Könnten Sie bitte näher ausführen? Sie können auch andere Metriken wie Log Loss und F1-Score optimieren. Wie machen wir das? Ich schätze jede Hilfe! – renakre

+0

In Bezug auf 4. Hyperparameters Tuning, macht Bayesian Optimierung Menschen heute aufregend. Es soll das richtige Gleichgewicht zwischen Modellleistung und Anzahl der getesteten Hyperparameter-Kombinationen bieten. – tagoma

Verwandte Themen