IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de variables quantitatives pour une régression logistique


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 63
    Points : 40
    Points
    40
    Par défaut Problème de variables quantitatives pour une régression logistique
    Bonjour,

    Je fais suite à une autre discussion car cela est un nouveau problème comme on me l'a indiqué.

    Je vous explique, avec le fichier en pièce jointe se nommant "Régression logistiquebis.py" (fichier ci contre : Régression logistiquebis.py), j'obtiens une tableau de régression logistique suivant :
    Nom : Régression logistiquebis.png
Affichages : 243
Taille : 13,1 Ko

    Je vous remets en cas ou le code ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import pandas as pd
    import numpy as np
    import statsmodels.api as sm
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import classification_report
    from matplotlib.colors import ListedColormap
    import seaborn as sns
     
    # Importer le dataset
    data = pd.read_csv("clients.csv")
     
    #Permets de classer les données (exemple le groupe sangin, le sexe...)
    data["Gender"] = data["Gender"].astype('category')
     
    #Supprimes les données inutiles
    data.drop(["User ID"],axis='columns',inplace=True)
     
     
    print(data.head())
    # on définit x et y
    #Mettre y = data["Gender"].cat.codes, si il est nécessaire de classer les données
    y = data["Gender"].cat.codes
    # on ne prend que les colonnes quantitatives
    x = data.select_dtypes(np.number)
     
     
     
    #Mise en place du modèle
    modele_logit = LogisticRegression(random_state = 0, solver='liblinear')
    modele_logit.fit(x,y)
    pd.DataFrame(np.concatenate([modele_logit.intercept_.reshape(-1,1),
                                 modele_logit.coef_],axis=1),
                 index = ["coef"],
                 columns = ["constante"]+list(x.columns)).T
    # on ajoute une colonne pour la constante
    x_stat = sm.add_constant(x)
    # on ajuste le modèle
    model = sm.Logit(y, x_stat)
    result = model.fit()
    print(result.summary())
    Ainsi, avec ce code, je mets en variable y des variables qualitatives (ici le sexe), et de l'autres côté (en x) je mets toutes les variables numériques.

    Cependant mon idée, serait d'estimer mon salaire en fonction de l'âge et de la variable "Purchased".

    Cependant, toutes ces variables sont des variables quantitatives. (cf fichier ci contre : Régression logistiquetiers.py)

    Je vous remets également le code ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    import pandas as pd
    import numpy as np
    import statsmodels.api as sm
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import classification_report
    from matplotlib.colors import ListedColormap
    import seaborn as sns
     
    # Importer le dataset
    data = pd.read_csv("clients.csv")
     
    #Permets de classer les données (exemple le groupe sangin, le sexe...)
    #data["Gender"] = data["Gender"].astype('category')
     
    #Supprimes les données inutiles
    data.drop(["User ID"],axis='columns',inplace=True)
    data.drop(["Gender"],axis='columns',inplace=True)
     
     
    print(data.head())
    # on définit x et y
    #Mettre y = data["Gender"].cat.codes, si il est nécessaire de classer les données
    #y = data["Purchased"]
    # on ne prend que les colonnes quantitatives
    #x = data.select_dtypes(np.number)
    x = data.iloc[:, [0, 1]].values
    y = data.iloc[:, -1].values
     
     
    #Mise en place du modèle
    modele_logit = LogisticRegression(random_state = 0, solver='liblinear')
    modele_logit.fit(x,y)
    pd.DataFrame(np.concatenate([modele_logit.intercept_.reshape(-1,1),
                                 modele_logit.coef_],axis=1),
                 index = ["coef"],
                 columns = ["constante"]+list(x.columns)).T
    # on ajoute une colonne pour la constante
    x_stat = sm.add_constant(x)
    # on ajuste le modèle
    model = sm.Logit(y, x_stat)
    result = model.fit()
    print(result.summary())
    Le problème lorsque j'exécute le code, vient de la partie (cf-image après le code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pd.DataFrame(np.concatenate([modele_logit.intercept_.reshape(-1,1),
                                 modele_logit.coef_],axis=1),
                 index = ["coef"],
                 columns = ["constante"]+list(x.columns)).T
    Nom : Erreur.png
