PYTHON sklearn库降维聚类实战——威斯康辛州乳腺癌数据集聚类

1 篇文章 0 订阅
1 篇文章 0 订阅

PYTHON sklearn库降维聚类实战——威斯康辛州乳腺癌数据集聚类

威斯康辛州乳腺癌数据集
此数据集是sklearn.datasets的内置数据集,包含了威斯康辛州记录的569个病人的乳腺癌恶性/良性(1/0)类别型数据(训练目标),以及与之对应的30个维度的生理指标数据。
威斯康辛州乳腺癌数据集

本次实验使用了随即投影、T-SNE、PCA、Isomap四种降维方法和DBScan、K-means、GMM三种聚类方法,经比较,使用T-SNE降维或随机投影降维后,再使用GMM聚类的效果较好。

可能是数据集整体太稠密或者降维模型、DBScan模型参数的问题,DBScan效果不忍直视~

代码如下:

运行环境为python 3.7 需要安装sklearn库和matplotlib库

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import preprocessing
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.cluster import DBSCAN
from sklearn.mixture import GaussianMixture
from sklearn import metrics
from sklearn import random_projection
from sklearn import manifold
from sklearn import decomposition

##乳腺癌数据集
X,y=datasets.load_breast_cancer(return_X_y=True)
##print("X.shape:",X.shape)
##print("y.shape:",y.shape)
##print("X[:3]:",X[:3])
##print("y[:3]",y[:3])

##随机投影降维
##rp=random_projection.SparseRandomProjection(n_components=3,density=0.1,random_state=0)
##X_projected=rp.fit_transform(X)

##T-SNE降维
tsne=manifold.TSNE(n_components=3,init="pca")
X_projected=tsne.fit_transform(X)

##PCA降维
##pca=decomposition.TruncatedSVD(n_components=3)
##X_projected=pca.fit_transform(X)

##Isomap降维
##iso = manifold.Isomap(n_neighbors=20, n_components=3)
#X_projected=iso.fit_transform(X)

##结果标准化
##X_projected=preprocessing.scale(X_projected)

##DBSCAN聚类
##y_pred=DBSCAN(eps=0.1,min_samples=10).fit_predict(X_projected)

##GMM聚类
y_pred=GaussianMixture(n_components=2).fit_predict(X_projected)

##K-means聚类
##y_pred=KMeans(n_clusters=2).fit_predict(X_projected)

##对K-mean的聚类效果进行评分
##score=metrics.calinski_harabasz_score(X_projected,y_pred)
##print(score)

plt.figure(1)
ax = plt.subplot(111, projection='3d')
ax.scatter(X_projected[:,0],X_projected[:,1],X_projected[:,2],c=y)
plt.figure(2)
ax = plt.subplot(111, projection='3d')
ax.scatter(X_projected[:,0],X_projected[:,1],X_projected[:,2],c=y_pred)
plt.show()

聚类结果如下:

随机投影降维:

随机投影降维述

GMM聚类:

GMM聚类

K-Means聚类:

K-Means聚类

DBSCAN聚类:

DBSCAN聚类

T-SNE降维:

T-SNE降维

GMM聚类:

GMM聚类

K-Means聚类:

K-Means聚类

DBScan聚类:

DBScan聚类

因为GMM和K-Means的原理较为相似,所以它们的结果较相似,效果较好,DBScan效果。。。
因为是初学,各个模型的参数可能设置的有些问题。。。

以下是使用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表示簇心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值