Yellowbrick使用 sklearn 估计器类型检查来确定模型是否非常适合可视化。您可以使用force_model
参数绕过类型检查(尽管似乎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()
创建包装器并不理想,但对于不适合标准分类器或集群器 sklearn API 的模型类型,它们通常是必要的,并且对于许多 ML 任务来说,这是一个很好的策略。