我尝试使用YellowBrick中的SilhouetteVisualizer函数为kmeans聚类创建一个轮廓图,但是我一直收到下面的错误。当我对同一个数据应用KElbowVisualizer函数(在YellowBrick中)时,我没有遇到这个问题。我用于这两个函数的代码如下所示。感谢任何人能帮助解决这个问题,谢谢!
- 弯头可视化工具代码**
kmeans_kwargs = {"init": "random", "n_init": 10, "max_iter": 300, "random_state": 101}
kmeans = KMeans(n_clusters = k, **kmeans_kwargs)
visualizer = KElbowVisualizer(kmeans, k = (2, 31))
visualizer.fit(X)
visualizer.show()
- 轮廓可视化工具代码**
model = KMeans(n_clusters = 9) #plotted for k = 9 based on optimal k from elbow visualizer above
visualizer = SilhouetteVisualizer(model)
visualizer.fit(X)
visualizer.show()
- 错误**
---------------------------------------------------------------------------
NotFittedError Traceback (most recent call last)
File ~/miniforge3/envs/tensorflow/lib/python3.9/site-packages/yellowbrick/utils/helpers.py:50, in is_fitted(estimator)
49 try:
---> 50 estimator.predict(np.zeros((7, 3)))
51 except sklearn.exceptions.NotFittedError:
File ~/miniforge3/envs/tensorflow/lib/python3.9/site-packages/sklearn/cluster/_kmeans.py:1019, in _BaseKMeans.predict(self, X, sample_weight)
999 """Predict the closest cluster each sample in X belongs to.
1000
1001 In the vector quantization literature, `cluster_centers_` is called
(...)
1017 Index of the cluster each sample belongs to.
1018 """
-> 1019 check_is_fitted(self)
1021 X = self._check_test_data(X)
File ~/miniforge3/envs/tensorflow/lib/python3.9/site-packages/sklearn/utils/validation.py:1345, in check_is_fitted(estimator, attributes, msg, all_or_any)
1344 if not fitted:
-> 1345 raise NotFittedError(msg % {"name": type(estimator).__name__})
NotFittedError: This KMeans instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
Input In [87], in <cell line: 5>()
3 model = KMeans(n_clusters = 9)
4 vis = SilhouetteVisualizer(model)
----> 5 visualizer.fit(rfm_scaled)
6 visualizer.show()
File ~/miniforge3/envs/tensorflow/lib/python3.9/site-packages/yellowbrick/cluster/silhouette.py:136, in SilhouetteVisualizer.fit(self, X, y, **kwargs)
129 """
130 Fits the model and generates the silhouette visualization.
131 """
132 # TODO: decide to use this method or the score method to draw.
133 # NOTE: Probably this would be better in score, but the standard score
134 # is a little different and I'm not sure how it's used.
--> 136 if not check_fitted(self.estimator, is_fitted_by=self.is_fitted):
137 # Fit the wrapped estimator
138 self.estimator.fit(X, y, **kwargs)
140 # Get the properties of the dataset
File ~/miniforge3/envs/tensorflow/lib/python3.9/site-packages/yellowbrick/utils/helpers.py:116, in check_fitted(estimator, is_fitted_by, **kwargs)
85 """
86 Determines whether or not to check if the model has been fitted, and will return
87 ``True`` if so. The ``is_fitted_by`` argument is set to ``'auto'`` by default,
(...)
113 Whether or not the model is already fitted
114 """
115 if isinstance(is_fitted_by, str) and is_fitted_by.lower() == "auto":
--> 116 return is_fitted(estimator)
117 return bool(is_fitted_by)
File ~/miniforge3/envs/tensorflow/lib/python3.9/site-packages/yellowbrick/utils/helpers.py:51, in is_fitted(estimator)
49 try:
50 estimator.predict(np.zeros((7, 3)))
---> 51 except sklearn.exceptions.NotFittedError:
52 return False
53 except AttributeError:
54 # Some clustering models (LDA, PCA, Agglomerative) don't implement ``predict``
AttributeError: module 'sklearn' has no attribute 'exceptions'
2条答案
按热度按时间fcipmucu1#
检查以确保使用的变量名正确
变更
至
83qze16e2#
你使用的是什么版本的yellowbrick和scikit-learn?你可能需要更新yellowbrick。我运行你的代码没有问题。