• 作业4 .K均值算法--应用


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

    代码如下:

    from sklearn.datasets import load_sample_image
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    import matplotlib.image as img
    import numpy as np
    
    flower = img.imread('E:\flower.jpg')#读取图片
    #plt.imshow(flower)
    #plt.show()
    image = flower[::3,::3]
    X = image.reshape(-1,3)
    print(flower.shape,image.shape,X.shape)
    
    n_colors = 45 #把像素分为45类
    model = KMeans(n_colors)
    labels = model.fit_predict(X)#训练并预测  一维数组 元素的类别
    colors = model.cluster_centers_#二维(45,3)
    
    new_image = colors[labels].reshape(image.shape)
    plt.imshow(image)
    plt.show()
    plt.imshow(new_image.astype(np.uint8))
    plt.show()
    plt.imshow(new_image.astype(np.uint8)[::3,::3])
    plt.show()
    img.imsave('E://flower02.jpg',new_image)

    截图如下:

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

    flower截图:                                                           flower02截图:

               

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

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

    我想的是可以用K均值,统计出餐厅里各个时间段客人点餐的菜品数目,来更好的准备,

    比如在什么时候要准备更多的菜品1,在其他时候要准备更多的菜品2

    以下是我的代码以及结果截图:

    import pandas as pd
    import numpy as np
    from sklearn.cluster import KMeans
    
    #读取文件
    path = r'E:大3  学期2机器学习meal_order.xlsx'
    df = pd.read_excel(path)
    
    #选取文件中需要的数据进行KMeans处理
    data = df[['amounts','place_order_time']]
    data.dtypes
    data['place_order_time'] = pd.to_numeric(data['place_order_time'])
    data['place_order_time'].dtype
    data.dtypes
    
    data
    ests = KMeans(n_clusters=3) #取3个中心点,分成3类
    ests.fit(data) #训练数据
    y_kmeanss = ests.predict(data) #预测数据
    
    #把每个分类放进列表,输出菜单名称
    order0 = np.array(df[y_kmeanss==0]['dishes_name'])
    order0
    order1 = np.array(df[y_kmeanss==1]['dishes_name'])
    order1
    order2 = np.array(df[y_kmeanss==2]['dishes_name'])
    order2
    
    #统计菜品数量,Counter是一个容器对象,主要的作用是用来统计散列对象
    from collections import Counter
    a = Counter(order0)
    print('中午客人点的比较多的菜品排序:',a)
    b = Counter(order1)
    print('下午客人点的比较多的菜品排序:',b)
    c = Counter(order2)
    print('晚上客人点的比较多的菜品排序:',c)

    截图:

    表格中选取需要的数据进行KMeans处理

     预测分类之后的结果:

    最后结果:

  • 相关阅读:
    Java基本概念
    Java基础语法
    Java环境的搭建
    elicpse
    常见编译器EOP
    上传突破学习笔记
    认识ollydbg
    160个Crackerme破解
    python基础(1)
    文件上传
  • 原文地址:https://www.cnblogs.com/zhengjieting/p/12729285.html
Copyright © 2020-2023  润新知