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

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

    读取一张图片

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

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

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

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

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

    实验代码如下:

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 from sklearn.cluster import KMeans
     4 from sklearn.datasets import load_sample_image
     5 import sys
     6 
     7 img = load_sample_image("flower.jpg")  # 读取一张图片
     8 
     9 print("原图片的大小:", img.size)  # 查看图片大小
    10 print("原图片占内存大小:", sys.getsizeof(img))  # 查看图片占内存大小
    11 print("原图片的维度内的数据个数:", img.shape)  # 查看图片维度内的数据个数
    12 
    13 x = img.reshape(-1,3)  # 将图片线性化
    14 print("原图片线性化后的对比:", img.shape, x.shape)
    15 
    16 n = 64  # 定义64个聚类中心
    17 model = KMeans(n)   # 构建模型
    18 pre = model.fit_predict(x)  # 训练、预测模型
    19 colors = model.cluster_centers_  # 以聚类中收替代原像素颜色,还原为二维
    20 
    21 new_img = colors[pre].reshape(img.shape)   # 将训练后的数据与原数据进行匹配
    22 
    23 plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
    24 plt.figure(1)   # 定义1号画布
    25 plt.title("压缩前")  # 标题
    26 plt.imshow(img)
    27 plt.show()
    28 plt.figure(2)
    29 plt.title("压缩后")
    30 plt.imshow(new_img.astype(np.uint8))
    31 plt.show()
    32 
    33 print("压缩后图片的大小:", new_img.size)  # 查看图片大小
    34 print("压缩后的图片占内存大小:", sys.getsizeof(new_img))  # 查看压缩后的图片占内存大小

    实验结果如下:

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

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

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

    我这次选择的数据是某赛季NBA 球员上场次数、上场时间、助攻、失误、抢断、盖帽、犯规和得分的数据,这些数据可以使用K-means算法进行球员综合能力的分类(2是综合能力强,1是综合能力中等,0是综合能力弱),通过结果就可以知道这赛季每个球员综合能力的情况。

    数据为:

    实验代码如下:

     1 import pandas as pd
     2 import matplotlib.pyplot as plt
     3 import numpy as np
     4 from sklearn.cluster import KMeans
     5 
     6 data = pd.read_csv(r'C:Users23625Desktop机器学习项目data/NBA球员数据.csv', encoding='gbk')  # 在路径前加个‘r’,是因为在Python中是转义符,u表示其后是UNICODE编码,因此User在这里会报错
     7 
     8 x = data.iloc[:, 4:]  # 根据球员的场次、助攻、失误、抢断、盖帽、犯规、得分数据,对球员的综合能力进行分类
     9 x['场次'] = data.iloc[:, 2]
    10 
    11 n = 3  # 将球员分为3类
    12 model = KMeans(n)   # 构建模型
    13 pre = model.fit_predict(x)  # 训练、预测模型
    14 
    15 x['综合能力'] = pre  # 将训练,预测的球员综合能力结果加进数据
    16 x['姓名'] = data.iloc[:,1]  # 将球员姓名加进数据
    17 
    18 
    19 plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
    20 plt.title("球员综合能力散点图")  # 标题
    21 plt.xticks(rotation=90)  # 将x轴的标签旋转90度
    22 plt.xlabel("姓名")
    23 plt.ylabel("得分能力")
    24 plt.scatter(x.iloc[30:70,8], x.iloc[30:70,7])  # 取出30-70行的数据进行散点图的绘画
    25 plt.show()

    实验结果如下:

  • 相关阅读:
    使用hugo在gitee上写blog
    golang初识2
    golang初识1
    install go on ubuntu
    sql优化的几种方式
    UpdatePanel 无刷新弹出窗口
    .net web 点击链接在页面指定位置显示DIV的问题
    重建主键
    sql 日期时间格式转换
    UpdatePanel无法直接弹出窗口的解决
  • 原文地址:https://www.cnblogs.com/m2362563619/p/12726864.html
Copyright © 2011-2022 走看看