首页 > 编程语言 > 详细

4.K均值算法--应用

时间:2020-04-19 03:21:16      阅读:51      评论:0      收藏:0      [点我收藏+]

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

 

一开始我是看直播回放把老师的代码放进去尝试运行,然后发现出现了一些问题,在百度后得到解决。

关于PIL的缺失的解决办法

https://blog.csdn.net/jacabe/article/details/80040338

然后在进行自己的图片压缩时,想给图片加标题,发现中文无法显示

关于标题中文显示乱码的问题

https://blog.csdn.net/weixin_45092662/article/details/102477032

 

以下为源代码:

import matplotlib.pyplot as plt
import matplotlib.image as ig
import numpy as np
import sys
from sklearn.cluster import KMeans


# 读取一张图片
pd = ig.imread(C:/Users/86186/Desktop/大三下/机器学习/pd.jpg)

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

print("原图片的文件大小", pd.size)
print("原图片的内存大小", sys.getsizeof(pd))


# 用kmeans对图片像素颜色进行聚类
# 获取每个像素的颜色类别,每个类别的颜色
# 压缩图片生成:以聚类中收替代原像素颜色,还原为二维
X = pd.reshape(-1, 3)  # 把二维的变成线性的
n_colors = 64  # 将图片分成64种颜色
model = KMeans(n_colors)  # 构建模型
labels = model.fit_predict(X)
colors = model.cluster_centers_  # 聚类中心


# 观察压缩图片的文件大小,占内存大小
# 解决中文显示问题
plt.rcParams[font.sans-serif] = [SimHei]
plt.rcParams[axes.unicode_minus] = False

new_image = colors[labels].reshape(pd.shape)
plt.imshow(pd)
plt.title("原图片")
plt.show()

plt.title("最终压缩后的图片")
plt.imshow(new_image.astype(np.uint8)[::3, ::3])
plt.show()

print("最终压缩的图片的文件大小", new_image.size)
print("最终压缩的图片的内存大小", sys.getsizeof(new_image))

结果如下:

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 

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

   现在的电商平台很多,我们需要选择值得依赖的电商平台进行网购,所以我认为可以对电商平台的数据进行K均值来分类判断。

这是我做的一份假数据

技术分享图片

 

以下为源代码

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

path = rC:\Users\86186\Desktop\大三下\机器学习\fake.xlsx

df = pd.read_excel(path)
data = np.array(df.iloc[:, 1:3].fillna(value=0).astype(int))
model = KMeans(n_clusters=3)
model.fit(data)
y = model.predict(data)
p0 = np.array(df[y == 0][平台名称])
print(p0)
p1 = np.array(df[y == 1][平台名称])
print(p1)
p2 = np.array(df[y == 2][平台名称])
print(p2)

# 解决中文显示问题
plt.rcParams[font.sans-serif] = [SimHei]
plt.rcParams[axes.unicode_minus] = False
# 绘制散点图查看分类情况
plt.title(各电商平台分类情况)
plt.scatter(df.iloc[:, 1], df.iloc[:, 1], c=y, s=50, cmap=gist_rainbow)
plt.show()

# 绘制条形图
plt.bar(x=range(df.shape[0]),
        height=df.iloc[:, 3])

# 添加y轴的标签
plt.xlabel(电商名称)
plt.ylabel(月销售量)
# 添加条形图的标题
plt.title(各电商平台销售量)
# 显示图形
plt.show()

 

 结果如下:

我把它们分成3类

技术分享图片

 

散点图

技术分享图片

 

 

直方图

技术分享图片

直方图这里的X轴,想显示中文的,但是总是报错,百度无果,因为时间的原因,就只能这样了。

 

 通过机器学习的模型训练预测,可以知道什么样的电商平台是更好的一个档次的,这样子就可以帮助我们在购物中得到一个好的平台的保障服务。

 

4.K均值算法--应用

原文:https://www.cnblogs.com/fzybk/p/12727266.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!