空气质量(air quality)的好坏反映了空气污染程度,它是依据空气中污染物浓度的高低来判断的。空气污染是一个复杂的现象,在特定时间和地点空气污染物浓度受到许多因素影响。来自固定和流动污染源的人为污染物排放大小是影响空气质量的最主要因素之一,其中包括车辆、船舶、飞机的尾气、工业企业生产排放、居民生活和取暖、垃圾焚烧等。城市的发展密度、地形地貌和气象等也是影响空气质量的重要因素。

  • 研究目标:搜集相关数据,运用机器学习对空气质量等级分类;
  • 选取指标:PM2.5;PM10;SO2;CO;NO2; O3_8h;AQI;质量等级;
  • 数据及其来源:
  • 研究方法及思路:运用随机森林,对指标AQI进行预测,调用Python的sklearn包。

Step1:准备工作

导入所需的包, 运行环境:Python3.5.2,Anaconda4.2.0。

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
import matplotlib.pyplot as plt
import matplotlib
from sklearn.model_selection import train_test_split

Step2:数据基本统计分析

首先,看一下数据分布情况。

data=pd.read_csv('datasets/air_train&test.csv',index_col=0,encoding='gb2312')
print (data.head())
print (data.shape)
index=data.index
col=data.columns
class_names=np.unique(data.ix[:,-1])
#print (type(data))
print (class_names)
#print (data.describe())#划分训练集和验证集
data_train, data_test= train_test_split(data,test_size=0.1, random_state=0)
print ("训练集统计描述:\n",data_train.describe().round(2))
print ("验证集统计描述:\n",data_test.describe().round(2))
print ("训练集信息:\n",data_train.ix[:,-1].value_counts())
print ("验证集信息:\n",data_test.ix[:,-1].value_counts())


Step3:构建随机森林回归模型预测AQI

获取训练集和验证集。

X_train=data_train.ix[:,0:-2]
X_test=data_test.ix[:,0:-2]
feature=data_train.ix[:,0:-2].columns
print (feature)
#回归的训练和验证因变量数据AQI
y_train=data_train.ix[:,-2]
y_test=data_test.ix[:,-2]
#print (y_test_reg)

查看各变量间的相关系数。

data.drop([u'质量等级'],axis = 1).corr()

import seaborn as sns
sns.set(style="ticks", color_codes=True);
# 创建自定义颜色调色板
palette = sns.xkcd_palette(['dark blue', 'dark green', 'gold', 'orange'])
# 画散点图矩阵
sns.pairplot(data.drop([u'质量等级'],axis = 1), diag_kind = 'kde', plot_kws=dict(alpha = 0.7))
plt.show()


根据相关系数表和散点图矩阵,PM2.5和PM10与AQI的线性相关性最大,相关系数超过了0.8,其次是CO和NO2,相关系数超过了0.7。但是,PM2.5与PM10、CO的相关系数超过了0.8,CO与NO2的相关系数也超过了0.8,即各因素间存在多重共线性,不满足相互独立的条件,不能直接进行线性回归,因此选用随机森林预测AQI。

模型调参

##参数选择
from sklearn.model_selection import RandomizedSearchCV
criterion=['mse','mae']
n_estimators = [int(x) for x in np.linspace(start = 200, stop = 2000, num = 10)]
max_features = ['auto', 'sqrt']
max_depth = [int(x) for x in np.linspace(10, 100, num = 10)]
max_depth.append(None)
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
bootstrap = [True, False]
random_grid = {'criterion':criterion,'n_estimators': n_estimators,'max_features': max_features,'max_depth': max_depth,'min_samples_split': min_samples_split,'min_samples_leaf': min_samples_leaf,'bootstrap': bootstrap}
#构建模型
clf= RandomForestRegressor()
clf_random = RandomizedSearchCV(estimator=clf, param_distributions=random_grid,n_iter = 10,  cv = 3, verbose=2, random_state=42, n_jobs=1)
#回归
clf_random.fit(X_train, y_train)
print (clf_random.best_params_)

模型训练、验证及评估

#模型训练、验证、评估
rf=RandomForestRegressor(criterion='mse',bootstrap=False,max_features='sqrt', max_depth=20,min_samples_split=10, n_estimators=1200,min_samples_leaf=2)rf.fit(X_train, y_train)
y_train_pred=rf.predict(X_train)
y_test_pred=rf.predict(X_test)
#变量重要性
plt.barh(range(len(clf.feature_importances_)), clf.feature_importances_,tick_label = class_names)
plt.show()from sklearn.metrics import mean_squared_error,explained_variance_score,mean_absolute_error,r2_score
print ("决策树模型评估--训练集:")
print ('训练r^2:',rf.score(X_train,y_train))
print ('均方差',mean_squared_error(y_train,y_train_pred))
print ('绝对差',mean_absolute_error(y_train,y_train_pred))
print ('解释度',explained_variance_score(y_train,y_train_pred))print ("决策树模型评估--验证集:")
print ('验证r^2:',rf.score(X_test,y_test))
print ('均方差',mean_squared_error(y_test,y_test_pred))
print ('绝对差',mean_absolute_error(y_test,y_test_pred))
print ('解释度',explained_variance_score(y_test,y_test_pred))



通过随机森林回归得到,PM2.5和PM10仍旧是对AQI影响最大的前两个指标,其次是NO2、O3_8h、CO,基本与相关系数分析结果一致。

通过模型评估表得,所构建的随机森林预测AQI模型,训练集和验证集上拟合优度R^2分别为0.9965、0.9858,模型效果不错,可以用该模型对AQI进行预测。

