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

读取一张图片

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

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

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

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

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

from sklearn.datasets import load_sample_image
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import sys
import matplotlib.image as img
import numpy as np


a = load_sample_image("china.jpg")
#
abc = img.imread('D://abc.jpg')
b = sys.getsizeof(abc)
#print("图片占内存的大小", b)
#print('原图片文件大小:', abc.size)
#print('原图片的数据结构:\n', abc)
plt.imshow(abc)
#plt.show()

abc = abc[::3, ::3] # 降低图片的分辨率
X = abc.reshape(-1, 3)
#print(abc.shape, X.shape)
n_colors = 64
model = KMeans(n_colors)
labels = model.fit_predict(X)
colors = model.cluster_centers_

new_image = colors[labels].reshape(abc.shape)
new_image = new_image.astype(np.uint8)
print('压缩图片文件大小:', new_image.size)
print('压缩图片占内存大小:', sys.getsizeof(new_image))
print('压缩图片的数据结构:\n', new_image)

 

 

 

 

 

 

 

 

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

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

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

import pandas as pd
import numpy as np
from pylab import mpl, clf
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans

mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
data = pd.read_csv('./201706120059软一何斌文1.csv', encoding='utf-8')
x = data[['建筑面积']]
y = data[['总价']]
plt.scatter(x, y, c="red", marker='o', label='see')
plt.xlabel('建筑面积')
plt.ylabel('总价')
plt.legend(loc=2)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)
KM = KMeans(n_clusters=4)
KM.fit(X_train, y_train)
z = KM.predict(X_test)
# plt.scatter(y[:, 0],y[:, 0],c=z, s=50,cmap='rainbow')
# plt.show()
print(z)

 

 

 

 

 

posted on 2020-04-19 18:17  hebinwen  阅读(130)  评论(0编辑  收藏  举报