乳腺癌数据集聚类分析代码,不使用sklearn集,聚类设置簇个数为2,对聚类结果进行可视化
时间: 2024-05-14 13:18:22 浏览: 108
以下是使用K-means算法对乳腺癌数据集进行聚类分析的Python代码,不使用sklearn集:
```python
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
data = np.genfromtxt('breast_cancer.txt', delimiter=',')
x = data[:, 1:] # 取数据的特征部分
# K-means算法实现
def kmeans(X, k, max_iter=100):
# 随机初始化簇中心
centroids = X[np.random.choice(X.shape[0], k, replace=False)]
for iter in range(max_iter):
# 计算每个样本距离簇中心的距离
distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)
# 分配每个样本到最近的簇中心
cluster = np.argmin(distances, axis=1)
# 计算新的簇中心
new_centroids = np.array([X[cluster == i].mean(axis=0) for i in range(k)])
# 判断是否收敛,若簇中心不再移动,则停止迭代
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return cluster, centroids
# 聚类
k = 2
cluster, centroids = kmeans(x, k)
# 可视化聚类结果
colors = ['r', 'b']
for i in range(k):
plt.scatter(x[cluster == i, 0], x[cluster == i, 1], c=colors[i])
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='k')
plt.show()
```
其中,`breast_cancer.txt`是乳腺癌数据集文件,每行代表一个患者,第一列是类别标签(0表示良性,1表示恶性),后面的9列是特征数据。代码中只使用了后面的9列特征数据进行聚类分析。聚类结果用散点图进行可视化,红色代表良性样本,蓝色代表恶性样本,黑色的X表示簇中心。
阅读全文