预测

用构建的模型预测2016年中国环保重点城市AQI。

#预测
data_pred=pd.read_csv('datasets/air.csv',index_col=0,encoding='gb2312')
index=data_pred.index
y_pred=rf.predict(data_pred.values)
#print(y_pred.round(2))
#print (index)
#将预测结果保存到文件中
result_reg=pd.DataFrame(index)
result_reg['AQI']=y_pred
result_reg.to_csv('datasets/result_reg_city.txt',encoding='gb2312')


可视化预测结果。

from pyecharts import Geo
import pandas as pd
df=pd.read_csv('datasets/result_reg_city.txt',index_col=0,encoding='gb2312')
print (df.head())
geo = Geo("全国主要城市空气质量","",title_color="#fff",title_pos="center",width=1200,height=600,background_color="#404a59",
)
geo.add("",df.ix[:,0],df.ix[:,1],visual_range=[0, 300],visual_text_color="#111",symbol_size=15,is_visualmap=True, is_piecewise=True,#visual_split_number=6pieces=[{"max": 50, "min": 0, "label": "优:0-50"},{"max": 100, "min": 50, "label": "良:51-100"},{"max": 150, "min": 100, "label": "轻度污染:101-150"},{"max": 200, "min": 150, "label": "中度污染:151-200"},{"max": 300, "min": 200, "label": "重度污染:201-300"},{"max": 1000, "min": 300, "label": "严重污染:>300"},        ]
)
geo.render()
geo

用python构建机器学习模型分析空气质量相关推荐

  1. 如何在验证集加噪声_如何使用Python构建机器学习模型

    如何使用Python构建机器学习模型?在构建机器学习模型时,我们希望将误差保持在尽可能低的水平.对于任何打算学习Python进行大数据分析的人来说,这都是一项关键技能.误差的两个主要来源是偏差和方差. ...

  2. python 加载动图_在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    大数据文摘授权转载自数据派THU 作者:MOHD SANAD ZAKI RIZVI 本文主要介绍了: TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习 ...

  3. 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)

    作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...

  4. linux tensorflow demo_独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...

  5. python空气质量分析与预测_干货!如何用 Python+KNN 算法实现城市空气质量分析与预测?...

    原标题:干货!如何用 Python+KNN 算法实现城市空气质量分析与预测? 作者 | 李秋键 责编 | 伍杏玲 封图 | CSDN 付费下载自东方 IC 出品 | CSDN(ID:CSDNnews) ...

  6. 基于Python的2013-2018全国城市空气质量分析

    基于Python的2013-2018全国城市空气质量分析 项目摘要 本项目使用pandas/numpy工具包对557424条空气质量数据进行导入及清洗,并使用matplotlib/seaborn/py ...

  7. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战

    深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战 # 导入需要的包和函数: from __future__ import print_function im ...

  8. 数据挖掘机器学习[七]---2021研究生数学建模B题空气质量预报二次建模求解过程:基于Stacking机器学习混合模型的空气质量预测{含码源+pdf文章}

    相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据挖掘机器学习---汽车交易价格预测详细版本[二]{EDA-数据探索性分析} 数据挖掘机器学习 ...

  9. 用Python搭建机器学习模型预测房租价格

    毫无疑问,机器学习是当前大数据分析中最热门的话题.这也是一些最令人兴奋的技术领域的基本概念,例如自动驾驶汽车和预测分析.百度上的机器学习搜索在2019年4月创历史新高,自此以来兴趣一直没有下降. 但是 ...

最新文章

  1. 平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读
  2. python predict_Python model.predict方法代码示例
  3. java Executor实例_Executor框架+实例
  4. Java ResultSet如何检查是否有任何结果
  5. flink链接mysql_flink 将mysql作为Source和Sink的代码示例
  6. redis关键字删除_Redis批量删除key的小技巧
  7. handler机制的原理
  8. VC6,SDI视图改变背景颜色的方法
  9. DeepStream中,获得并修改识别对象参数的代码
  10. WSO2 Micro Integrator环境安装及部署
  11. silvaco AMS安装方法
  12. P1359 租用游艇【Floyd】
  13. 基于Patachmatch的stereo matching笔记(三):《PatchmatchNet》
  14. Arraylist去除重复元素
  15. 解决: ORA-02199: missing DATAFILE/TEMPFILE clause [Oracle OMF 功能详解]
  16. Modbus通讯协议(四)——Java实现ModbusTCP Slave(从机)
  17. 《基于微信小程序的美食推荐系统》硕士论文
  18. STM32 IIC通信简介+PCF8563时钟芯片示例
  19. C++错误解决:double free or corruption (out): 0x00000000011abe70 ***
  20. 构建企业级云原生日志系统架构

热门文章

  1. 华为机试---年终奖(动态规划)
  2. c语言中十六进制乘以16啥意思,C语言16进制中16怎么表示?
  3. SKR!虎扑66万JRS大战3300万吴亦凡护卫队,别逼我拿Python
  4. 关于 PM2 Daemon 进程,内存爆涨的问题分析及解决
  5. linux 硬盘对拷,比ghost好用
  6. 小竹关禁闭(线性dp
  7. 计算机电源测试电压,使用万用表测试电脑电源好坏的方法
  8. MySQL插入数据时,如果记录不存在则insert,如果存在则update
  9. pvifa怎么用计算机算,年金现值系数表【完整版】
  10. 某游戏公司(凯英网络)PHP开发工程师笔试题