以下是Python代码示例,使用Pandas、Matplotlib、Scikit-learn库来完成你的要求:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans, AgglomerativeClustering, DBSCAN
from sklearn.metrics import silhouette_score
# 读取数据
data = pd.read_csv('moon.csv')
# 绘制散点图
plt.scatter(data['X1'], data['X2'], c=data['Label'])
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('Scatter Plot')
plt.show()
# 聚类分析 - K-means算法
kmeans = KMeans(n_clusters=2)
kmeans.fit(data[['X1', 'X2']])
new_labels_kmeans = kmeans.labels_
data['New_Label_KMeans'] = new_labels_kmeans
# 统计正确分类比例和轮廓系数(K-means)
correct_kmeans = sum(new_labels_kmeans == data['Label']) / len(data)
silhouette_kmeans = silhouette_score(data[['X1', 'X2']], new_labels_kmeans)
# 聚类分析 - 层次聚类算法(Agglomerative Clustering)
agg_clustering = AgglomerativeClustering(n_clusters=2)
new_labels_agg = agg_clustering.fit_predict(data[['X1', 'X2']])
data['New_Label_Agg'] = new_labels_agg
# 统计正确分类比例和轮廓系数(层次聚类)
correct_agg = sum(new_labels_agg == data['Label']) / len(data)
silhouette_agg = silhouette_score(data[['X1', 'X2']], new_labels_agg)
# 聚类分析 - DBSCAN算法
dbscan = DBSCAN(eps=0.3, min_samples=5)
new_labels_dbscan = dbscan.fit_predict(data[['X1', 'X2']])
data['New_Label_DBSCAN'] = new_labels_dbscan
# 统计正确分类比例和轮廓系数(DBSCAN)
correct_dbscan = sum(new_labels_dbscan == data['Label']) / len(data)
silhouette_dbscan = silhouette_score(data[['X1', 'X2']], new_labels_dbscan)
# 将新的聚类标签和原始数据保存到CSV文件中
data.to_csv('moon_with_new_labels.csv', index=False)
print("K-means: Correct Classification:", correct_kmeans, "Silhouette Score:", silhouette_kmeans)
print("Agglomerative Clustering: Correct Classification:", correct_agg, "Silhouette Score:", silhouette_agg)
print("DBSCAN: Correct Classification:", correct_dbscan, "Silhouette Score:", silhouette_dbscan)
上述代码首先读取”moon.csv”文件,绘制散点图。然后使用K-means算法、层次聚类算法和DBSCAN算法进行聚类分析,并将新的聚类标签添加到原始数据中。接下来统计每个算法的正确分类比例和轮廓系数,并将包含新标签的数据保存到”moon_with_new_labels.csv”文件中。
请注意,对于不同的数据集,聚类参数需要根据实际情况进行调整以获得最佳结果。
内容由零声教学AI助手提供,问题来源于学员提问




