2020.4.17 K均值算法--应用

时间:2020-04-17
本文章向大家介绍2020.4.17 K均值算法--应用,主要包括2020.4.17 K均值算法--应用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. 应用K-means算法进行图片压缩

读取一张图片

观察图片文件大小,占内存大小,图片数据结构,线性化

用kmeans对图片像素颜色进行聚类

获取每个像素的颜色类别,每个类别的颜色

压缩图片生成:以聚类中收替代原像素颜色,还原为二维

观察压缩图片的文件大小,占内存大小

2. 观察学习与生活中可以用K均值解决的问题。

从数据-模型训练-测试-预测完整地完成一个应用案例。

这个案例会作为课程成果之一,单独进行评分。

1. 应用K-means算法进行图片压缩

①读取一张图片,使用内置图片flower;

②观察图片文件大小,占内存大小,图片数据结构,线性化;

   ③用kmeans对图片像素颜色进行聚类;

④获取每个像素的颜色类别,每个类别的颜色;

 ⑤压缩图片生成:以聚类中收替代原像素颜色,还原为二维;

 ⑥ 观察压缩图片的文件大小,占内存大小;

⑦压缩前后可视化结果对比;

 具体实现代码如下:

# -*- coding:utf-8 -*-
from sklearn.datasets import load_sample_image
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import sys
import numpy as np
import matplotlib.image as img
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块
##读取一张图片
image = load_sample_image("flower.jpg")
#查看图片
plt.imshow(image)
plt.show()

##观察图片文件大小,数据结构
print(sys.getsizeof(image))
print(image.shape)
##数据线性化
X = image.reshape(-1,3)
print(image.shape,X.shape)


###用kmeans对图片像素颜色进行聚类
n_colors = 64
K_model = KMeans(n_colors)
#每个像素的颜色类别,一维数组
label = K_model.fit_predict(X)
#每个类别的颜色,二维数组
colors = K_model.cluster_centers_
print(label.shape,colors.shape)

##压缩生成,还原为二维
new_image = colors[label].reshape(image.shape)
new_image.shape
new_image.size
#对比
sys.getsizeof(image)
sys.getsizeof(new_image)

#生成图像
plt.figure(figsize=(10,5))#画布
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title("压缩前的图像")
plt.subplot(1, 2, 2)
plt.imshow(new_image.astype(np.uint8))
plt.title("压缩后的图像")
plt.suptitle("压缩前后对比图")
plt.show()
#保存图像
img.imsave("./data/new_test.jpg",new_image.astype(np.uint8))

2. 观察学习与生活中可以用K均值解决的问题。

数据为某级某专业的两学期的绩点和通过率,通过该模型进行训练,分为三类学生,优等生,中等生,中等偏下生。使用sklearn库的kmeans函数进行预测

数据部分截图如下:

 代码运行截图:

 可视化截图:

 具体实现代码如下:

# -*- coding:utf-8 -*-

import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
data =np.loadtxt("./data/test.txt")

kmeans_model = KMeans(n_clusters=3)
kmeans_model.fit(data)
y_predict1 = kmeans_model.predict(data)
kmeans_model.cluster_centers_
kmeans_model.labels_
plt.scatter(data[:,2],data[:,4],c=y_predict1,s=50,cmap="rainbow")
plt.show()

原文地址:https://www.cnblogs.com/Azan1999/p/12718728.html