实验目的: 会用Python创建KMeans聚类分析模型; 使用KMeans模型对航空公司客户价值进行聚类分析; 会对聚类结果进行分析。 实验内容: 使用sklearn.cluester的KMeans类对航空公司客户数据进行聚类分析,把乘客分到不同的类别中。 数据集:air_data.csv 数据集大小:62052条不重复数据 原数据有40个属性,为了大家训练模型方便,本实验使用预处理后的标准化数据,该数据有5个属性。 数据说明: ZL:入会至当前时长,反应可能的活跃时间 ZR:最近消费时间间隔,反应最近一段时间活跃程度 ZF:消费频次,反应客户忠诚度 ZM:消费里程总额,反应客户对乘机的依赖程度 ZC:舱位等级对应折扣系数,一般舱位等级越高,折扣系数越大 载入训练数据、显示读入数据的前5行 训练KMeans聚类模型,把数据聚成5类 from sklearn.cluster import KMeans k = 5 model = … KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300, n_clusters=5, n_init=10, n_jobs=None, precompute_distances='auto',random_state=None, tol=0.0001,verbose=0) 检查每个聚类类别样本数、每个聚类类别中心点,统计聚类个数及中心点 画出5个聚类中心点在每个维度上的散点图,并按统一类别把聚类中心用线连接起来 分析聚类结果
时间: 2024-03-21 18:42:16 浏览: 129
以下是Python代码实现:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 载入数据
data = pd.read_csv('air_data.csv')
# 数据预处理
data = data[['ZL', 'ZR', 'ZF', 'ZM', 'ZC']]
data = data.dropna()
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
# 训练KMeans模型
k = 5
kmeans = KMeans(n_clusters=k, init='k-means++', max_iter=300, n_init=10, random_state=0)
pred_y = kmeans.fit_predict(data_scaled)
# 统计每个聚类类别样本数、每个聚类类别中心点
labels = kmeans.labels_
centers = kmeans.cluster_centers_
n_samples_per_cluster = np.bincount(labels, minlength=k)
print("Number of samples per cluster:", n_samples_per_cluster)
print("Centers of each cluster:", centers)
# 统计聚类个数及中心点
plt.scatter(data_scaled[:, 0], data_scaled[:, 1], c=pred_y)
plt.scatter(centers[:, 0], centers[:, 1], s=300, marker='*', c='red')
plt.title('KMeans Clustering')
plt.xlabel('ZL')
plt.ylabel('ZR')
plt.show()
# 画出5个聚类中心点在每个维度上的散点图
fig, ax = plt.subplots()
colors = ['r', 'g', 'b', 'y', 'm']
for i in range(k):
points = np.array([data_scaled[j] for j in range(len(data_scaled)) if labels[j] == i])
ax.scatter(points[:, 0], points[:, 1], s=7, c=colors[i])
ax.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505')
plt.title('KMeans Clustering')
plt.xlabel('ZL')
plt.ylabel('ZR')
plt.show()
# 按统一类别把聚类中心用线连接起来
fig, ax = plt.subplots()
for i in range(k):
points = np.array([data_scaled[j] for j in range(len(data_scaled)) if labels[j] == i])
ax.scatter(points[:, 0], points[:, 1], s=7, c=colors[i])
ax.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505')
for i, c in enumerate(centers):
ax.plot([c[0], centers[(i+1)%k, 0]], [c[1], centers[(i+1)%k, 1]], 'k--')
plt.title('KMeans Clustering')
plt.xlabel('ZL')
plt.ylabel('ZR')
plt.show()
# 分析聚类结果
# 可以根据聚类结果,分析出不同类别的客户特征和行为习惯,为航空公司制定针对性的市场策略和服务方案提供依据。
```
首先,载入数据,并对数据进行预处理,只保留了5个属性,并进行了标准化处理。然后,使用KMeans算法将数据聚成5类,并统计每个聚类类别样本数和每个聚类类别中心点。接着,画出5个聚类中心点在每个维度上的散点图,并按统一类别把聚类中心用线连接起来。最后,根据聚类结果进行分析,可以得到不同类别客户的特征和行为习惯,为航空公司制定市场策略和服务方案提供依据。
阅读全文