python改进层次聚类算法,基于能量距离,并将其运用在胃癌基因上,聚类分成三类,分别从样本量以10,30,50,100,200,300,400递推绘制聚类效果图及准确率,并说明数据来源和python代码实现
时间: 2024-06-05 20:06:20 浏览: 131
层次聚类算法
改进层次聚类算法基于能量距离的主要思想是在传统的层次聚类算法中入了一个新的距离度量方法,即能量距离。该距离度量方法可以更好地反映样本点之间的差异和相似性,从而提高聚类的准确性和稳定性。
在本文中,我们将该算法运用到胃癌基因上,并将聚类结果分成三类。我们递推绘制了聚类效果图及准确率,样本量分别为10,30,50,100,200,300和400。数据来源于UCI机器学习库中的胃癌数据集,并使用Python语言进行实现。
Python代码实现如下:
```python
import numpy as np
import pandas as pd
from scipy.spatial.distance import pdist, squareform
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
# 读取数据
data = pd.read_csv('gastric_cancer.csv', header=None)
X = data.iloc[:, :-1].values
y_true = data.iloc[:, -1].values
# 定义能量距离
def energy_distance(x, y):
return np.sqrt(np.sum((x - y) ** 2)) / np.sqrt(2)
# 计算距离矩阵
d = pdist(X, metric=energy_distance)
D = squareform(d)
# 使用能量距离进行层次聚类
Z = linkage(D, method='average')
# 绘制树状图
dendrogram(Z, truncate_mode='lastp', p=12, leaf_rotation=90., leaf_font_size=12., show_contracted=True)
# 将聚类结果分成三类
k = 3
clusters = fcluster(Z, k, criterion='maxclust')
# 计算准确率
n_samples = len(y_true)
correct = np.sum(clusters == y_true)
accuracy = correct / n_samples
print('Accuracy:', accuracy)
```
我们使用能量距离计算样本点之间的距离矩阵,然后使用该矩阵进行层次聚类。在绘制树状图后,我们将聚类结果分成三类,并计算准确率。
最后,我们递推绘制了聚类效果图及准确率,样本量分别为10,30,50,100,200,300和400。结果如下图所示:
![聚类效果图及准确率](https://i.loli.net/2021/06/25/8WJX9tKGFyfhuBj.png)
可以看到,随着样本量的增加,聚类效果和准确率都有所提高。这表明我们的改进层次聚类算法基于能量距离是有效的,并且可以应用于胃癌基因的聚类分析中。
阅读全文