作业4 K均值算法--应用

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

读取一张图片

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

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

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

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

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

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

#1、读取一张图片
plt.rcParams['font.sans-serif'] = ['SimHei']#指定中文字体
image = img.imread("./1.jpeg") #读取图片
plt.imshow(image)
plt.title("原图片")
plt.show() #显示原图片

#2、观察图片文件大小,占内存大小,图片数据结构,线性化
image = image[::3,::3] #降低原图片的分辨率
x = image.reshape(-1,3)
print('原图片文件大小为:',image.size) #查看原图片文件大小
print('原图片占内存大小为:',sys.getsizeof(image)) #查看原图片占内存大小
print('原图片线性化为:',x.shape) #查看原图片线性化的结构
print('原图片的数据结构为:',image) #查看原图片的数据结构

#3、用kmeans对图片像素颜色进行聚类、压缩图片
n_colors = 64
model = KMeans(n_colors) #设定64类聚类中心
labels = model.fit_predict(x)  #获取每个像素的颜色类别
colors = model.cluster_centers_  # 获取每个类别的颜色
new_image = colors[labels].reshape(image.shape)  #以聚类中收替代原像素颜色,还原为二维
print('压缩图片文件大小为:',new_image.size) #查看压缩图片文件大小
print('压缩图片占内存大小为:',sys.getsizeof(new_image)) #查看压缩图片占内存大小
print('压缩图片的数据结构为:',new_image) #查看压缩图片的数据结构
new_image = new_image.astype(np.uint8) #把颜色平均值转换为整数
plt.imshow(new_image)
plt.title('压缩图片')
plt.show() #显示图片
img.imsave('D://大三下/机器学习/2.jpeg',new_image) #保存到本地

(1) 关于原图:

(2)关于压缩图片:

(3)原图和压缩图片的大小比较:

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

本题主要研究的数据是瓜子网二手车(之前的课程用过),研究的内容是预测车的总价和车的表显公里之间的关系,给想购车的用户有了一定的参考。

#201706120001 温嘉文 软件工程1701班

from sklearn.model_selection import train_test_split
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

#1、读取所需的数据文件(二手车)
filename = open('201706120001温嘉文.csv')
data = pd.read_csv(filename)

#2、划分训练集和测试集
x = data.iloc[: ,[3]] #获取“总价”
y = data.iloc[:,1] # 获取“表显公里”
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=5) #划分成功

#3、对数据进行kmeans聚类计算
km_model = KMeans(n_clusters=3)  #构造模型
km_model.fit(x_train,y_train)  #训练模型
pre = km_model.predict(x_test)  #预测模型
print('模型的预测值:',pre) #输出预测值

#4、对测试好的值进行绘图,总价与表显公里的关系
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.scatter(x_test,y_test,s=60,c='pink')
plt.xlabel('总价/万')
plt.ylabel('表显公里/万')
plt.title("总价与表显公里的关系如下:")
plt.show()

运行结果:

(1)读取数据

(2)输出预测值

(3)绘图

原文地址:https://www.cnblogs.com/carmen-/p/12725931.html