1. 应用K-means算法进行图片压缩
读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小
2. 观察学习与生活中可以用K均值解决的问题。
从数据-模型训练-测试-预测完整地完成一个应用案例。
这个案例会作为课程成果之一,单独进行评分。
解:
1.
from sklearn.cluster import KMeans from sklearn.datasets import load_sample_image import matplotlib.pyplot as plt import sys import matplotlib.image as img import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] # 读取一张照片 china=load_sample_image("china.jpg") # 显示原图片 plt.imshow(china) plt.show() print("数据结构:",china) print("线性化结构:",china.reshape(-1,3)) print("图片文件大小:",china.size) print("图片占内存大小:",sys.getsizeof(china)) plt.title("原图片") plt.imshow(china.astype(np.uint8)) plt.show() img.imsave('D:/china.jpg', china) # 对图片像素颜色进行聚类 china = china[::3, ::3] X = china.reshape(-1, 3) print(china.shape, X.shape) n_colors = 64 model = KMeans(n_colors) labels = model.fit_predict(X) # 获取每个像素的颜色类别 colors = model.cluster_centers_ # 获取每个类别的颜色 new_china = colors[labels].reshape(china.shape) # 以聚类中收替代原像素颜色,还原为二维 print("新图片文件大小:",new_china.size) print('新图片占内存大小:', sys.getsizeof(new_china)) print('新图片的数据结构:', new_china) plt.title("新图片") plt.imshow(new_china.astype(np.uint8)) plt.show() img.imsave('D:/new_china.jpg', new_china)
2.
import pandas as pd from sklearn.cluster import KMeans data = pd.read_csv('201706120040 柯尚明(已处理).csv') del data['Unnamed: 0'] # K-Mean算法 # 测试数据准备 data_x=data['装修'] datax=data.iloc[:,:5] datay=data.iloc[:,6:8] data_y=pd.concat([datax,datay],axis=1) # 构建模型 km_model=KMeans(n_clusters=3) #3类 print('K-Mean模型构建完成!') # 训练模型 km_model.fit(data_y) km_model.cluster_centers_ km_model.labels_ #查看聚类结果 print('K-Mean模型训练完成!')
选择要观察的数据:
查看结果: