1)将标准化后的数据作为K-Means和DBSCAN算法的输入数据。 2)调用KMeans和DBSCAN函数对数据进行聚类(注意调节DBSCAN 方法等参数eps和min_samples ),得到聚类标号和聚类中心点。 3)根据聚类标号统计计算得到每个类别的客户数,同时根据聚类中心 点向量画出客户聚类中心向量图并保存
时间: 2023-06-12 14:06:19 浏览: 201
好的,下面是代码实现:
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans, DBSCAN
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('data.csv')
# 数据标准化
scaler = StandardScaler()
data_std = scaler.fit_transform(data)
# K-Means聚类
kmeans = KMeans(n_clusters=3, random_state=0)
kmeans.fit(data_std)
kmeans_labels = kmeans.labels_
kmeans_centers = kmeans.cluster_centers_
# DBSCAN聚类
dbscan = DBSCAN(eps=0.8, min_samples=5)
dbscan_labels = dbscan.fit_predict(data_std)
# 统计每个类别的客户数
kmeans_count = np.bincount(kmeans_labels)
dbscan_count = np.bincount(dbscan_labels + 1)
# 画出客户聚类中心向量图
fig, ax = plt.subplots(1, 2, figsize=(10, 4))
ax[0].scatter(data_std[:, 0], data_std[:, 1], c=kmeans_labels)
ax[0].scatter(kmeans_centers[:, 0], kmeans_centers[:, 1], marker='x', s=200, linewidths=3, color='r')
ax[0].set_title('K-Means Clustering')
ax[1].scatter(data_std[:, 0], data_std[:, 1], c=dbscan_labels)
ax[1].set_title('DBSCAN Clustering')
plt.show()
# 保存聚类结果
kmeans_result = pd.DataFrame({'K-Means Cluster': kmeans_labels})
kmeans_result.to_csv('kmeans_result.csv', index=False)
dbscan_result = pd.DataFrame({'DBSCAN Cluster': dbscan_labels})
dbscan_result.to_csv('dbscan_result.csv', index=False)
需要注意的是,DBSCAN 方法的参数 eps 和 min_samples 需要根据数据集的特点进行调节,以达到最优的聚类效果。
相关推荐

















