#程序文件ti11_1.py import numpy as np import pylab as plt import scipy.cluster.hierarchy as sch from sklearn.cluster import KMeans a=np.loadtxt('ti11_1.txt') z=sch.linkage(a,method='complete',metric='mahalanobis') sch.dendrogram(z, labels=np.arange(1,18)) b=(a-a.min(axis=0))/(a.max(axis=0)-a.min(axis=0)) SSE=[]; K=np.arange(1,9) for i in K: md=KMeans(i).fit(b) SSE.append(md.inertia_) plt.figure(2); plt.plot(K, SSE, '*-'); plt.show() md4=KMeans(4).fit(b) #聚类成4类 labels=md4.labels_+1 #提取聚类标签 print('聚类结果为:', labels) for i in range(1,5): print(i,'类:', np.where(labels==i)[0]+1)
时间: 2023-11-22 11:53:04 浏览: 147
这是一段 Python 代码,实现了对数据进行聚类的功能。首先从文件中读取数据,然后使用 scipy 库中的 linkage 函数进行层次聚类,得到一个聚类树状图。接着对数据进行归一化处理,并使用 sklearn 库中的 KMeans 函数进行 K 均值聚类,得到聚类标签。最后输出聚类结果和每个类别所包含的样本编号。
具体流程如下:
1. 导入所需的库:
```python
import numpy as np
import pylab as plt
import scipy.cluster.hierarchy as sch
from sklearn.cluster import KMeans
```
2. 读取数据:
```python
a = np.loadtxt('ti11_1.txt')
```
3. 进行层次聚类,并绘制聚类树状图:
```python
z = sch.linkage(a, method='complete', metric='mahalanobis')
sch.dendrogram(z, labels=np.arange(1, 18))
```
4. 对数据进行归一化处理:
```python
b = (a - a.min(axis=0)) / (a.max(axis=0) - a.min(axis=0))
```
5. 进行 K 均值聚类,并绘制 SSE-K 曲线:
```python
SSE = []
K = np.arange(1, 9)
for i in K:
md = KMeans(i).fit(b)
SSE.append(md.inertia_)
plt.figure(2)
plt.plot(K, SSE, '*-')
plt.show()
```
6. 聚类成 4 类,并输出聚类结果和每个类别所包含的样本编号:
```python
md4 = KMeans(4).fit(b)
labels = md4.labels_ + 1
print('聚类结果为:', labels)
for i in range(1, 5):
print(i, '类:', np.where(labels==i)[0]+1)
```
其中,ti11_1.txt 文件是包含 17 个样本、每个样本有 3 个特征的数据文件。
阅读全文