Comment créer/personnaliser votre propre meilleur buteur de la fonction dans scikit-learn?
Je suis en utilisant Régression À Vecteurs De Support comme un estimateur dans GridSearchCV. Mais je veux changer la fonction d'erreur: au lieu d'utiliser la valeur par défaut (R-squared: coefficient de détermination), je tiens à définir ma propre fonction d'erreur.
J'ai essayé de faire un avec make_scorer
, mais il ne fonctionne pas.
J'ai lu la documentation et trouvé qu'il est possible de créer personnalisé estimateurs, mais je n'ai pas besoin de refaire l'ensemble de l'estimateur - seulement l'erreur/fonction de notation.
Je pense que je peux le faire par la définition d'un callable en tant que correcteur, comme il est dit dans le docs.
Mais je ne sais pas comment utiliser un estimateur: dans mon cas, SVR. Aurais-je passer à un classificateur (comme SVC)? Et comment pourrais-je l'utiliser?
Mon custom de la fonction d'erreur est comme suit:
def my_custom_loss_func(X_train_scaled, Y_train_scaled):
error, M = 0, 0
for i in range(0, len(Y_train_scaled)):
z = (Y_train_scaled[i] - M)
if X_train_scaled[i] > M and Y_train_scaled[i] > M and (X_train_scaled[i] - Y_train_scaled[i]) > 0:
error_i = (abs(Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(z))
if X_train_scaled[i] > M and Y_train_scaled[i] > M and (X_train_scaled[i] - Y_train_scaled[i]) < 0:
error_i = -(abs((Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(z)))
if X_train_scaled[i] > M and Y_train_scaled[i] < M:
error_i = -(abs(Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(-z))
error += error_i
return error
La variable M
n'est pas null/zero. Je viens de mettre à zéro pour des raisons de simplicité.
Quelqu'un serait-il en mesure de montrer un exemple d'application de cette coutume fonction de notation? Merci pour votre aide!
n'oubliez pas de marquer l'une des réponses que de la bonne. Merci 🙂
OriginalL'auteur daniel2014 | 2015-09-04
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez vu, ceci est fait en utilisant
make_scorer
(docs).Désolé, je ne comprends pas le problème alors. Il n'est pas clair pour moi ce que vous essayez de faire.
Je parle anglais très mal, désolé. Je suis en train d'utiliser "si conditionnel" et "pour" l'intérieur "my_custom_loss_function". Comme <br/> def my_custom_loss_func(X_train_scaled, Y_train_scaled): erreur, M = 0, 0 for i in range(0, len(Y_train_scaled)): z = (Y_train_scaled[i] - M) si X_train_scaled[i] > M et Y_train_scaled[i] > M et (X_train_scaled[i] - Y_train_scaled[i]) > 0:... <br/> puis-je le faire? Mon ordinateur portable semble bloqué. Et je veux regarder un par un tous mes datas dans "X_train_scaled" et ensuite fonctionner sur elle. Merci.
Ne vous inquiétez pas, votre anglais est très bon. Cet exemple de travail pour vous? Si non, pouvez-vous me dire où sont les problèmes?
J'ai essayé l'exemple. Je ne sais pas, mais... pas de Ça marche!!! Je pense que j'ai eu une erreur dans dtype (entre tableau et python; j'avais peut-être "n_job=-1"). Je ne sais vraiment pas mais je suis heureux parce que cela fonctionne maintenant! Merci beaucoup!
OriginalL'auteur Jamie Bull
Jamie a une chair de l'exemple, mais voici un exemple d'utilisation make_scorer directement à partir de scikit-learn la documentation:
Lors de la définition d'une coutume buteur via
sklearn.métriques.make_scorer
, la convention est que les fonctions personnalisées se terminant en_score
renvoyer une valeur à maximiser. Et pour les buteurs se terminant en_loss
ou_error
, une valeur est retournée à être réduite au minimum. Vous pouvez utiliser cette fonctionnalité par le réglage de lagreater_is_better
paramètre à l'intérieur demake_scorer
. C'est, ce paramètre devrait êtreTrue
pour les buteurs où des valeurs élevées sont mieux, etFalse
pour les buteurs, où les valeurs plus faibles sont mieux.GridSearchCV
peut alors optimiser dans la direction appropriée.Vous pouvez ensuite convertir votre fonction en tant que buteur comme suit:
Puis passer
custom_scorer
enGridSearchCV
comme vous le feriez avec toute autre fonction de notation:clf = GridSearchCV(scoring=custom_scorer)
.OriginalL'auteur alichaudry