Показатель по умолчанию для KernelDensity равен minkowski
с p = 2, который является евклидовой метрикой. GridSearchCV будет использовать показатель KernelDensity для подсчета очков, если вы не назначите какой-либо другой метод оценки.
Формула для среднеквадратической ошибки: sum ((y_true - y_estimated)^2)/n. У вас возникла ошибка, так как для ее расчета необходимо иметь y_true
.
Вот выдуманный пример применения 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_)
и выход:
[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)
Допустимые методы скоринга для GridSeachCV обычно требуется y_true. В вашем случае вы можете изменить метрику sklearn.KernelDensity
на другие показатели (например, до sklearn.metrics.pairwise.pairwise_kernels
, sklearn.metrics.pairwise.pairwise_distances
), поскольку поиск по сетке будет использовать их для подсчета очков.
Благодарим вас за ответ. Согласно документации KernelDensity (http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity), «нормализация выхода плотности правильна только для Евклидова метрика расстояния ", но я не уверен, как это влияет на результат. Не могли бы вы объяснить на простом английском языке? – Nickel