zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    升讯威周报与工时统计系统 V3
    浅谈互联网时代的一万小时定律:方向与格局更重要
    GitHub开源:SQLite 增强组件 Sheng.SQLite.Plus
    GitHub开源:升讯威 SQLite 增强组件 Sheng.SQLite.Plus
    centos7 配置IPV6
    Vertica节点故障后的恢复经过
    windows下杀掉指定端口的应用
    解决QT Fault tolerant heap shim问题
    vertica生成查询计划失败:Request size too big
    IDEA配置aliyun的maven源
  • 原文地址:https://www.cnblogs.com/Azan1999/p/12718728.html
Copyright © 2011-2022 走看看