machine-learning - 提供的模型不是 YellowBrick 中的聚类估计器
问题描述
我正在尝试使用 YellowBrick 的 KElbowVisualizer 和 SKLearn 的期望最大化算法类:GaussianMixture 为我的数据可视化肘部图。
当我运行它时,我得到标题中的错误。(我也尝试过 ClassificationReport,但也失败了)
model = GaussianMixture()
data = get_data(data_name, preprocessor_name, train_split=0.75)
X, y, x_test, y_test = data
visualizer = KElbowVisualizer(model, k=(4,12))
visualizer.fit(X) # Fit the data to the visualizer
visualizer.show() # Finalize and render the figure
我在 YellowBrick 中找不到任何东西来帮助我估计期望最大化的组件数量。
解决方案
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 任务来说,这是一个很好的策略。
推荐阅读
- asp.net-core - 如何授权控制器 .NET Core API
- tensorflow - MNIST 识别手写单词
- java - Java XML 问题:文档中根元素之后的标记必须格式正确
- angular - 如何在 Ionic 4 中使用离子输入修复 *ngFor 的 ExpressionChangedAfterItHasBeenCheckedError
- ios - How to fix error with xcodebuild in GitHub Actions
- redis - 以 redis 作为代理的 celery 和结果后端使用了太多的 redis 连接
- reactjs - 如何从 renderHook 获取返回值
- java - 如何从捕获事件通过检票口ajax行为?
- postgresql - Postgres:具有精度的数字数据类型
- python - 如何为 python3.8.1 正确安装 scipy?