首页 > 编程语言 > 详细

K均值算法--应用

时间:2020-04-19 20:24:18      阅读:62      评论:0      收藏:0      [点我收藏+]

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可以预测天气的评级。

K均值算法--应用

原文:https://www.cnblogs.com/ccla/p/12732967.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!