使用k-means1.加载鸢尾花集并处理,使用花瓣的宽和高两个特征进行聚类2.绘制在没有分类下的大致分布图3.假设k=4的聚类分布图,并绘制每个分类的中心点4.使用sse的方法找出最优k值5.使用轮廓系数的方法找出最优k值6.使用最优k值聚类,绘制最优聚类分布散点图
时间: 2024-11-24 07:42:11 浏览: 51
文档鸢尾的散点图matlab绘制K近邻(KNN)分类K-Means聚类算法聚类
在Python中,我们可以使用sklearn库来进行K-means聚类分析。以下是按照步骤进行操作的示例:
1. **加载数据**:
首先,我们需要从sklearn.datasets导入鸢尾花数据集(Iris dataset),然后选择花瓣宽度(petal_width)和花瓣长度(petal_length)这两个特征进行聚类:
```python
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, [2, 3]] # 花瓣宽度和高度作为特征
y = iris.target
```
2. **无分类数据分布**:
可以使用matplotlib库中的scatter函数展示数据未分组的分布:
```python
import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1])
plt.xlabel('Petal Width')
plt.ylabel('Petal Length')
plt.title('Unclustered Iris Data Distribution')
plt.show()
```
3. **假设k=4的聚类分布及中心点**:
对于k=4,运行K-means算法,画出簇中心:
```python
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], s=300, c='red', label='Centroids')
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.legend()
plt.show()
```
4. **寻找最优k值**:
- SSE (Sum of Squared Errors): 可以计算不同k值下SSE,找到最小值对应的最佳k:
```python
sse = []
for k in range(1, 11):
km = KMeans(n_clusters=k)
km.fit(X)
sse.append(km.inertia_)
optimal_k = sse.index(min(sse)) + 1
```
- 轮廓系数(Coefficient of Determination, R-squared): 可以使用silhouette_score评估,找到最大平均轮廓系数对应的k值。
5. **使用最优k值聚类并绘制**:
根据最优k值再次进行聚类并绘制结果:
```python
best_km = KMeans(n_clusters=optimal_k)
labels = best_km.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.show()
```
阅读全文