1. 应用K-means算法进行图片压缩
读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小


![]()

源代码:
#加载图片
from sklearn.datasets import load_sample_image
import matplotlib.pyplot as plt
china=load_sample_image("china.jpg") #获取一个图片
plt.imshow(china)
plt.show()
import sys
print("原图片文件大小为:",china.size)
print(‘原图片内存大小:‘,sys.getsizeof(china))
print(‘原图片数据结构:‘,china.shape)
image=china[::3,::3]#降低分辨率,每隔3个数取一个数据
x=image.reshape(-1,3)#线性化,列数为3
print(china.shape,image.shape,x.shape) #输出原图数据结构,降低后的数据结构及线性化后的数据结构
plt.imshow(china)
plt.show()
from sklearn.cluster import KMeans
import numpy as np
n_colors=64 #聚类,把颜色分为64类
model=KMeans(n_colors) #建模
label=model.fit_predict(x)#获取数据,一维数组,255*255*255个元素的类别
colors=model.cluster_centers_#划分聚类,把上面的元素归为64类颜色,二维(64,3)
new_image=colors[label].reshape(image.shape)#代替,用聚类后的64种颜色代替原来的颜色值,还原为二维。
plt.imshow(new_image.astype(np.uint8))#把颜色平均值转为整数
plt.show()#新图
print("压缩后图片文件大小为:",new_image.size)
print(‘压缩后图片内存大小:‘,sys.getsizeof(new_image))
print(‘压缩后图片数据结构:‘,new_image.shape)
import matplotlib.image as img
img.imsave(‘D:\\图片\\new_china.jpg‘,new_image.astype(np.uint8)) #保存新图片
2. 观察学习与生活中可以用K均值解决的问题。
从数据-模型训练-测试-预测完整地完成一个应用案例。
这个案例会作为课程成果之一,单独进行评分。
数据:
|
表4-1天气与打球关联关系表 |
|||||
|
Day |
Outlook |
Temp |
Humidity |
Windy |
Play |
|
D1 |
Sunny |
Hot |
High |
Weak |
No |
|
D2 |
Sunny |
Hot |
High |
Strong |
No |
|
D3 |
Overcast |
Hot |
High |
Weak |
Yes |
|
D4 |
Rain |
Mild |
High |
Weak |
Yes |
|
D5 |
Rain |
Cool |
Normal |
Weak |
Yes |
|
D6 |
Rain |
Cool |
Normal |
Strong |
No |
|
D7 |
Overcast |
Cool |
Normal |
Strong |
Yes |
|
D8 |
Sunny |
Mild |
High |
Weak |
No |
|
D9 |
Sunny |
Cool |
Normal |
Weak |
Yes |
|
D10 |
Rain |
Mild |
Normal |
Weak |
Yes |
|
D11 |
Sunny |
Mild |
Normal |
Strong |
Yes |
|
D12 |
Overcast |
Mild |
High |
Strong |
Yes |
|
D13 |
Overcast |
Hot |
Normal |
Weak |
Yes |
|
D14 |
Rain |
Mild |
High |
Strong |
No |


源代码
import pandas as pd
#读取数据并进行预处理,非数值型数据数据化
data=pd.read_csv("C:/Users/AAAA/PycharmProjects/untitled/data/data.csv")
data.loc[data[‘Outlook‘]==‘Sunny‘,‘Outlook‘]=1
data.loc[data[‘Outlook‘]==‘Overcast‘,‘Outlook‘]=2
data.loc[data[‘Outlook‘]==‘Rain‘,‘Outlook‘]=3
data[‘Outlook‘]=data[‘Outlook‘].astype(‘int‘)
data.loc[data[‘Temp‘]==‘Hot‘,‘Temp‘]=1
data.loc[data[‘Temp‘]==‘Mild‘,‘Temp‘]=2
data.loc[data[‘Temp‘]==‘Cool‘,‘Temp‘]=3
data[‘Temp‘]=data[‘Temp‘].astype(‘int‘)
data.loc[data[‘Humidity‘]==‘High‘,‘Humidity‘]=0
data.loc[data[‘Humidity‘]==‘Normal‘,‘Humidity‘]=1
data[‘Humidity‘]=data[‘Humidity‘].astype(‘int‘)
data.loc[data[‘Windy‘]==‘Weak‘,‘Windy‘]=0
data.loc[data[‘Windy‘]==‘Strong‘,‘Windy‘]=1
data[‘Windy‘]=data[‘Windy‘].astype(‘int‘)
data.loc[data[‘Play‘]==‘No‘,‘Play‘]=0
data.loc[data[‘Play‘]==‘Yes‘,‘Play‘]=1
data[‘Play‘]=data[‘Play‘].astype(‘int‘)
from sklearn.cluster import KMeans
from sklearn.model_selection import train_test_split
X = data.iloc[:,1:5] #训练集
Y = data.iloc[:,5] #测试集
data_tr, data_te , label_tr ,label_te = train_test_split(X,Y, test_size=0.2,random_state=1) #割分
knn_model=KMeans(n_clusters=2) #分为2类
knn_model.fit(data_tr,label_tr) #训练模型
y_pre=knn_model.predict(data_te) #测试模型
print(‘被预测的数组:‘, data_te)
print(‘预测结果:‘, y_pre)
原文:https://www.cnblogs.com/lcj170/p/12725863.html