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

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处理

 预测分类之后的结果:

最后结果:

原文地址:https://www.cnblogs.com/zhengjieting/p/12729285.html