如何使用Python和sklearn库中的K-means聚类算法,基于生成的100个带有随机身高体重值的数据点,将个体分为三个体型类别?并且,请详细描述如何执行这个过程,包括数据预处理、模型训练以及最终结果的可视化(如通过散点图展示不同体型类别的分布)步骤。
时间: 2024-11-27 08:21:20 浏览: 1
使用Python和scikit-learn(sklearn)库中的K-means聚类算法,可以按照以下步骤对100个随机身高体重数据点进行分组:
1. **导入所需库**:
```python
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
```
2. **生成随机数据**:
```python
np.random.seed(42) # 设置随机种子保证每次运行结果一致
data = np.random.rand(100, 2) # 创建100个二维随机数代表身高和体重
heights, weights = data[:, 0], data[:, 1] # 分离身高和体重数据
```
3. **数据预处理**:
K-means不需要特别的预处理,但它通常假设数据是标准化的。这里我们简单地计算身高和体重的平均值和标准差,然后进行缩放。
```python
mean_height, std_height = heights.mean(), heights.std()
mean_weight, std_weight = weights.mean(), weights.std()
heights_scaled = (heights - mean_height) / std_height
weights_scaled = (weights - mean_weight) / std_weight
# 联合身高体重数据
features = np.column_stack((heights_scaled, weights_scaled))
```
4. **训练K-means模型**:
```python
kmeans = KMeans(n_clusters=3, random_state=42) # 设定3个聚类中心
kmeans.fit(features)
```
5. **获取聚类标签**:
```python
labels = kmeans.labels_
```
6. **结果可视化**:
```python
plt.scatter(heights_scaled, weights_scaled, c=labels, cmap='viridis') # 使用散点图展示聚类结果
centers = kmeans.cluster_centers_ * (std_height, std_weight) + (mean_height, mean_weight) # 反标准化聚类中心
plt.scatter(*centers.T, marker='x', s=200, linewidths=3, color='red') # 显示聚类中心
plt.xlabel('Height')
plt.ylabel('Weight')
plt.title('K-means Clustering of Height and Weight Data')
plt.show()
```
阅读全文