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

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

    读取一张图片

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

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

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

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

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

    from sklearn.datasets import load_sample_image
    from sklearn.cluster import KMeans
    from pylab import mpl
    import matplotlib.pyplot as plt
    import matplotlib.image as img
    import numpy as np
    import sys
    
    #1、读取一张图片
    plt.rcParams['font.sans-serif'] = ['SimHei']#指定中文字体
    image = img.imread("./1.jpeg") #读取图片
    plt.imshow(image)
    plt.title("原图片")
    plt.show() #显示原图片
    
    #2、观察图片文件大小,占内存大小,图片数据结构,线性化
    image = image[::3,::3] #降低原图片的分辨率
    x = image.reshape(-1,3)
    print('原图片文件大小为:',image.size) #查看原图片文件大小
    print('原图片占内存大小为:',sys.getsizeof(image)) #查看原图片占内存大小
    print('原图片线性化为:',x.shape) #查看原图片线性化的结构
    print('原图片的数据结构为:',image) #查看原图片的数据结构
    
    #3、用kmeans对图片像素颜色进行聚类、压缩图片
    n_colors = 64
    model = KMeans(n_colors) #设定64类聚类中心
    labels = model.fit_predict(x)  #获取每个像素的颜色类别
    colors = model.cluster_centers_  # 获取每个类别的颜色
    new_image = colors[labels].reshape(image.shape)  #以聚类中收替代原像素颜色,还原为二维
    print('压缩图片文件大小为:',new_image.size) #查看压缩图片文件大小
    print('压缩图片占内存大小为:',sys.getsizeof(new_image)) #查看压缩图片占内存大小
    print('压缩图片的数据结构为:',new_image) #查看压缩图片的数据结构
    new_image = new_image.astype(np.uint8) #把颜色平均值转换为整数
    plt.imshow(new_image)
    plt.title('压缩图片')
    plt.show() #显示图片
    img.imsave('D://大三下/机器学习/2.jpeg',new_image) #保存到本地

    (1) 关于原图:

    (2)关于压缩图片:

    (3)原图和压缩图片的大小比较:

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

    本题主要研究的数据是瓜子网二手车(之前的课程用过),研究的内容是预测车的总价和车的表显公里之间的关系,给想购车的用户有了一定的参考。

    #201706120001 温嘉文 软件工程1701班
    
    from sklearn.model_selection import train_test_split
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    #1、读取所需的数据文件(二手车)
    filename = open('201706120001温嘉文.csv')
    data = pd.read_csv(filename)
    
    #2、划分训练集和测试集
    x = data.iloc[: ,[3]] #获取“总价”
    y = data.iloc[:,1] # 获取“表显公里”
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=5) #划分成功
    
    #3、对数据进行kmeans聚类计算
    km_model = KMeans(n_clusters=3)  #构造模型
    km_model.fit(x_train,y_train)  #训练模型
    pre = km_model.predict(x_test)  #预测模型
    print('模型的预测值:',pre) #输出预测值
    
    #4、对测试好的值进行绘图,总价与表显公里的关系
    plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
    plt.scatter(x_test,y_test,s=60,c='pink')
    plt.xlabel('总价/万')
    plt.ylabel('表显公里/万')
    plt.title("总价与表显公里的关系如下:")
    plt.show()

    运行结果:

    (1)读取数据

    (2)输出预测值

    (3)绘图

  • 相关阅读:
    MVC 【Razor 视图引擎】基础操作 --页面跳转,传值,表单提交
    MVC 【ASPX视图引擎】
    js弹出对话框的方法总结
    MVC 基础
    [转]C#中Split用法~
    对话框控件延伸文本框制作
    WinForm LIstView
    WinForm多窗体间操作
    WinForm 控件ComboBox数据绑定
    WinForm布局
  • 原文地址:https://www.cnblogs.com/carmen-/p/12725931.html
Copyright © 2011-2022 走看看