目录
现实问题思考:数据分类与聚类
K均值聚类
核心流程
K均值聚类 (KMeans) VS K近邻分类 (KNN)
K均值聚类实现图像分割
知识巩固
Python实战:KMeans实现图像分割
拓展学习
没有标签的情况下实现聚类的一个思路:给出中心点,根据数据到中心点距离判断类别
在样本数据空间中选取K个点作为中心,计算每个样本到各中心的距离,根据距离确定数据类别,是聚类算法中最为基础但也最为重要的算法。
中心点会根据类别内样本数据分布进行更新
核心流程:
1、基于要求、观察或经验确定聚类的个数k
2、确定k个中心
3、计算样本到各中心点距离
4、根据距离确定各个样本点所属类别
5、计算同类别样本的中心点,并将其设定为新的中心
6、重复步骤3-5直到收敛(中心点不再变化)
图像分割就是把图像分成若干个特定的、具有独特性质的区域的技术,是由图像处理到图像分析的关键步骤。
不得不面对的问题:
阈值如何确定?需要确定几个阈值?只用阈值是否会遗漏其他重要信息?
K均值聚类帮你快速实现图像分割!
思考:三张分割图哪张k值最大,哪张最小?观察并思考其差异及原因。
基础环境: Python语言;安装核心工具包numpy、pandas、sklearn、matplotlib;环境管理软件Anaconda;Jupyter notebook
环境配置参考:机器学习入门与Python实战核心工具篇:pip源、python、anaconda、工具包(完整版)https://blog.csdn.net/dfly_zx/article/details/110188923
任务:加载本地图像1.jpg,建立Kmeans模型实现图像分割。
1、实现图像加载、可视化、维度转化,完成数据的预处理;
2、K=3建立Kmeans模型,实现图像数据聚类;
3、对聚类结果进行数据处理,展示分割后的图像;
4、尝试其他的K值(K=4、8),对比分割效果,并思考导致结果不同的原因;
5、使用新的图片,对其实现图像分割
#图像的加载与展示
import numpy as np
import matplotlib.pyplot as plt
from skimage import io as io
img = io.imread('1.jpg')
plt.imshow(img)
#查看数据结果与维度
print(type(img))
print(img.shape)
#查看数据内容
print(img)
#维度存储
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)
#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))
#结果数据的维度转化
label = label.reshape([img_height,img_width])
print(label)
print(label.shape)
#后续的灰度处理
label = 1/(label+1)
print(label)
#结果的可视化
plt.imshow(label)
#图像存储到本地
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)
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)
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学院