4.K均值算法--应用

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

读取一张图片

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

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

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

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

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

#导入所需要用到的包
from sklearn.datasets import load_sample_image
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.image as img
import sys
#载入原图
china = load_sample_image('china.jpg')
#展示图片
plt.imshow(china)
plt.show()
#降低原图的分辨率
china0 = china[::3,::3]
#展示降低分辨率后的图片
plt.imshow(china0)
plt.show()
#设置图片数组的形状
x = china0.reshape(-1,3)
#设置压缩图片的参数
n_colors=64
model=KMeans(n_colors)
labels=model.fit_predict(x)
colors=model.cluster_centers_
#用聚类中心的颜色代替原来的颜色值
new_china = colors[labels].reshape(china0.shape)
new_china = new_china.astype(np.uint8)
#展示新图的结果
plt.imshow(new_china)
plt.show()
#分别显示获得原图新图所占内存大小
print("原图所占内存大小为:", sys.getsizeof(china))
print("新图所占内存大小为:", sys.getsizeof(new_china))
#分别保存原图新图到根目录
img.imsave('./china.jpg', china)
img.imsave('./new_china.jpg', new_china)
#提示成功
print('保存成功!')

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

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

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

#(1)加载数据
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
data = load_iris()
#(2)构建模型
model =  KMeans(n_clusters=3).fit(data['data'])
model.labels_
model.cluster_centers_
#(3)查看聚类效果
import matplotlib.pyplot as plt
for i in range(3):
    plt.scatter(data['data'][model.labels_ == i, 0], data['data'][model.labels_ == i, 1])
plt.show()
#(4)使用轮廓系数指标评估聚类模型
from sklearn.metrics import silhouette_score
silhouette_score(data['data'], model.labels_)
for k in range(2, 9):
    model = KMeans(n_clusters=k).fit(data['data'])
    print(k, silhouette_score(data['data'], model.labels_))

 

根据循环的次数,预估的结果不同

 

posted @ 2020-04-19 18:10  HoioH  阅读(127)  评论(0编辑  收藏  举报