python机器学习——Kmeans聚类

news/2024/5/20 9:22:51 标签: 聚类, 机器学习, python

Kmeans聚类

聚类基本思想

背景: 由于获取带有标签的数据成本比较高(因为需要人工标记),而没有标签的数据却很容易获得。如果我们可以根据样本自身的属性或者说特征,给这写样本进行分类那么即节省了成本也达到了我们分类的目的。
思想: 我们举一个例子来阐述聚类的基本思想,例如我们让一个班级的人走到操场上去玩耍,我们会发现一个班级的几十个人会自动的聚成几人一组,体现出一种无以类聚,人以群分的特点。

Kmeans 介绍

K-Means 算法主要解决的问题如下图所示。我们可以看到,在图的左边有一些点,我们用肉眼可以看出来有四个点群,但是我们怎么通过计算机程序找出这几个点群来呢?于是就出现了我们的 K-Means 算法。

在这里插入图片描述
这个算法其实很简单,步骤如下:
① 从随机抽取的 k 个数据点作为初始的聚类中心(我们需要假设总共有K类数据);

② 计算每个数据点到每个中心的距离,并把每个数据点分配到距离它最近的种子中心;

③ 一旦所有的数据点都被分配完成,每个聚类中心按照本类的现有数据点重新计算(一般将各个类中的数据求平均值,作为新的聚类中心);

④ 上面过程不断重复,直到收敛(所有的簇不再改变)。

下面的图片来自维基百科,动态的展现了Kmeans算法的迭代过程(图中K为3,也就是我们希望将样本聚为3类)

在这里插入图片描述

python__22">python 实现

我们使用的数据是手写体数字图像分类,也就是有0~9这10个数字的8*8的像素矩阵,我们希望通过这64个像素数据对图像进行聚类,需要注意的是,我们这里没有用到标签(target)数据。

python"># 分别导入 numpy、matplotlib 以及 pandas,用于数学运算、作图以及数据分析。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 使用 pandas 分别读取训练数据与测试数据集。
digits_train = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra', header=None)
digits_test = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tes', header=None)
# 从训练与测试数据集上都分离出 64 维度的像素特征与 1 维度的数字目标。
X_train = digits_train[np.arange(64)]
y_train = digits_train[64]
X_test = digits_test[np.arange(64)]
y_test = digits_test[64]
# 从 sklearn.cluster 中导入 KMeans 模型。
from sklearn.cluster import KMeans
# 初始化 KMeans 模型,并设置聚类中心数量为 10。
kmeans = KMeans(n_clusters=10)
kmeans.fit(X_train)
# 逐条判断每个测试图像所属的聚类中心。
y_pred = kmeans.predict(X_test)

我们得到的聚类结果如下
在这里插入图片描述

参考

[1] https://en.wikipedia.org/wiki/K-means_clustering
[2] 范淼,李超.Python 机器学习及实践[M].清华大学出版社, 北京, 2016.


http://www.niftyadmin.cn/n/1446800.html

相关文章

秒杀系统架构

一、秒杀业务为什么难做 1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息); 2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据&…

让网站反向连接尽在你的掌握之中(转)

我们都知道,网站的反相链接数量,决定了网站的Link Popularity——当然,反相链接的质量也同样重要——从而最终影响到网站在搜索引擎中的排名。因此,在网站优化过程中,随时掌握有哪些网站、有多少网站建立了指向我们网站…

hysbz 2243 染色(树链剖分)

题目链接&#xff1a;hysbz 2243 染色 题目大意&#xff1a;略。 解题思路&#xff1a;树链剖分线段树的区间合并&#xff0c;但是区间合并比较简单&#xff0c;节点只要记录左右端点的颜色即可。 #include <cstdio> #include <cstring> #include <algorithm&g…

Greenplum峰会 2020 第一场 精彩回顾

获得技术资料内容&#xff0c;请访问Greenplum中文社区网站 为什么Greenplum如此受欢迎&#xff1f;主要基于以下三个原因&#xff1a; 蓬勃发展的开源社区的支持 支撑大规模并行数据分析的优异性能 多云&#xff0c;基础架构原生支持 其中第三条是我们于7月29日进行的Greenp…

R语言的下载安装

R语言的下载安装 1、打开R的官网&#xff08;https://www.r-project.org/&#xff09;点击dowmload R 2、选择一个中国的镜像 3、根据操作系统选择相应的R软件进行安装&#xff08;我用的windows&#xff09; 4、点击install R for the first time 5、点击Download R 4.0.…

防溢出提升权限攻击解决办法(转)

本文将为大家介绍在Microsoft系列(Win2k Win2k3)SERVER中如何简单快速的解决诸如反弹木马、Overflow溢出、提升权限、反弹Shell攻击类的安全威胁之详细防范设置步骤;读完本文&#xff0c;您将可以使您服务器免去被溢出、提升权限等安全威胁。   前言:   在骇客频频攻击、在…

带你了解可重定位Postgres

了解更多Greenplum技术干货&#xff0c;欢迎访问Greenplum中文社区网站 ​作为Greenplum Release Engineering团队的工程师&#xff0c;最近有机会深入探讨Postgres的构建系统。Greenplum Server基于Postgres&#xff0c;并从上游继承了构建系统。gp-releng团队正在创建可重定位…

Light OJ 1348 - Aladdin and the Return Journey(树链剖分)

题目链接&#xff1a;Light OJ 1348 - Aladdin and the Return Journey 题目大意&#xff1a;给定一棵树&#xff0c;两种操作 0 i j&#xff1a;ij路径上的权值和1 i v&#xff1a;将第i个节点的权值修改为v 解题思路&#xff1a;树链剖分的裸题。 #include <cstdio> …