Yellowbrick использует проверки типа оценки склеарна , чтобы определить, подходит ли модель для визуализации. Вы можете использовать force_model
param , чтобы обойти проверку типов (хотя кажется, что документация KElbow
должна обновляться с этим).
Однако, даже если force_model=True
проходит через YellowbrickTypeError
, но это не значит, что GaussianMixture
работает с KElbow
. Это связано с тем, что локтевой визуализатор настроен для работы с API центроидальной кластеризации и требует как n_clusters
гиперпарам, так и labels_
обученный параметр. Модели максимизации ожиданий не поддерживают этот API.
Однако можно создать обертку вокруг модели гауссовой смеси, которая позволит ей работать с визуализатором колен (также можно использовать аналогичный метод с отчетом о классификации).
from sklearn.base import ClusterMixin
from sklearn.mixture import GaussianMixture
from yellowbrick.cluster import KElbow
from yellowbrick.datasets import load_nfl
class GMClusters(GaussianMixture, ClusterMixin):
def __init__(self, n_clusters=1, **kwargs):
kwargs["n_components"] = n_clusters
super(GMClusters, self).__init__(**kwargs)
def fit(self, X):
super(GMClusters, self).fit(X)
self.labels_ = self.predict(X)
return self
X, _ = load_nfl()
oz = KElbow(GMClusters(), k=(4,12), force_model=True)
oz.fit(X)
oz.show()
Это действительно дает график KElbow (хотя и не очень хороший для этого конкретного набора данных):
Другой ответупоминал баллы Calinksi Harabasz, которые можно использовать в визуализаторе KElbow
следующим образом:
oz = KElbow(GMClusters(), k=(4,12), metric='calinski_harabasz', force_model=True)
oz.fit(X)
oz.show()
Создание оболочки не является идеальным, но для типов моделей, которые не соответствуют стандартному классификатору или склеру кластераAPI, они часто необходимы, и это хорошая стратегия, чтобы иметь в своем заднем кармане ряд задач ML.