使用K-means对民航数据进行聚类,使用sklearn,并且对K值进行寻找最优 全部代码
时间: 2024-03-05 16:48:47 浏览: 67
好的,下面是使用K-means对民航数据进行聚类的完整代码,包括了K值的寻找最优。注意:本代码部分数据来源于网络,仅供学习参考。
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 读取数据
data = pd.read_excel('airline.xlsx')
# 数据预处理
data = data.iloc[:, 1:]
data = data.fillna(0)
data = data.drop(['CUST_ID'], axis=1)
# 归一化处理
data = (data - data.mean()) / data.std()
# 寻找最优K值
sse = []
silhouette_coef = []
for k in range(2, 11):
kmeans = KMeans(n_clusters=k, random_state=0).fit(data)
sse.append(kmeans.inertia_)
score = silhouette_score(data, kmeans.labels_, metric='euclidean')
silhouette_coef.append(score)
# 绘制SSE和轮廓系数曲线
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.plot(range(2, 11), sse, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.title('Elbow Method')
plt.subplot(122)
plt.plot(range(2, 11), silhouette_coef, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Silhouette Coefficient')
plt.title('Silhouette Method')
plt.show()
# 选取最优K值进行聚类
k = 4
kmeans = KMeans(n_clusters=k, random_state=0).fit(data)
# 聚类结果
data['cluster'] = kmeans.labels_
print(data.groupby(['cluster']).mean())
# 可视化聚类结果
centers = kmeans.cluster_centers_
colors = ['r', 'g', 'b', 'y', 'c', 'm']
for i in range(k):
index = np.where(kmeans.labels_ == i)
plt.scatter(data.iloc[index]['FLIGHT_COUNT'], data.iloc[index]['LAST_TO_END'], c=colors[i], label='Cluster {}'.format(i))
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#000000')
plt.legend()
plt.xlabel('FLIGHT_COUNT')
plt.ylabel('LAST_TO_END')
plt.show()
```
在代码中,首先读取了数据,并对数据进行了预处理和归一化处理,然后使用循环遍历K值,通过KMeans算法进行聚类,并计算SSE和轮廓系数。最后,根据SSE和轮廓系数的曲线,选取最优K值进行聚类,并输出聚类结果并可视化。
阅读全文