Sklearn K均值聚类
版权所有,转帖注明出处
章节
到目前为止,我们已经非常深入地了解了数据集,并且把它分成了训练子集与测试子集。
接下来,我们将使用聚类方法训练一个模型,然后使用该模型来预测测试子集的标签,最后评估该模型的性能。
聚类(clustering)是在一组未标记的数据中,将相似的数据(点)归到同一个类别中的方法。聚类与分类的最大不同在于分类的目标事先已知,而聚类则不知道。K均值聚类是聚类中的常用方法,它是基于点与点的距离来计算最佳类别归属,即靠得比较近的一组点(数据)被归为一类,每个聚类都有一个中心点。
我们首先创建聚类模型,对训练子集进行聚类处理,得到聚类中心点。然后使用模型预测测试子集的标签,预测时根据测试子集中的点(数据)到中心点的距离来进行分类。
创建模型
示例
创建聚类模型。
import numpy as np
from sklearn import datasets
# 加载 `digits` 数据集
digits = datasets.load_digits()
from sklearn.preprocessing import scale
# 对`digits.data`数据进行标准化处理
data = scale(digits.data)
# print(data)
# 导入 `train_test_split`
from sklearn.model_selection import train_test_split
# 数据分成训练集和测试集
# `test_size`:如果是浮点数,在0-1之间,表示测试子集占比;如果是整数的话就是测试子集的样本数量,`random_state`:是随机数的种子
X_train, X_test, y_train, y_test, images_train, images_test = train_test_split(data, digits.target, digits.images, test_size=0.33, random_state=42)
# 导入“cluster”模块
from sklearn import cluster
# 创建KMeans模型
clf = cluster.KMeans(init='k-means++', n_clusters=10, random_state=42)
# 将训练数据' X_train '拟合到模型中,此处没有用到标签数据y_train,K均值聚类一种无监督学习。
clf.fit(X_train)
cluster.KMeans的参数说明:
init='k-means++'- 指定初始化方法n_clusters=10- 聚类数量,分成10个类别random_state=42- 随机值种子
我们利用K均值聚类方法创建一个模型后,得到了每个聚类的中心点,测试时,可以根据测试子集中的点(数据)到中心点的距离来进行分类。
可以使用下面方法显示聚类中心点图像:
# 导入 matplotlib
import matplotlib.pyplot as plt
# 图形尺寸(英寸)
fig = plt.figure(figsize=(8, 3))
# 添加标题
fig.suptitle('Cluster Center Images', fontsize=14, fontweight='bold')
# 对于所有标签(0-9)
for i in range(10):
# 在一个2X5的网格中,在第i+1个位置初始化子图
ax = fig.add_subplot(2, 5, 1 + i)
# 显示图像
ax.imshow(clf.cluster_centers_[i].reshape((8, 8)), cmap=plt.cm.binary)
# 不要显示坐标轴
plt.axis('off')
# 显示图形
plt.show()
显示
测试模型
接下来预测测试子集的标签:
# 预测“X_test”的标签
y_pred=clf.predict(X_test)
# 打印出' y_pred '的前100个实例
print(y_pred[:100])
# 打印出' y_test '的前100个实例
print(y_test[:100])
输出
[0 3 3 6 8 9 8 9 8 8 4 2 7 1 2 4 3 7 3 8 2 8 3 7 4 0 3 8 0 3 2 3 9 2 2 0 3
2 7 0 0 3 4 3 0 4 3 1 0 3 7 4 3 8 0 1 3 1 1 2 1 2 3 8 2 3 7 1 7 3 3 3 3 7
7 1 2 8 3 3 3 1 8 3 3 1 0 2 2 3 4 9 4 3 3 9 3 2 2 7]
[6 9 3 7 2 1 5 2 5 2 1 9 4 0 4 2 3 7 8 8 4 3 9 7 5 6 3 5 6 3 4 9 1 4 4 6 9
4 7 6 6 9 1 3 6 1 3 0 6 5 5 1 9 5 6 0 9 0 0 1 0 4 5 2 4 5 7 0 7 5 9 5 5 4
7 0 4 5 5 9 9 0 2 3 8 0 6 4 4 9 1 2 8 3 5 2 9 0 4 4]
在上面的代码块中,预测测试集的标签,结果存储在y_pred中。然后打印出y_pred和y_test的前100个实例。可以看出模型预测的准确率并不高。
评估模型
接下来,我们将进一步对模型的性能进行评估,分析模型预测的正确性。
让我们打印一个混淆矩阵:
# 从“sklearn”导入“metrics”
from sklearn import metrics
# 用“confusion_matrix()”打印出混淆矩阵
print(metrics.confusion_matrix(y_test, y_pred))
输出
[[ 0 54 1 0 0 0 0 0 0 0]
[ 0 0 15 0 29 0 0 0 0 11]
[ 1 0 2 0 7 0 0 0 27 15]
[ 0 0 0 49 1 0 0 4 1 1]
[ 0 0 57 0 0 0 3 4 0 0]
[ 1 0 2 34 6 0 0 5 25 0]
[56 1 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 5 55 2 0]
[ 0 0 0 18 28 0 0 2 4 0]
[ 1 0 5 55 2 0 1 4 0 0]]
混淆矩阵
混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示,每一列代表预测值,每一行代表实际的类别。混淆矩阵对角线上的值表示预测值匹配数,其他位置表示错配的数量。例如第一行第二列是54,表示实际值是分类0,但预测值是分类1的错误预测发生了54次。
可以看出模型预测的准确率并不高:数字3预测对了49次,数字7预测对了55次,其他的都很低。
让我们继续打印一些常用的评估指标:
from sklearn.metrics import homogeneity_score, completeness_score, v_measure_score, adjusted_rand_score, adjusted_mutual_info_score, silhouette_score
print('% 9s' % 'inertia homo compl v-meas ARI AMI silhouette')
print('%i %.3f %.3f %.3f %.3f %.3f %.3f'
%(clf.inertia_,
homogeneity_score(y_test, y_pred),
completeness_score(y_test, y_pred),
v_measure_score(y_test, y_pred),
adjusted_rand_score(y_test, y_pred),
adjusted_mutual_info_score(y_test, y_pred),
silhouette_score(X_test, y_pred, metric='euclidean')))
输出:
inertia homo compl v-meas ARI AMI silhouette
48486 0.584 0.662 0.621 0.449 0.572 0.131
- homogeneity_score 同质性指标,每个群集只包含单个类的成员。
- completeness_score 完整性指标,给定类的所有成员都分配给同一个群集。
- v_measure_score 同质性指标与完整性指标的调和平均。
- adjusted_rand_score 调整兰德指数
- adjusted_mutual_info_score 调整互信息
- silhouette_score 轮廓系数
关于这些指标的详情,限于篇幅,不再赘述,你可以参考相关资料。
Sklearn K均值聚类的更多相关文章
- 探索sklearn | K均值聚类
1 K均值聚类 K均值聚类是一种非监督机器学习算法,只需要输入样本的特征 ,而无需标记. K均值聚类首先需要随机初始化K个聚类中心,然后遍历每一个样本,将样本归类到最近的一个聚类中,一个聚类中样本特征 ...
- 机器学习之路:python k均值聚类 KMeans 手写数字
python3 学习使用api 使用了网上的数据集,我把他下载到了本地 可以到我的git中下载数据集: https://github.com/linyi0604/MachineLearning 代码: ...
- k均值聚类算法原理和(TensorFlow)实现
顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律. 我们知道,在机器学习中,有三种不同的学习模式:监督学习.无监督学习和强化学习: 监督学习,也 ...
- 【转】算法杂货铺——k均值聚类(K-means)
k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...
- 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测
据我们所知,有‘已知的已知’,有些事,我们知道我们知道:我们也知道,有 ‘已知的未知’,也就是说,有些事,我们现在知道我们不知道.但是,同样存在‘不知的不知’——有些事,我们不知道我们不知道. 上一章 ...
- 机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例
k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定 ...
- Python实现kMeans(k均值聚类)
Python实现kMeans(k均值聚类) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=> ...
- 机器学习理论与实战(十)K均值聚类和二分K均值聚类
接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...
- 第十篇:K均值聚类(KMeans)
前言 本文讲解如何使用R语言进行 KMeans 均值聚类分析,并以一个关于人口出生率死亡率的实例演示具体分析步骤. 聚类分析总体流程 1. 载入并了解数据集:2. 调用聚类函数进行聚类:3. 查看聚类 ...
随机推荐
- jqGrid 重新加载数据
参考:https://blog.csdn.net/u012746051/article/details/52949353 $("#列表区域id").jqGrid('clearGri ...
- Zabbix在Docker中的应用和监控
目录 Zabbix在Docker中的应用和监控 一.如何使Zabbix跑在Docker里 1.Docker基础环境配置 2.Docker-compose安装配置 3.启动zabbix server 4 ...
- LIS问题
LIS定义LIS(Longest Increasing Subsequence)最长上升子序列 .一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的. ...
- java文件相关(文件追加内容、文件内容清空、文件内容读取)
https://blog.csdn.net/xnz0616/article/details/39137177 1.文件内容追加 // 在已有的文件后面追加信息 public static void a ...
- Linux学习《第五章用户文件权限管理》之补充学习
- 第二单元总结:基于synchronize锁的简单多线程设计
单元统一的多线程设计策略 类的设计 电梯 每部电梯为一个线程. 电梯从调度器接收原子指令,知晓自己的状态(内部的人/服务的人.运行方向.所在楼层) 原子指令包括且仅包括: 向上走一层 / 向下走一层 ...
- 2.12 学习总结 之 表单校验插件validate
一.说在前面 昨天 学习了ajax的相关知识 今天 学习表单校验插件validate, 并使用ajax 自定义校验规则 二.validate 插件 1.网络上有许多成熟的插件共使用者参考,插件就是将j ...
- esxi命令行强行关闭虚拟机
目的:强行关闭通过前端界面无法关闭的ESXI虚拟机 环境:esxi5.1-esxi6.5 背景:如果esxi下面某一台vm死机了,并且esxi的控制台卡死不能用,为了不影响同一个esx下其他的vm正常 ...
- springboot的maven多模块项目架构微服务搭建——依赖方式的多模块演化为微服务项目
在上一篇依赖方式多模块的基础上对项目进行改造.主要改造user-service项目,service要配置mapper.mybatis及数据库相关的东西,后面的接口消费方user就不再需要了 注意:以下 ...
- 【pwnable.kr】 [simple login]
Download : http://pwnable.kr/bin/login Running at : nc pwnable.kr 9003 先看看ida里面的逻辑. 比较重要的信息时input变量再 ...