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)