Affichages : 201
Taille : 3,5 Ko

    Je vous mets également ci-après le jeux de donnnées : clients.xlsx

    Auriez-vous une idée pour que cela fonctionne lorsqu'on met des données quantitatives en y et en x, et dans les cas de figures auxquels je n'aurais pas pensé ? (En espérant avoir été clair)

    En vous remerciant par avance de votre aide.

    Cordialement

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Jma06 Voir le message
    Hello,
    En survolant (et sans chercher à comprendre car trop pointu pour moi)..
    Est ce qu'il ne manquerait pas une parenthèse à l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     columns = ["constante"]+list(x.columns)).T
    ?
    Bonjour,

    Non mais merci d'avoir essayer de l'aider, c'est le même partie de code entre les deux Régressions ("Régression logistiquebis" et "Régression logistiquetiers").

    Rectification de l'erreur, j'avais pas pris une partie de l'erreur.

    Voici l'erreur complète :

    Nom : Erreur.png
Affichages : 187
Taille : 4,9 Ko

    En vous remerciant de votre aide.

  3. #3
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par pun79 Voir le message
    Bonjour,

    Non mais merci d'avoir essayer de l'aider, c'est le même partie de code entre les deux Régressions ("Régression logistiquebis" et "Régression logistiquetiers").
    Oui désolé, j'ai répondu sans regarder plus haut.. my bad ... du coup j'ai viré mon post qui n'avait plus aucun sens.

    Pensez vous que ce puisse être une bonne idée, dans votre cas, de transformer les valeurs qualitatives en valeur numériques? Par exemple avec 0 pour Male et 1 pou Femaleou autre etc?
    Il y a, pour se faire, un module de preprocessing dans sklearn avec des "transformeurs d'encodage" preprocessing.OneHotEncoder(), preprocessing.LabeEncoder().. ( cf
    ).

    J'ai probablement encore répondu à coté.. mais bon votre code est chouette, j'apprend et j'avais envie de participer un peu
    Bonne soirée.

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    L'erreur semble claire pourtant :
    x est un array, et vous l'utiliser comme un dataframe.

    En même temps, pourquoi écrire ceci : x = data.iloc[:, [0, 1]].values, si le but après c'est de l'utilise comme un dataframe ? x = data.iloc[:, [0, 1]] vous renvoie un dataframe: ce n'est pas suffisant ensuite pour faire ce que vous avez à faire ?

    PS: il y a encore trop de code. Il faut réduire au maximum quand vous présentez un problème. A la fois le code, et à la fois les données d'exemple. Là perso, moi j'ai encore rien exécuté de mon côté, ce que je vous dit est à vue de nez. S'il y a une erreur, des données avec moins de 10 lignes suffisent pour nous la présenter ! Même si scientifiquement parlant, faire une régression linéaire sur 10 exemples n'a pas de valeurs, et bien c'est comme ca qu'on débogue. Et ca c'est à vous de le faire avant de poster des messages dans ce forum. Et ce pour 2 bonnes raisons : dans 1 cas sur 2, ce processus vous permettra de trouver vous même le bog. Et dans l'autre cas, vous aurez une réponse bien plus rapide, et bien plus pertinente à votre post.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Jma06 Voir le message
    Oui désolé, j'ai répondu sans regarder plus haut.. my bad ... du coup j'ai viré mon post qui n'avait plus aucun sens.

    Pensez vous que ce puisse être une bonne idée, dans votre cas, de transformer les valeurs qualitatives en valeur numériques? Par exemple avec 0 pour Male et 1 pou Femaleou autre etc?
    Oui dans l'absolue, l'idéeal serait de transformer le Male en 0 et Female en 1, j'y avais pensé mais pas encore effectuer car j'avais rencontrer ce problème.

    D'ailleurs, merci pour votre idée d'encodeur car j'avais trouvé une autre façon pour codé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.Gender = dataset.Gender.map({"Male": 1, "Female": 2})
    Je vous remercie d'ailleurs lg_53, j'ai compris l'erreur. Effectivement, j'ai transformé mon x en dataFrame, et cela fonctionne mieux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2019, 12h04
  2. Vraisemblance d'une régression logistique : variable explicative en -1/1
    Par bettyboop_my dans le forum Méthodes prédictives
    Réponses: 0
    Dernier message: 06/12/2015, 15h08
  3. problème de syntaxe delphi pour une requête sql
    Par socooooool dans le forum Bases de données
    Réponses: 12
    Dernier message: 07/07/2006, 17h53
  4. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 23h50
  5. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo