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

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

    读取一张图片

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

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

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

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

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

    #导入所需要用到的包
    from sklearn.datasets import load_sample_image
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.image as img
    import sys
    #载入原图
    china = load_sample_image('china.jpg')
    #展示图片
    plt.imshow(china)
    plt.show()
    #降低原图的分辨率
    china0 = china[::3,::3]
    #展示降低分辨率后的图片
    plt.imshow(china0)
    plt.show()
    #设置图片数组的形状
    x = china0.reshape(-1,3)
    #设置压缩图片的参数
    n_colors=64
    model=KMeans(n_colors)
    labels=model.fit_predict(x)
    colors=model.cluster_centers_
    #用聚类中心的颜色代替原来的颜色值
    new_china = colors[labels].reshape(china0.shape)
    new_china = new_china.astype(np.uint8)
    #展示新图的结果
    plt.imshow(new_china)
    plt.show()
    #分别显示获得原图新图所占内存大小
    print("原图所占内存大小为:", sys.getsizeof(china))
    print("新图所占内存大小为:", sys.getsizeof(new_china))
    #分别保存原图新图到根目录
    img.imsave('./china.jpg', china)
    img.imsave('./new_china.jpg', new_china)
    #提示成功
    print('保存成功!')

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

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

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

    #(1)加载数据
    from sklearn.datasets import load_iris
    from sklearn.cluster import KMeans
    data = load_iris()
    #(2)构建模型
    model =  KMeans(n_clusters=3).fit(data['data'])
    model.labels_
    model.cluster_centers_
    #(3)查看聚类效果
    import matplotlib.pyplot as plt
    for i in range(3):
        plt.scatter(data['data'][model.labels_ == i, 0], data['data'][model.labels_ == i, 1])
    plt.show()
    #(4)使用轮廓系数指标评估聚类模型
    from sklearn.metrics import silhouette_score
    silhouette_score(data['data'], model.labels_)
    for k in range(2, 9):
        model = KMeans(n_clusters=k).fit(data['data'])
        print(k, silhouette_score(data['data'], model.labels_))

     

    根据循环的次数,预估的结果不同

     

  • 相关阅读:
    不要做优化了!让编译器去干吧!
    arp欺骗进行流量截获-2
    arp欺骗进行流量截获-1
    Python3网络爬虫(1):利用urllib进行简单的网页抓取
    python3.5opencv3图像文字标注
    python3.5连接MySQL
    MySQL安装
    Matplotlib python 基本用法
    servlet表单中get和post方法的区别
    任意目录下启动tomcat
  • 原文地址:https://www.cnblogs.com/hoioh/p/12732381.html
Copyright © 2011-2022 走看看