0
votes

GridSearchCV avec paramètre non valide gamma pour estimateur logismectregrression

Je dois effectuer une recherche de grille sur les paramètres énumérés ci-dessous pour un classificateur de régression logistique, à l'aide de rappel pour la notation et la validation croisée trois fois.

Les données sont dans un fichier CSV (11,1 Mo), ce lien pour le téléchargement est: https://drive.google.com/file/d/1cqfp7hteaal37cefsbmnuhqpzkincvzs/view?usp=sharing p>

J'ai grid_values ​​= {'gamma' : [0.01, 0,1, 1, 10, 100]} code> Je dois appliquer la pénalité L1 E L2 dans une régression logistique P>

Je n'ai pas pu vérifier si les scores seront exécutés car j'ai l'erreur suivante: Paramètre invalide gamma pour estimateur logishregression. Vérifiez la liste des paramètres disponibles avec estimateur.get_params (). Touches () code>. P>

Ceci est mon code: P>

from sklearn.model_selection import train_test_split

df = pd.read_csv('fraud_data.csv')

X = df.iloc[:,:-1]
y = df.iloc[:,-1]

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)




def LogisticR_penalty():    
    from sklearn.model_selection import GridSearchCV
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import cross_val_score

    grid_values = {'gamma':[0.01, 0.1, 1, 10, 100]}


    #train de model with many parameters for "C" and penalty='l1'
    lr_l1 = LogisticRegression(penalty='l1')
    grid_lr_l1 = GridSearchCV(lr_l1, param_grid = grid_values, cv=3, scoring = 'recall')
    grid_lr_l1.fit(X_train, y_train)
    y_decision_fn_scores_recall = grid_lr_l1.decision_function(X_test)


    lr_l2 = LogisticRegression(penalty='l2')
    grid_lr_l2 = GridSearchCV(lr_l2, param_grid = grid_values, cv=3 , scoring = 'recall')
    grid_lr_l2.fit(X_train, y_train)
    y_decision_fn_scores_recall = grid_lr_l2.decision_function(X_test)



    #The precision, recall, and accuracy scores for every combination 
    #of the parameters in param_grid are stored in cv_results_
    results = pd.DataFrame()

    results['l1_results'] = pd.DataFrame(grid_lr_l1.cv_results_)
    results['l1_results'] = results['l2_results'].sort_values(by='mean_test_precision_score', ascending=False)

    results['l2_results'] = pd.DataFrame(grid_lr_l2.cv_results_)
    results['l2_results'] = results['l2_results'].sort_values(by='mean_test_precision_score', ascending=False)


    return results
LogisticR_penalty()


0 commentaires

3 Réponses :


2
votes

de La documentation de Scikit-Harning's , le Logisticregression n'a aucun paramètre gamma , mais un paramètre C pour le poids de la régularisation.

Si vous changez grid_values ​​= {'gamma': [0.01, 0,1, 1, 10, 100]} pour grid_values ​​= {'C': [0.01, 0,1, 1, 10, 100]} Votre code devrait fonctionner.


1 commentaires

En plus de changer de gamma en C, j'ai également dû inclure les pénalités dont je devais travailler: grid_values ​​= {'Pénalité': ['L1', 'L2'], 'C': [0.01, 0,1, 1 , 10, 100]}



3
votes

Le message d'erreur contient la réponse à votre question. Vous pouvez utiliser la fonction estimateur.get_params (). Touches () CODE> Pour voir tous les paramètres disponibles pour votre estimateur: xxx pré>

sortie: p>

dict_keys(['C', 'class_weight', 'dual', 'fit_intercept', 'intercept_scaling', 'l1_ratio', 'max_iter', 'multi_class', 'n_jobs', 'penalty', 'random_state', 'solver', 'tol', 'verbose', 'warm_start'])


1 commentaires

Merci, cela m'a aidé à clarifier des choses. Je ne savais vraiment pas que vous pouvez connaître tous les paramètres disponibles pour votre estimateur.



0
votes

Mon code contenait des erreurs l'erreur principale utilisait incorrectement param_grid. Je devais appliquer des pénalités L1 et L2 avec gamma 0,01, 0,1, 1, 10, 100. La bonne façon de le faire est la suivante: xxx pré>

alors il était nécessaire de corriger la façon dont je m'entraînais Ma régression logistique et pour corriger la manière dont j'ai récupéré les scores dans cv_results_ et en moyenne ces scores. Suivez mon code: P>

from sklearn.model_selection import train_test_split

df = pd.read_csv('fraud_data.csv')

X = df.iloc[:,:-1]
y = df.iloc[:,-1]

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

def LogisticR_penalty():    
    from sklearn.model_selection import GridSearchCV
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import cross_val_score

    grid_values = {'penalty': ['l1', 'l2'], 'C': [0.01, 0.1, 1, 10, 100]}


    #train de model with many parameters for "C" and penalty='l1'

    lr = LogisticRegression()
    # We use GridSearchCV to find the value of the range that optimizes a given measurement metric.
    grid_lr_recall = GridSearchCV(lr, param_grid = grid_values, cv=3, scoring = 'recall')
    grid_lr_recall.fit(X_train, y_train)
    y_decision_fn_scores_recall = grid_lr_recall.decision_function(X_test)

    ##The precision, recall, and accuracy scores for every combination 
    #of the parameters in param_grid are stored in cv_results_
    CVresults = []
    CVresults = pd.DataFrame(grid_lr_recall.cv_results_)

    #test scores and mean of them
    split_test_scores = np.vstack((CVresults['split0_test_score'], CVresults['split1_test_score'], CVresults['split2_test_score']))
    mean_scores = split_test_scores.mean(axis=0).reshape(5, 2)

    return mean_scores
LogisticR_penalty()


0 commentaires