2020.4.17 K均值算法--应用
时间:2020-04-17
本文章向大家介绍2020.4.17 K均值算法--应用,主要包括2020.4.17 K均值算法--应用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 应用K-means算法进行图片压缩
读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小
2. 观察学习与生活中可以用K均值解决的问题。
从数据-模型训练-测试-预测完整地完成一个应用案例。
这个案例会作为课程成果之一,单独进行评分。
1. 应用K-means算法进行图片压缩
①读取一张图片,使用内置图片flower;
②观察图片文件大小,占内存大小,图片数据结构,线性化;
③用kmeans对图片像素颜色进行聚类;
④获取每个像素的颜色类别,每个类别的颜色;
⑤压缩图片生成:以聚类中收替代原像素颜色,还原为二维;
⑥ 观察压缩图片的文件大小,占内存大小;
⑦压缩前后可视化结果对比;
具体实现代码如下:
# -*- coding:utf-8 -*- from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib.pyplot as plt import sys import numpy as np import matplotlib.image as img from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块 ##读取一张图片 image = load_sample_image("flower.jpg") #查看图片 plt.imshow(image) plt.show() ##观察图片文件大小,数据结构 print(sys.getsizeof(image)) print(image.shape) ##数据线性化 X = image.reshape(-1,3) print(image.shape,X.shape) ###用kmeans对图片像素颜色进行聚类 n_colors = 64 K_model = KMeans(n_colors) #每个像素的颜色类别,一维数组 label = K_model.fit_predict(X) #每个类别的颜色,二维数组 colors = K_model.cluster_centers_ print(label.shape,colors.shape) ##压缩生成,还原为二维 new_image = colors[label].reshape(image.shape) new_image.shape new_image.size #对比 sys.getsizeof(image) sys.getsizeof(new_image) #生成图像 plt.figure(figsize=(10,5))#画布 plt.subplot(1, 2, 1) plt.imshow(image) plt.title("压缩前的图像") plt.subplot(1, 2, 2) plt.imshow(new_image.astype(np.uint8)) plt.title("压缩后的图像") plt.suptitle("压缩前后对比图") plt.show() #保存图像 img.imsave("./data/new_test.jpg",new_image.astype(np.uint8))
2. 观察学习与生活中可以用K均值解决的问题。
数据为某级某专业的两学期的绩点和通过率,通过该模型进行训练,分为三类学生,优等生,中等生,中等偏下生。使用sklearn库的kmeans函数进行预测
数据部分截图如下:
代码运行截图:
可视化截图:
具体实现代码如下:
# -*- coding:utf-8 -*- import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt data =np.loadtxt("./data/test.txt") kmeans_model = KMeans(n_clusters=3) kmeans_model.fit(data) y_predict1 = kmeans_model.predict(data) kmeans_model.cluster_centers_ kmeans_model.labels_ plt.scatter(data[:,2],data[:,4],c=y_predict1,s=50,cmap="rainbow") plt.show()
原文地址:https://www.cnblogs.com/Azan1999/p/12718728.html
- Oracle 免费的数据库--Database 快捷版 11g 安装使用与SOD框架对Oracle的CodeFirst支持
- 如何求最小三元组距离
- 如何将Pastebin上的信息应用于安全分析和威胁情报领域
- Optionsbleed 漏洞泄露 Apache Server 的内存信息
- 对两个有序数组进行合并
- No.016 3Sum Closest
- Java中实现解码字符串的方法,实用代码
- PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引
- No.015 3Sum
- Java 8新特性——提供了一种可以看作多重继承的默认方法
- WebSocket 学习笔记--IE,IOS,Android等设备的兼容性问题与代码实现
- 关于Shell你想知道的都在这儿
- Java中使用线程时,请不要忘记Spring TaskExecutor组件
- 常见.NET功能代码汇总
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Servlet技术2
- 你缺的不是天赋,而是亲和度
- TypeScript: 为什么必须学
- 一、环境搭建、以及聊聊更重要的...
- 四、作用域与作用域链
- 【从0到1学算法】递归
- 手把手教你创建 Spring MVC 实例
- 举一反三:三种问题,两个指针,一种方法
- torch.backends.cudnn.benchmark ?!
- jQuery ui中sortable draggable droppable的使用
- 阿里面试:看你springBoot用的比较溜来,说说springboot自动装配是怎么回事?
- CVPR:深度无监督跟踪
- Discourse 数据分发
- Discourse 如何备份到 S3
- Solr集群(即SolrCloud)搭建与使用