利用樱花数据(yhkds.csv)实践k-means聚类算法。
时间: 2023-09-10 22:13:31 浏览: 101
首先,我们需要加载数据并对其进行预处理。在这个数据集中,我们有三个属性:年龄、收入和支出。我们将使用这些属性来聚类客户。
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 加载数据
data = pd.read_csv('yhkds.csv')
# 删除不必要的列
data.drop(['序号'], axis=1, inplace=True)
# 查看数据
print(data.head())
```
接下来,我们将进行特征缩放,以确保每个特征的权重相等。
```python
# 特征缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
```
现在我们可以应用K-Means算法来聚类数据。我们将尝试聚类2到10个簇,并使用肘方法来选择最佳的簇数。
```python
# 聚类
from sklearn.cluster import KMeans
# 计算SSE(误差平方和)
sse = []
for i in range(2, 11):
kmeans = KMeans(n_clusters=i, init='k-means++')
kmeans.fit(data_scaled)
sse.append(kmeans.inertia_)
# 画出SSE的曲线图
plt.plot(range(2, 11), sse)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.show()
```
根据上图,我们可以看到聚类2或3个簇是最好的选择,因为这些点后的SSE变化不大。
现在我们可以使用K-Means算法并将其应用于数据集,我们将选择3个簇。
```python
# 应用K-Means算法
kmeans = KMeans(n_clusters=3, init='k-means++')
kmeans.fit(data_scaled)
# 为每个客户分配簇
cluster_labels = kmeans.predict(data_scaled)
# 将簇分配添加到数据集中
data['Cluster'] = cluster_labels
# 查看结果
print(data.head())
```
最后,我们可以可视化聚类结果。
```python
# 可视化聚类结果
plt.scatter(data['收入'], data['支出'], c=data['Cluster'])
plt.xlabel('Income')
plt.ylabel('Spending')
plt.show()
```
如果一切都运行正常,您应该会看到一个具有三个不同颜色的散点图,每个颜色代表一个簇。
阅读全文