python机器学习——Kmeans聚类

聚类基本思想

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

Kmeans 介绍

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

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

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

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

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

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

在这里插入图片描述

python 实现

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

# 分别导入 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.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值