Вы не можете использовать атрибут inertia_ для k-средних, поскольку во время выполнения алгоритм кластеризации еще не подходит - PullRequest
1 голос
/ 15 мая 2019

Я хочу использовать inertia_, который является атрибутом в [K-means]: https://scikit -learn.org / stable / modules / classes.html # module-sklearn.cluster в функции оценки gridSearchCV.

Я попытался определить пользовательскую функцию, используя [make_scorer]: https://scikit -learn.org / stable / modules / generate / sklearn.metrics.make_scorer.html # sklearn.metrics.make_scorer

Но проблема, с которой я сталкиваюсь, такова: «Вы не можете использовать атрибут inertia_ k-means в my_scorer, потому что во время выполнения функции my_scorer алгоритм кластеризации еще не подходит»

kmeans = KMeans(n_jobs=-1)

grid_param = {'n_clusters' : [2, 5, 8, 14, 20, 25, 30]}

def custom_scoring(fit_obj) :
    return fit_obj.inertia_


gd_sr = GridSearchCV(estimator=kmeans,
                    param_grid=grid_param,
                    scoring=metrics.make_scorer(custom_scoring, 
                                              greater_is_better = False),
                    n_jobs=-1)

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Прежде чем приступить к созданию счетчика по инерции, я бы посоветовал вам подумать, если это хорошая идея. Инерция_ это сумма квадратов расстояния образцов до ближайших центров кластеров. Гипотетически, даже если вам каким-то образом удастся использовать это в качестве своего счетчика, вы всегда получите max (n_clusters) в качестве результата поиска по сетке. Вот почему я верю, что это произойдет.

Если вы построите эту инерцию по оси Y для кластеров разных размеров, в левом конце графика значение inertia_ будет равно дисперсии, поскольку у вас будет центр кластера в качестве среднего значения данных и SSE для всех выборки с этим средним значением будут f (дисперсия). С правой стороны, если у вас будет столько кластеров, сколько число сэмплов, вы получите inertia_ = 0. Это значение будет монотонно убывающей функцией при увеличении кластера. Наилучшим параметром сетки с этой оценкой всегда будет максимальное количество кластеров. Я не считаю это очень полезным. Пожалуйста, дайте мне знать, если я что-то упустил.

0 голосов
/ 15 мая 2019

Как говорится в сообщении об ошибке, вы должны сначала запустить функцию fit() на вашем KMeans объекте (подогнать его под данные), прежде чем использовать его в качестве оценщика в GridSearchCV.Пожалуйста, обратитесь к примеру из документации , чтобы получить представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...