
【sklearn练习】KMeans ---- iris(鸢尾花)数据集聚类评估
发布日期:2021-05-07 02:49:38
浏览次数:18
分类:精选文章
本文共 2938 字,大约阅读时间需要 9 分钟。
文章目录
一、数据集探索
花萼长度
,花萼宽度
,花瓣长度
,花瓣宽度
4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。 # 1.加载数据集iris_data = load_iris()x = iris_data.datay = iris_data.target# 特征columns = iris_data.feature_names # ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
X:

Y:

二、数据预处理
- 不同特征之间往往具有不同的量纲,由此所造成的数值间的差异可能很大,在涉及空间距离计算或梯度下降法等情况的时候不对其进行处理会影响到数据分析结果的准确性。为了消除特征之间的量纲和取值范围差异可能会造成的影响,需对数据进行标准化处理,也可以称为规范化处理。
- 在这里我们对数据集进行处理。
# 2.数据预处理 --- 标准差标准化MMS = MinMaxScaler().fit(x)data = MMS.transform(x)
处理后的数据集:

三、构建模型获取结果
# 3.构建KMeans模型训练数据cluster = KMeans(n_clusters=3,random_state=123).fit(data)# 3.1 获取聚类结果y_pred = cluster.labels_# 3.2 获取质心centers = cluster.cluster_centers_# [[0.70726496 0.4508547 0.79704476 0.82478632],# [0.19611111 0.595 0.07830508 0.06083333],# [0.44125683 0.30737705 0.57571548 0.54918033]]# 3.3 查看簇内平方和inertia = cluster.inertia_ # 6.982216473785234
四、聚类结果可视化
- 这里我们的数据集是四维(包含四个特征),我们需要对其进行降维处理,降到二维平面使用散点图来进行展示。
- 这里的降维采用TSNE。t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 等在08年提出来。此外,
t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可视化
。
# 4.聚类结果可视化from sklearn.manifold import TSNE# 进行数据降维处理tsne = TSNE(n_components=2,init='random',random_state=177).fit(data)df = pd.DataFrame(tsne.embedding_)df['labels'] = y_pred
- 降维后的数据集
df1 = df[df['labels']==0]df2 = df[df['labels']==1]df3 = df[df['labels']==2]# 绘制画布fig = plt.figure(figsize=(9,6))plt.plot(df1[0],df1[1],'bo',df2[0],df2[1],'r*',df3[0],df3[1],'gD')plt.show()
五、聚类模型评估
① 轮廓系数
# 5.1 使用轮廓系数法评价K-Means聚类模型 --- 畸变程度from sklearn.metrics import silhouette_scoresilhouetteScore = []for i in range(2,15): # 构建并训练模型 kmeans = KMeans(n_clusters=i,random_state=123).fit(data) score = silhouette_score(data,kmeans.labels_) silhouetteScore.append(score)plt.figure(figsize=(10,6))plt.plot(range(2,15),silhouetteScore,linewidth=1.5,linestyle='-')plt.show()
- 在这里我们获取轮廓系数
score是所有样本的轮廓系数均值
,如果要获取每个样本的轮廓系数应当使用silhouette_samples
。这里是针对超参数k(n_cluster)
,所以采用轮廓系数均值进行评估。 - 聚类数目为2、3和4、5的时候,图形的畸变程度最大。本身数据集就是关于3种鸢尾花的,侧面说明了聚类为3的时候效果较好。
② 卡林斯基 - 哈拉巴斯指数
# 5.2 卡林斯基-哈拉巴斯指数from sklearn.metrics import calinski_harabasz_scorechs = []for i in range(2,15): # 构建聚类模型 kmeans = KMeans(n_clusters=i,random_state=112).fit(data) chsScore = calinski_harabasz_score(data,kmeans.labels_) chs.append(chsScore)plt.figure(figsize=(10, 8))plt.plot(range(2, 15), chs, linewidth=1.5, linestyle='-')plt.show()
- 由图可以看出,当
n_cluster=3
的时候,FMI评分最高,聚类效果较好。
③ FMI评价法
# 5.3 FMI评价法 --- 需要有真实标签from sklearn.metrics import fowlkes_mallows_scorefms = []for i in range(2,15): # 构建聚类模型 kmeans = KMeans(n_clusters=i,random_state=112).fit(data) fmsScore = fowlkes_mallows_score(y,kmeans.labels_) fms.append(fmsScore)plt.figure(figsize=(10, 8))plt.plot(range(2, 15), fms, linewidth=1.5, linestyle='-')plt.show()
- 由图可以看出,当
n_cluster=3
的时候,FMI评分最高,聚类效果较好。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月23日 19时57分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
copy_{to, from}_user()的思考
2019-03-05
Web前端安全策略之CSRF的攻击与防御
2019-03-05
纯客户端页面关键字搜索高亮jQuery插件
2019-03-05
linux运维中常用的命令
2019-03-05
M1芯片的macbook安装王者荣耀,原神,崩坏方法
2019-03-05
Java温故而知新-反射机制
2019-03-05
eclipse引用sun.misc开头的类
2019-03-05
firefox中angular2嵌套发送请求问题
2019-03-05
【mybatis3】调试/断点打印日志
2019-03-05
C++
2019-03-05
[CTFSHOW]PHP特性
2019-03-05
navigator对象
2019-03-05
关于EFI系统分区(ESP)你应该知道的3件事
2019-03-05
5.Mybatis复杂映射开发
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
环境配置 jdk_mysql_myeclipse8.6
2019-03-05
Session验证码的实现(2018-7-3)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
日志写入xml上传ftp遇到的问题
2019-03-05
下载任意版本vmware对应的vmware tools
2019-03-05