概述
这篇文章我们接着前一篇文章,使用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