使用机器学习预测天气(第二部分)

本文是使用机器学习预测天气系列的第二部分,通过Python的Scikit-Learn和StatsModels库,利用线性回归模型预测内布拉斯加州林肯市的天气。介绍了获取和预处理数据的过程,以及如何选取特征数据,通过可视化展示数据关系。通过逐步回归建立了一个健壮的模型,并展示了模型的预测能力。
摘要由CSDN通过智能技术生成

概述

  这篇文章我们接着前一篇文章,使用Weather Underground网站获取到的数据,来继续探讨用机器学习的方法预测内布拉斯加州林肯市的天气
  上一篇文章我们已经探讨了如何收集、整理、清洗数据。这篇文章我们将使用上一篇文章处理好的数据,建立线性回归模型来预测天气。为了建立线性回归模型,我要用到python里非常重要的两个机器学习相关的库:Scikit-Learn和StatsModels 。
  第三篇文章我们将使用google TensorFlow来建立神经网络模型,并把预测的结果和线性回归模型的结果做比较。
  这篇文章中会有很多数学概念和名词,如果你理解起来比较费劲,建议你先google相关数据概念,有个基础的了解。

获取数据

  在这个Github仓库,有个名为Underground API.ipynb的 Jupyter Notebook文件,这个文件记录了我们这篇文章和下一篇文章要用到的数据的获取、整理步骤。你还会发现一个名为end-part1_df.pkl的文件,如果你自己没有处理好数据,可以直接用这个文件,然后使用下面的代码来把数据转成Pandas DataFrame类型。

import pickle  
with open('end-part1_df.pkl', 'rb') as fp:  
    df = pickle.load(fp)

如果运行上面的代码遇到错误:No module named 'pandas.indexes',那么说明你用的pandas库的版本和我的(v0.18.1)不一致,为了避免这样的错误发生,我还准备了个csv文件,你可以从上述的Github仓库获取,然后使用下面的代码读入数据。

import pandas as pd  
df = pd.read_csv('end-part2_df.csv').set_index('date')

线性回归算法

  线性回归模型的目标是使用一系列线性相关的数据和数字技术来根据预测因素X(自变量)来预测可能的结果Y(因变量),最终建立一个模型(数学公式)来预测给定任意的预测因素X来计算对应的结果Y。
  线性回归的一般公式为:

ŷ = β0 + β1 * x1 + β2 * x2 + ... + β(p-n) x(p-n) + Ε

关于公式的详细解释,查看百度百科-线性回归模型

为模型选取特征数据

  线性回归技术要求的关键假设是,因变量和每个自变量之间有一个线性关系。针对我们的数据,就是温度和其他变量,然后计算Pearson相关系数。Pearson相关系数(r)是输出范围为-1到1的值的等长阵列之间的线性相关量的量度。范围从0到1的相关值表示越来越强的正相关性。 这意味着当一个数据序列中的值与另一个序列中的值同时增加时,两个数据序列呈正相关,并且由于它们两者的上升幅度越来越相等,Pearson相关值将接近1。从0到-1的相关值被认为是相反或负相关的,因为当一个系列的值增加相反系列减小的相应值时,但是当系列之间的幅度变化相等(相反的方向)时, 相关值将接近-1。 紧密地跨越零的Pearson相关值暗示着具有弱的线性关系,随着值趋近于零而变弱。
  关于相关系数的强度界定,统计学家和统计书籍中的观点各不相同。 但是,我发现一个普遍接受的关联强度分类集合如下:

为了评估这个数据中的相关性,我将调用Pandas DataFrame对象的corr()方法。通过corr()函数的调用,我可以选择我感兴趣的数据(meantempm),然后再对返回的结果(Pandas Series object)调用sort_values()函数,这将输出从最负相关到最正相关的相关值。

df.corr()[['meantempm']].sort_values('meantempm')  


# 一、项目介绍 **项目名称:天气预测和天气可视化** 天气预测和天气可视化是一个基于python机器学习(ml)的长春地区的天气预报项目,它实现了天气数据的爬取,预测和可视化。 项目结构如下: ![img](image/wps26.jpg) * 天气数据的来源 GetData文件使用python爬虫技术,爬取长春和全国的天气信息数据 爬取网站:http://tianqi.2345.com/wea_history/54161.htm ProcessDate文件对爬取的天气数据进行了预处理 几个CSV文件保存的是爬取后并经过处理的数据 * 天气数据预测 GetModel文件通过训练预测模型来预测长春近一周的天气,该文件利用Joblib将模型保存到本地 Main文件是项目主文件,通过运行该文件即可运行整个项目,该文件前部分获取保存到本地的预测模型来进行预测,并将预测结果打印到控制台 * 天气数据的可视化 Main文件后部分实现了天气数据的可视化 # 二、详细介绍 本项目分为三个部分,即爬取和处理数据数据预测(包含评价方法)和数据可视化 ## 1. 爬取和处理数据 数据爬取代码: ````py resq = requests.get(url, headers=headers, params=params) data = resq.json()["data"] # data frame df = pd.read_html(data)[0] ```` 即使用python爬取网站的json数据 ### **数据预处理:** 获取到的天气信息包括最高温,最低温都不是int格式的数字,通过对数据截取,将部分指标的数据变换为int类型 并对缺失值进行了处理 ````py my_imputer = SimpleImputer() imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train)) imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid)) ```` 通过SimpleImputer ,可以将现实数据中缺失的值通过同一列的均值、中值、或者众数补充起来,本项目使用了SimpleImputer的fit_transform对缺失值进行填充 ## 2. 数据预测和模型评价方法 预测数据采用了机器学习算法——线性回归 模型使用过程: ### A. 提取数据 ````py 获取测试集、训练集、验证集 [X_train, X_valid, y_train, y_valid, X_test] = ProcessData.ProcessData() ```` 其中ProcessData()函数里使用了如下语句: ````py X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=0) ```` train_test_split()是sklearn包的model_selection模块中提供的随机划分训练集和验证集的函数;使用train_test_split函数将完整的数据集和验证集以同等的比例分成2组不同的数据集和验证集 ### B. 训练模型 选择了随机树森林模型(randomforest),然后用fit来训练模型 ````py # 随机树森林模型 model = RandomForestRegressor(random_state=0, n_estimators=1001) # 训练模型 model.fit(X_train, y_train) ```` ### C. 根据数据预测 ````py # 最终预测结果 preds = model.predict(r[1]) -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值