1. 应用K-means算法进行图片压缩
代码如下:
from sklearn.datasets import load_sample_image
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import matplotlib.image as img
import numpy as np
flower = img.imread('E:\flower.jpg')#读取图片
#plt.imshow(flower)
#plt.show()
image = flower[::3,::3]
X = image.reshape(-1,3)
print(flower.shape,image.shape,X.shape)
n_colors = 45 #把像素分为45类
model = KMeans(n_colors)
labels = model.fit_predict(X)#训练并预测 一维数组 元素的类别
colors = model.cluster_centers_#二维(45,3)
new_image = colors[labels].reshape(image.shape)
plt.imshow(image)
plt.show()
plt.imshow(new_image.astype(np.uint8))
plt.show()
plt.imshow(new_image.astype(np.uint8)[::3,::3])
plt.show()
img.imsave('E://flower02.jpg',new_image)
截图如下:
压缩图片生成:以聚类中收替代原像素颜色,还原为二维:
flower截图: flower02截图:
观察压缩图片的文件大小,占内存大小
2. 观察学习与生活中可以用K均值解决的问题
我想的是可以用K均值,统计出餐厅里各个时间段客人点餐的菜品数目,来更好的准备,
比如在什么时候要准备更多的菜品1,在其他时候要准备更多的菜品2
以下是我的代码以及结果截图:
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
#读取文件
path = r'E:大3 学期2机器学习meal_order.xlsx'
df = pd.read_excel(path)
#选取文件中需要的数据进行KMeans处理
data = df[['amounts','place_order_time']]
data.dtypes
data['place_order_time'] = pd.to_numeric(data['place_order_time'])
data['place_order_time'].dtype
data.dtypes
data
ests = KMeans(n_clusters=3) #取3个中心点,分成3类
ests.fit(data) #训练数据
y_kmeanss = ests.predict(data) #预测数据
#把每个分类放进列表,输出菜单名称
order0 = np.array(df[y_kmeanss==0]['dishes_name'])
order0
order1 = np.array(df[y_kmeanss==1]['dishes_name'])
order1
order2 = np.array(df[y_kmeanss==2]['dishes_name'])
order2
#统计菜品数量,Counter是一个容器对象,主要的作用是用来统计散列对象
from collections import Counter
a = Counter(order0)
print('中午客人点的比较多的菜品排序:',a)
b = Counter(order1)
print('下午客人点的比较多的菜品排序:',b)
c = Counter(order2)
print('晚上客人点的比较多的菜品排序:',c)
截图:
表格中选取需要的数据进行KMeans处理
预测分类之后的结果:
最后结果: