好的,让我们逐步完成这些任务。
首先,我们需要导入必要的库,并读取moon.csv文件中的数据。你可以使用Pandas库来读取和处理数据,Matplotlib库用于绘制散点图。
import pandas as pd
import matplotlib.pyplot as plt
# 读取moon.csv文件
data = pd.read_csv('moon.csv')
# 打印部分数据
print(data.head())
接下来,我们将绘制散点图来可视化数据。不同标签的样本应该以不同颜色表示。
# 绘制散点图
plt.scatter(data['X1'], data['X2'], c=data['Label'])
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()
现在我们已经画出了散点图,每个类别都有不同的颜色。下面我们开始进行聚类分析。
对于K-means算法,可以使用sklearn库中的KMeans模块。我们将把新的聚类标签添加到原始数据集中,并计算正确分类比例和轮廓系数。
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 使用K-means算法进行聚类分析(2个簇)
kmeans = KMeans(n_clusters=2)
kmeans.fit(data[['X1', 'X2']])
# 添加新标签到原始数据集中
data['New_Label_Kmeans'] = kmeans.labels_
# 计算正确分类比例(与原始标签比较)
correct_kmeans = sum(data['Label'] == data['New_Label_Kmeans']) / len(data)
print("K-means正确分类比例:", correct_kmeans)
# 计算轮廓系数
silhouette_avg_kmeans = silhouette_score(data[['X1', 'X2']], kmeans.labels_)
print("K-means轮廓系数:", silhouette_avg_kmeans)
接下来,我们使用层次聚类和DBSCAN算法进行相似的操作。
对于层次聚类,可以使用sklearn库中的AgglomerativeClustering模块。同样,我们将添加新标签到原始数据集并计算正确分类比例和轮廓系数。
from sklearn.cluster import AgglomerativeClustering
# 使用层次聚类进行聚类分析(2个簇)
agg_clustering = AgglomerativeClustering(n_clusters=2)
agg_clustering.fit(data[['X1', 'X2']])
# 添加新标签到原始数据集中
data['New_Label_Agg'] = agg_clustering.labels_
# 计算正确分类比例(与原始标签比较)
correct_agg = sum(data['Label'] == data['New_Label_Agg']) / len(data)
print("层次聚类正确分类比例:", correct_agg)
# 计算轮廓系数
silhouette_avg_agg = silhouette_score(data[['X1', 'X2']], agg_clustering.labels_)
print("层次聚类轮廓系数:", silhouette_avg_agg)
最后,我们使用DBSCAN算法。同样地,添加新标签并计算正确分类比例和轮廓系数。
from sklearn.cluster import DBSCAN
# 使用DBSCAN进行聚类分析
dbscan = DBSCAN(eps=0.3, min_samples=5)
dbscan.fit(data[['X1', 'X2']])
# 添加新标签到原始数据集中
data['New_Label_DBSCAN'] = dbscan.labels_
# 计算正确分类比例(与原始标签比较)
correct_dbscan = sum(data['Label'] == data['New_Label_DBSCAN']) / len(data)
print("DBSCAN正确分类比例:", correct_dbscan)
# 计算轮廓系数
silhouette_avg_dbscan = silhouette_score(data[['X1', 'X2']], dbscan.labels_)
print("DBSCAN轮廓系数:", silhouette_avg_dbscan)
这样,我们就完成了任务。你可以将以上代码整合起来,并运行以得到所需的结果。
内容由零声教学AI助手提供,问题来源于学员提问




