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

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

    读取一张图片

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

    import sys
    import numpy as np
    from sklearn.datasets import load_sample_image
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    import matplotlib.image as img
    yellow = img.imread("E://yellow.jpg")
    print("图片的大小:", yellow.size)
    print("图片占用的内存:", sys.getsizeof(yellow))
    print("图片的数据结构:
    ", yellow)

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

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

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

    # 用kmeans对图片像素颜色进行聚类
    # 降低图片3倍的分辨率
    image = yellow[::3, ::3]
    plt.imshow(image)
    plt.show()
    S = image.reshape(-1, 3)  # reshape()里面的数组形状第一个为-1,第二个为第二维元素的数目
    print(image.shape, S.shape)
    n_colors = 64
    model = KMeans(n_colors)  # 对颜色进行聚类
    labels = model.fit_predict(S)  # 获取每个像素的颜色类别
    colors = model.cluster_centers_  # 每个类别的颜色
    # 以聚类中收替代原像素颜色,还原为二维
    new_yellow = colors[labels].reshape(image.shape)
    print("每个像素的颜色类别:", labels)
    print("每个类别的颜色", colors)
    # 压缩图片
    plt.imshow(new_yellow.astype(np.uint8))
    plt.show()
    # 二次压缩图片
    plt.imshow(new_yellow.astype(np.uint8)[::3, ::3])
    plt.show()

     

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

    # 观察压缩图片的文件大小,占内存大小
    print("压缩图片大小:", new_yellow.size)
    print("压缩图片内存", sys.getsizeof(new_yellow))

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

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

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

    import pandas as pd
    import numpy as np
    from sklearn.cluster import KMeans
    import warnings
    import matplotlib.pyplot as plt
    from pylab import mpl
    warnings.filterwarnings("ignore")
    df=pd.read_csv("二手车数据1.csv") #加载文件
    data = np.array(df.iloc[:,0:2].fillna(value=0).astype(int))  #提取数据
    model = KMeans(n_clusters=5)    #构造模型,聚类中心为5
    model.fit(data)                #训练
    model.cluster_centers_          #查看聚类中心
    yc = model.predict(data)      #预测值
    
    #查看预测后数据
    car0 = np.array(df[yc==0]['newcarprice'])
    print("第一类新车预测价格",car0)
    car1 = np.array(df[yc==1]['newcarprice'])
    print("第二类新车预测价格",car1)
    car2 = np.array(df[yc==2]['newcarprice'])
    print("第三类新车预测价格",car2)
    car3 = np.array(df[yc==3]['newcarprice'])
    print("第四类新车预测价格",car2)
    car4 = np.array(df[yc==4]['newcarprice'])
    print("第五类新车预测价格",car4)
    #可视化
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    plt.scatter(df.iloc[:,2],yc,c=yc,s=50,cmap='rainbow')
    plt.xlabel("新车价格预测/万元")
    plt.ylabel("预测值")
    plt.show()

     

  • 相关阅读:
    锁定/解锁账户BAPI
    ME5A报表增强
    PS 独立集中标识下修改项目采购类型增强
    生产版本BAPI
    生产订单工艺路线修改
    销售订单BAPI增强
    Office RTF远程模板注入
    CVE20211732 LPE漏洞分析
    C/C++ Qt 数据库与ComBox多级联动
    C/C++ Qt 数据库SqlRelationalTable关联表
  • 原文地址:https://www.cnblogs.com/SeBr7/p/12731760.html
Copyright © 2011-2022 走看看