web-dev-qa-db-fra.com

Comment augmenter la précision du modèle de régression logistique en python Scikit?

J'essaie de prédire la variable d'admission avec des prédicteurs tels que gre, gpa et ranks.Mais la précision de prédiction est très inférieure (0,66). L'ensemble de données est donné ci-dessous. https://Gist.github.com/abyalias/3de80ab7fb93dcecc565cee21bd9501a

Veuillez trouver les codes ci-dessous:

 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]])

Ceux-ci prédisent à tort. Comment augmenter la précision du modèle?

10
Aby Mathew

Étant donné que l'apprentissage automatique consiste davantage à expérimenter les fonctionnalités et les modèles, il n'y a pas de bonne réponse à votre question. Certaines de mes suggestions seraient:

1. Mise à l'échelle et/ou normalisation des fonctionnalités - Vérifiez les échelles de vos fonctionnalités gre et gpa. Ils diffèrent sur 2 ordres de grandeur. Par conséquent, votre fonctionnalité gre finira par dominer les autres dans un classifieur comme la régression logistique. Vous pouvez normaliser toutes vos fonctions à la même échelle avant de les placer dans un modèle d'apprentissage automatique . This est un bon guide sur les différentes classes de mise à l'échelle et de normalisation des fonctionnalités disponibles dans scikit-learn.

2. Déséquilibre de classe - Recherchez un déséquilibre de classe dans vos données. Étant donné que vous travaillez avec des données d'admission/de rejet, le nombre de refus serait considérablement plus élevé que les admissions. La plupart des classificateurs de SkLearn, y compris LogisticRegression ont un class_weight paramètre. La définition de balanced peut également fonctionner correctement en cas de déséquilibre de classe.

3. Optimiser d'autres scores - Vous pouvez également optimiser d'autres mesures telles que Perte de journal et F1-Score. Le F1-Score pourrait être utile en cas de déséquilibre de classe. This est un bon guide qui en dit plus sur la notation.

4. Réglage des hyperparamètres - Recherche de grille - Vous pouvez améliorer votre précision en effectuant une recherche de grille pour régler les hyperparamètres de votre modèle. Par exemple, dans le cas de LogisticRegression, le paramètre C est un hyperparamètre. En outre, vous devez éviter d'utiliser les données de test lors de la recherche dans la grille. Effectuez plutôt une validation croisée. Utilisez vos données de test uniquement pour rapporter les chiffres définitifs de votre modèle final. Veuillez noter que GridSearch doit être effectué pour tous les modèles que vous essayez, car vous seul pourrez alors dire ce que vous pouvez obtenir de mieux pour chaque modèle. Scikit-Learn fournit la classe GridSearchCV pour cela. This article est également un bon point de départ.

5. Explorez plus de classificateurs - La régression logistique apprend une surface de décision linéaire qui sépare vos classes. Il est possible que vos 2 classes ne soient pas linéairement séparables. Dans un tel cas, vous devrez peut-être regarder d'autres classificateurs tels que Prise en charge des machines vectorielles qui sont capables d'apprendre des limites de décision plus complexes . Vous pouvez également commencer à regarder les classificateurs basés sur des arbres tels que Arbres de décision qui peuvent apprendre les règles de vos données. Considérez-les comme une série de règles If-Else que l'algorithme apprend automatiquement à partir des données. Souvent, il est difficile d'obtenir le bon compromis de variation de biais avec les arbres de décision, donc je vous recommande de regarder Forêts aléatoires si vous avez une quantité considérable de données.

6. Analyse des erreurs - Pour chacun de vos modèles, revenez en arrière et examinez les cas où ils échouent. Vous pourriez finir par constater que certains de vos modèles fonctionnent bien sur une partie de l'espace des paramètres tandis que d'autres fonctionnent mieux sur d'autres parties. Si tel est le cas, alors les techniques Techniques d'ensemble telles que VotingClassifier donnent souvent les meilleurs résultats. Les modèles qui remportent des compétitions Kaggle sont souvent des modèles d'ensemble.

7. Plus de fonctionnalités _ Si tout cela échoue, cela signifie que vous devriez commencer à chercher plus de fonctionnalités.

J'espère que cela pourra aider!

51
Abhinav Arora