编程题
- 分别使用混合高斯聚类算法(GMM)和K-Means聚类算法将agricultural_economy.xlsx文件中的9个样本聚成2类(可以使用sklearn的GaussianMixture和KMeans),用不同颜色绘图显示各类样本点,并与“最短距离聚类法”的结果进行比较,填写下表。
表1 不同聚类算法聚类结果对比表
序 号 | 聚类方法 | 聚类结果 | |
1-类 | 2-类 | ||
1 | 直接聚类法 | G5、G6、G7 | G1、G2、G3、G4、G8、G9 |
2 | GMM聚类法 | G3、G5、G6、G7 | G1、G2、G4、G8、G9 |
3 | K-Means聚类法 | G5、G6、G7 | G1、G2、G3、G4、G8、G9 |
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture
df =pd.read_excel('agricultural_economy.xlsx',index_col=0)
data=df.values
# 混合高斯聚类法
gmm = GaussianMixture(n_components=2, covariance_type='full', random_state=0)
gmm.fit(data) # 训练,对x聚类
y_pre = gmm.predict(data) #类型预测
print("GMM聚类结果:",y_pre)
color_map = {0: 'red', 1: 'blue',2:'green'}
colors = [color_map[cat] for cat in y_pre]
plt.scatter(data[:, 0], data[:, 3], c=colors)
plt.title("GMM聚类结果")
plt.show()
# KMeans聚类法
KMEANS = KMeans(n_clusters=2).fit(data)
y_pre=KMEANS.labels_
print("K-Means聚类结果:",y_pre)
colors = [color_map[cat] for cat in y_pre]
plt.scatter(data[:, 0], data[:, 3], c=colors)
plt.title("K-Means聚类结果")
plt.show()
运行结果
GMM聚类结果: [1 1 0 1 0 0 0 1 1]
K-Means聚类结果: [0 0 0 0 1 1 1 0 0]