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

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

    读取一张图片

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

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

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

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

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

    import matplotlib.pylab as plt
    from sklearn.cluster import KMeans
    import matplotlib.image as img
    import numpy as np
    
    #读取图片
    image=img.imread('d:\xj3.jpg')
    plt.imshow(image)
    plt.show()
    
    #数据转化为线性
    X=image.reshape(-1,3)
    #建立模型。确定聚类中心数
    model=KMeans(64)
    labels=model.fit_predict(X)
    colors=model.cluster_centers_
    #用聚类中心的颜色代替原来的颜色值
    new_image=colors[labels].reshape(image.shape)
    #显示压缩后的图片
    plt.imshow(new_image.astype(np.uint8))
    
    plt.imshow(new_image.astype(np.uint8)[::3,::3])
    
    #存储图片
    import matplotlib.image as img
    img.imsave('d:\zzj-02.jpg',new_image.astype(np.uint8))
    img.imsave('d:\zzj-03.jpg',new_image.astype(np.uint8)[::3,::3])

    查看图片大小:

    图片对比:

    原图:

    zzj-02.jpg:

    zzj-03.jpg:

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

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

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

    天气空气质量评级聚类:
    采集以及预处理数据:

    import requests
    from bs4 import BeautifulSoup
    #每个省的省会城市网址后缀
    list=[101010100,101020100,101030100,101040100,101050101,101060101,101070101,101080101,101090101,101100101,101110101,101120101,101130101,101140101,101150101
     ,101160101,101170101,101180101,101190101,101200101,101210101,101220101,101230101,101240101,101250101,101260101,101270101,101280101,101290101,101300101
     ,101310101,101320101,101330101]
    #爬取数据函数
    def resxxx(url):
        res = requests.get(url)
        soup = BeautifulSoup(res.text, 'html.parser')
        info=[0,0,0,0,0,0]
        info_value=['PM2.5','PM10','O3','NO2','SO2','CO']
        for i in range(len(soup.select('.badthing-name span'))):
            for j in range(6):
                if(soup.select('.badthing-name span')[i].text==info_value[j]):
                    info[j]=soup.select('.badthing-des .g-fl')[i].text
        info.append(soup.select('.mh-pm25-num')[0].text)
        info.append(soup.select('.mh-pm25-txt')[0].text)
        info.append(soup.select('.change-title')[0].text)
        return info
    #建立空白集合
    import pandas as pd
    df=pd.DataFrame(columns=['PM2.5','PM10','O3','NO2','SO2','CO','空气质量','空气评级','地点'])
    total=[]
    for i in list:
        #通过省会城市获得所有城市的后缀
        res = requests.get('https://tianqi.so.com/air/'+str(i))
        soup = BeautifulSoup(res.text, 'html.parser')
        for j in range(len(soup.select('.js-town option'))):
            url = 'https://tianqi.so.com/air/' + soup.select('.js-town option')[j].attrs['data-citycode']
            result = resxxx(url)
            total.append(result)
            df.loc[len(df)]=result
            print(result)
    #存储得到的数据
    df.to_csv('./olddata.csv')
    print(len(total))
    print(total)
    
    data=pd.read_csv("./olddata.csv")
    #数据处理转化类型
    data[['PM2.5','PM10','O3','NO2','SO2','CO','空气质量']]=data[['PM2.5','PM10','O3','NO2','SO2','CO','空气质量']].astype('int')
    data.loc[data['空气评级']=='','空气评级']=1
    data.loc[data['空气评级']=='','空气评级']=2
    data.loc[data['空气评级']=='轻度污染','空气评级']=3
    data.loc[data['空气评级']=='中度污染','空气评级']=4
    data.loc[data['空气评级']=='重度污染','空气评级']=5
    data['空气评级']=data['空气评级'].astype('int')
    
    data.to_csv('./newdata.csv')

    旧数据:

    预处理后的数据:

     模型建立预测:

    import pandas as pd
    data=pd.read_csv("./newdata.csv")
    from sklearn.cluster import KMeans
    import matplotlib.pylab as plt
    
    model=KMeans(n_clusters=5).fit_predict(data.iloc[:,2:4])
    #数据预测散点图
    plt.scatter(data.iloc[:,2],data.iloc[:,3],c=model,s=50,cmap='rainbow')
    #实际情况散点图
    plt.scatter(data.iloc[:,2],data.iloc[:,3],c=data.iloc[:,9],s=50,cmap='rainbow')

    分类对比:
      实际情况:

     

      预测情况:

     结果:可以看到实际与预测情况大致相同,可以得出结论。可以得出结论:利用天气质量的PM2.5和PM10可以预测天气的评级。

  • 相关阅读:
    配置利用Tilcon 5.8 Radar Demo for vxWorks 6.8
    安装源REMI做源 CentOS上 PHP 的安装和升级
    产品苹果乔布斯和盖茨眼中真实的对方
    平台微软将死的平台:.Net
    企业生活12大颠覆性技术:移动互联网居首
    设备代工富士康加入Firefox OS阵营,下周将发布搭载Firefox OS的设备
    线程对象Android 开发之多线程处理、Handler 详解
    输出hadoop[置顶] hadoop之测试KMeans(二):输出结果分析
    个位数字poj 3126 Prime Path
    nullnullGet previous business day
  • 原文地址:https://www.cnblogs.com/ccla/p/12732967.html
Copyright © 2011-2022 走看看