zoukankan      html  css  js  c++  java
  • 4.K均值算法

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

    读取一张图片

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

    用kmeans对图片像素颜色进行聚类

    获取每个像素的颜色类别,每个类别的颜色

    压缩图片生成:以聚类中收替代原像素颜色,还原为二维

    观察压缩图片的文件大小,占内存大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    from sklearn.datasets import load_sample_image
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    from pylab import mpl
    import sys
    import numpy as np
    import matplotlib.image as img
    # 指定字体,解决plot不能显示中文的问题
    mpl.rcParams['font.sans-serif'= ['SimHei']
    china = load_sample_image("china.jpg")  # 读取一张图片
    plt.imshow(china)
    plt.title("原图片")
    plt.show()  # 显示图片
    img.imsave('D://img//china.jpg', china) 
    print("图片占内存大小", sys.getsizeof(china))  
    print("图片数据结构", china.shape) 
    image = china[::3, ::3]
    print("降低分辨率后图片的数据结构", image.shape)
    = image.reshape(-13)    # 线性化
    print("线性化后的数据结构", x.shape)
    # 用kmeans对图片像素颜色进行聚类
    n_colors = 64  # (255,255,255)
    model = KMeans(n_colors)  # 64类聚类中心
    labels = model.fit_predict(x)   # 每个像素的颜色类别
    print("每个像素的颜色类别的数据结构", labels.shape)
    colors = model.cluster_centers_  # 每个类别的颜色
    print("每个类别的颜色的数据结构", colors.shape)
    new_image = colors[labels]  # 以聚类中收替代原像素颜色
    new_image = new_image.reshape(image.shape)  # ,还原为二维数组
    print("压缩图片占内存大小", sys.getsizeof(new_image))   # 压缩图片占内存大小
    new_image = new_image.astype(np.uint8)
    plt.imshow(new_image)
    plt.title("压缩后的图片")
    plt.show()  # 显示图片
    img.imsave('D://img//new_china.jpg', new_image)   # 保存图片,查看压缩图片的文件大小

      

     

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

    从数据-模型训练-测试-预测完整地完成一个应用案例。

    这个案例会作为课程成果之一,单独进行评分。

    复制代码
    from sklearn.cluster import KMeans #导入kmeans算法
    airline_scale = np.load('../tmp/airline_scale.npz')['arr_0']
    k = 5 ## 确定聚类中心数
    #构建模型
    kmeans_model = KMeans(n_clusters = k,n_jobs=4,random_state=123)
    fit_kmeans = kmeans_model.fit(airline_scale)   #模型训练
    kmeans_model.cluster_centers_ #查看聚类中心
    
    kmeans_model.labels_ #查看样本的类别标签
    
    #统计不同类别样本的数目
    r1 = pd.Series(kmeans_model.labels_).value_counts()
    print('最终每个类别的数目为:
    ',r1)

    复制代码

     

  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/a188182/p/13057563.html
Copyright © 2011-2022 走看看