sklearn Kmeans详解
时间: 2024-05-03 16:18:10 浏览: 94
K-Means 是一种聚类算法,它将数据集分成 K 个不同的簇,每个簇都包含具有相似特征的数据点。在 K-Means 算法中,每个簇的质心是该簇中所有点的平均值。
在 Scikit-learn 中,K-Means 算法可以使用 KMeans 类来实现。下面是使用 KMeans 类执行 K-Means 算法的步骤:
1. 导入 KMeans 类
```python
from sklearn.cluster import KMeans
```
2. 创建 KMeans 类对象
```python
kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=300, n_init=10, random_state=0)
```
参数说明:
- n_clusters:要分成的簇的数量。
- init:初始化方法。默认值为 'k-means++'。其他选项包括 'random' 和 ndarray。
- max_iter:最大迭代次数。默认值为 300。
- n_init:执行 K-Means 算法的次数。默认值为 10。
- random_state:随机种子。
3. 训练模型
```python
kmeans.fit(X)
```
参数 X 是包含数据的特征矩阵。
4. 预测簇
```python
kmeans.predict(X)
```
预测每个数据点所属的簇。
5. 获取质心
```python
kmeans.cluster_centers_
```
获取每个簇的质心。
6. 获取 SSE 值
```python
kmeans.inertia_
```
获取 SSE(Sum of Squared Errors)值,该值越小,表示聚类效果越好。
7. 可视化结果
将数据点和质心绘制到图表中,以便更好地理解聚类结果。
完整的代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 生成数据
X = np.array([[5,3], [10,15], [15,12], [24,10], [30,45], [85,70], [71,80], [60,78], [55,52], [80,91],])
# 创建 KMeans 类对象
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)
# 预测簇
y_kmeans = kmeans.predict(X)
# 获取质心
centroids = kmeans.cluster_centers_
# 获取 SSE 值
sse = kmeans.inertia_
# 可视化结果
plt.scatter(X[:,0], X[:,1], s=100, c=y_kmeans)
plt.scatter(centroids[:,0], centroids[:,1], marker='*', s=300, c='red')
plt.title('KMeans Clustering')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
```
输出结果:
![KMeans Clustering](https://img-blog.csdn.net/20180507180220973?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NocmlzdGlhbnNpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)
阅读全文