机器学习入门与Python实战(八):K均值聚类KMeans

目录

现实问题思考:数据分类与聚类

K均值聚类

核心流程

K均值聚类 (KMeans) VS K近邻分类 (KNN)

K均值聚类实现图像分割

知识巩固

Python实战:KMeans实现图像分割

拓展学习


现实问题思考:数据分类与聚类

机器学习入门与Python实战(八):K均值聚类KMeans_第1张图片

没有标签的情况下实现聚类的一个思路:给出中心点,根据数据到中心点距离判断类别

K均值聚类

在样本数据空间中选取K个点作为中心,计算每个样本到各中心的距离,根据距离确定数据类别,是聚类算法中最为基础但也最为重要的算法。

机器学习入门与Python实战(八):K均值聚类KMeans_第2张图片

中心点会根据类别内样本数据分布进行更新

核心流程

机器学习入门与Python实战(八):K均值聚类KMeans_第3张图片

核心流程:

1、基于要求、观察或经验确定聚类的个数k

2、确定k个中心

3、计算样本到各中心点距离

4、根据距离确定各个样本点所属类别

5、计算同类别样本的中心点,并将其设定为新的中心

6、重复步骤3-5直到收敛(中心点不再变化)

机器学习入门与Python实战(八):K均值聚类KMeans_第4张图片

机器学习入门与Python实战(八):K均值聚类KMeans_第5张图片

K均值聚类 (KMeans) VS K近邻分类 (KNN)

机器学习入门与Python实战(八):K均值聚类KMeans_第6张图片

K均值聚类实现图像分割

图像分割就是把图像分成若干个特定的、具有独特性质的区域的技术,是由图像处理到图像分析的关键步骤。

机器学习入门与Python实战(八):K均值聚类KMeans_第7张图片

不得不面对的问题:

阈值如何确定?需要确定几个阈值?只用阈值是否会遗漏其他重要信息?

K均值聚类帮你快速实现图像分割!

机器学习入门与Python实战(八):K均值聚类KMeans_第8张图片

知识巩固

思考:三张分割图哪张k值最大,哪张最小?观察并思考其差异及原因。

机器学习入门与Python实战(八):K均值聚类KMeans_第9张图片

Python实战:KMeans实现图像分割

基础环境: Python语言;安装核心工具包numpy、pandas、sklearn、matplotlib;环境管理软件Anaconda;Jupyter notebook

环境配置参考:机器学习入门与Python实战核心工具篇:pip源、python、anaconda、工具包(完整版)https://blog.csdn.net/dfly_zx/article/details/110188923

任务:加载本地图像1.jpg,建立Kmeans模型实现图像分割。

机器学习入门与Python实战(八):K均值聚类KMeans_第10张图片

1、实现图像加载、可视化、维度转化,完成数据的预处理;

2K=3建立Kmeans模型,实现图像数据聚类;

3、对聚类结果进行数据处理,展示分割后的图像;

4、尝试其他的K值(K=48),对比分割效果,并思考导致结果不同的原因;

5、使用新的图片,对其实现图像分割

#图像的加载与展示
import numpy as np
import matplotlib.pyplot as plt
from skimage import io as io
img = io.imread('1.jpg')
plt.imshow(img)

机器学习入门与Python实战(八):K均值聚类KMeans_第11张图片

#查看数据结果与维度
print(type(img))
print(img.shape)

#查看数据内容
print(img)

机器学习入门与Python实战(八):K均值聚类KMeans_第12张图片

#维度存储
img_width = img.shape[1]
img_height = img.shape[0]
print(img_width,img_height)

#数据维度转化
img_data = img.reshape(-1,3)
print(img.shape,img_data.shape)
print(img_data)

机器学习入门与Python实战(八):K均值聚类KMeans_第13张图片

#X赋值
X = img_data
#模型建立与训练
from sklearn.cluster import KMeans
model = KMeans(n_clusters=3,random_state=0)
model.fit(X)

#聚类结果预测
label = model.predict(X)
print(label)
import pandas as pd
print(pd.value_counts(label))

机器学习入门与Python实战(八):K均值聚类KMeans_第14张图片

#结果数据的维度转化
label = label.reshape([img_height,img_width])
print(label)
print(label.shape)

机器学习入门与Python实战(八):K均值聚类KMeans_第15张图片

#后续的灰度处理
label = 1/(label+1)
print(label)

机器学习入门与Python实战(八):K均值聚类KMeans_第16张图片

#结果的可视化
plt.imshow(label)

机器学习入门与Python实战(八):K均值聚类KMeans_第17张图片

#图像存储到本地
io.imsave('result_k3.png',label)
model = KMeans(n_clusters=4,random_state=0)
model.fit(X)
label = model.predict(X)
#结果数据的维度转化
label = label.reshape([img_height,img_width])
#后续的灰度处理
label = 1/(label+1)
#结果的可视化
plt.imshow(label)
#图像存储到本地
io.imsave('result_k4.png',label)

机器学习入门与Python实战(八):K均值聚类KMeans_第18张图片

model = KMeans(n_clusters=8,random_state=0)
model.fit(X)
label = model.predict(X)
#结果数据的维度转化
label = label.reshape([img_height,img_width])
#后续的灰度处理
label = 1/(label+1)
#结果的可视化
plt.imshow(label)
#图像存储到本地
io.imsave('result_k8.png',label)

机器学习入门与Python实战(八):K均值聚类KMeans_第19张图片

KMeans实现图像分割实战summary:

1、使用skimage模块,实现了图像的加载、可视化,并完成数据预处理;
2、通过建立KMeans模型,实现了图像数据的聚类;
3、对图像聚类结果进行后续处理后,完成了图像分割,并将结果可视化;
4、尝试增大K值,观察发现随着K值增大分割后的图像将展现更多的细节信息

核心算法参考链接:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html


拓展学习

如果现在就想开始学习机器学习,你还可以:

1、添加微信:ai_flare,领取Python编程课(AI方向)、Python实现机器学习,免费领取(仅限前100名)

2、人工智能学习路线:专为AI小白设计的人工智能实战课 - Python3入门人工智能 基础+实战 学习视频教程-CSDN学院

你可能感兴趣的:(机器学习,人工智能,python,机器学习,kmeans算法,聚类)