2

http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html (pour référence)Qu'est-ce que _passthrough_scorer et comment puis-je modifier les marqueurs dans GridsearchCV (sklearn)?

x = [[2], [1], [3], [1] ... ] # about 1000 data 
grid = GridSearchCV(KernelDensity(), {'bandwidth': np.linspace(0.1, 1.0, 10)}, cv=10) 
grid.fit(x) 

Lorsque j'utilise GridSearchCV sans spécifier la fonction de notation comme, la valeur de grid.scorer_ est. Pourriez-vous expliquer quel est le type de fonction _passthrough_scorer? En plus de cela, je veux changer la fonction de scoring en mean_squared_error ou autre chose.

grid = GridSearchCV(KernelDensity(), {'bandwidth': np.linspace(0.1, 1.0, 10)}, cv=10, scoring='mean_squared_error') 

Mais la ligne, grid.fit (x), me donne toujours ce message d'erreur:

TypeError: __call__() missing 1 required positional argument: 'y_true' 

Je ne peux pas comprendre comment donner y_true à la fonction parce que je ne connais pas le vrai Distribution. Voulez-vous me dire comment changer les fonctions de notation? J'apprécie ton aide.

Répondre

1

La métrique par défaut pour KernelDensity est minkowski avec p = 2 qui est une métrique euclidienne. GridSearchCV utilisera la métrique KernelDensity pour l'évaluation si vous n'attribuez aucune autre méthode d'évaluation.

La formule de l'erreur quadratique moyenne est: sum ((y_true - y_estimated)^2)/n. Vous avez l'erreur puisque vous devez avoir un y_true pour le calculer.

Voici un maquillée exemple d'application GridSearchCV à KernelDensity:

from sklearn.neighbors import KernelDensity 
from sklearn.grid_search import GridSearchCV 
import numpy as np 

N = 20 
X = np.concatenate((np.random.randint(0, 10, 50), 
        np.random.randint(5, 10, 50)))[:, np.newaxis] 

params = {'bandwidth': np.logspace(-1.0, 1.0, 10)} 
grid = GridSearchCV(KernelDensity(), params) 
grid.fit(X) 
print(grid.grid_scores_) 
print('Best parameter: ',grid.best_params_) 
print('Best score: ',grid.best_score_) 
print('Best estimator: ',grid.best_estimator_) 

et la sortie est:

[mean: -96.94890, std: 100.60046, params: {'bandwidth': 0.10000000000000001}, 


mean: -70.44643, std: 40.44537, params: {'bandwidth': 0.16681005372000587}, 
mean: -71.75293, std: 18.97729, params: {'bandwidth': 0.27825594022071243}, 
mean: -77.83446, std: 11.24102, params: {'bandwidth': 0.46415888336127786}, 
mean: -78.65182, std: 8.72507, params: {'bandwidth': 0.774263682681127}, 
mean: -79.78828, std: 6.98582, params: {'bandwidth': 1.2915496650148841}, 
mean: -81.65532, std: 4.77806, params: {'bandwidth': 2.1544346900318834}, 
mean: -86.27481, std: 2.71635, params: {'bandwidth': 3.5938136638046259}, 
mean: -95.86093, std: 1.84887, params: {'bandwidth': 5.9948425031894086}, 
mean: -109.52306, std: 1.71232, params: {'bandwidth': 10.0}] 
Best parameter: {'bandwidth': 0.16681005372000587} 
Best score: -70.4464315885 
Best estimator: KernelDensity(algorithm='auto', atol=0, bandwidth=0.16681005372000587, 
     breadth_first=True, kernel='gaussian', leaf_size=40, 
     metric='euclidean', metric_params=None, rtol=0) 

Les méthodes de notation valides pour GridSeachCV ont généralement besoin y_true. Dans votre cas, vous souhaiterez peut-être modifier la métrique de sklearn.KernelDensity en d'autres métriques (par exemple à sklearn.metrics.pairwise.pairwise_kernels, sklearn.metrics.pairwise.pairwise_distances) car la recherche de grille les utilisera pour l'évaluation.

+0

Nous vous remercions de votre réponse. Selon la documentation de KernelDensity (http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity), "la normalisation de la sortie de densité n'est correcte que pour le Mesure de la distance euclidienne ", mais je ne suis pas sûr de savoir comment cela affecte le résultat. Pourriez-vous expliquer en anglais simple? – Nickel