Python预测之美
数据分析与算法实战
第一篇 预测入门 第一章到第四章
第二篇 预测算法
第五章 参数优化
在使用选定算法进行建模时设定或得到的参数很可能不是最优或接近最优的,这时需要对参数进行优化以得到更优的预测模型。
5.1 交叉验证
基本思想是将数据分割为N份,依次使用其中1份作为测试集,其他N-1份整合到一起作为训练集,将训练好的模型用于测试集中,以得到模型好坏的判断或估计值,可以得到N个这样的值。将N个对应的误差求平均作为对模型误差的估计。
5.2 网络搜索
基本原理是将各参数变量值的区间划分为一系列的小区间,并按顺序计算出对应各参数变量值组合所确定的目标值(通常是误差),并逐一择优,以得到该区间内最小目标值及其对应的最佳参数值 。
该方法可保证所得的搜索解是全局最优或接近最优的,可避免产生重大的误差。
计算成本太高,一般不建议使用。
5.3 遗传算法
1975年,美国的J.Holland教授提出,随机化搜索法。
-
基本概念
是模拟自然界遗传选择与淘汰的生物进化计算模型。
种群、编码、选择、交叉、变异之后,进化,搜索最优解。 -
遗产算法算例
求解函数 f(x)=x*sin(x),x属于[0,12.55]在给定区间的最大值。
编码、产生父代个体、选择个体、交叉、变异、逐代进化、最优解。 -
实现步骤
-
Python实现
5.4 粒子群优化
又称为微粒群算法,1995年,J.Kennedy和R.C.Eberthart提出。
来源于对一个简化社会模型的模拟,主要用于求解优化问题。
-
基本概念及原理
通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法。 -
实现步骤
-
Python实现
5.5 模拟退火
-
基本概念及原理
1983年,S. Kirkpatrick 等提出。 -
实现步骤
-
Python实现
第六章 线性回归及其优化
多元回归是指有两个或以上自变量的回归分析,如果处理的是线性问题,则是多元线性回归。
6.1 多元线性回归
包括两个基本问题:一是多元线性模型的设定及其显著性检验;二是多元线性模型的参数求解及其显著性检验。
- 回归模型与基本假定
基本假定:自变量之间是线性无关的、随机误差项的平均值为0,没有系统误差、随机误差项服从正态分布。 - 最小二乘估计:是从误差拟合角度对回归模型进行参数估计的方法,通过最小化误差的平方和寻找数据的最佳函数匹配。
- 回归方程和回归系数的显著性检验
回归方程的F检验、回归系数的t检验 - 多重共线
当自变量彼此相关时,回归模型可能并不稳定。估计的效果会由于模型中的其他自变量而改变数值,甚至符号。
6.2 Ridge回归
在进行多元回归时,有时会因为变量间存在共线性,而导致最小二乘回归得到的系数不稳定,方法较大。根本原因是系数矩阵与它的转置矩阵相乘得到的矩阵不能求逆。这个问题可以通过本节介绍的Ridge回归解决。
- 基本概念
也称为岭回归,1970年,霍尔和克纳德提出,对最小二乘进行了改良。 - 岭迹曲线
根据岭迹曲线的变化形状来确定适当的值,并进行自变量的选择。 - 基于GCV准则确定岭参数
GCV:广义交叉验证,选取K值,得到最佳岭回归参数。 - Python 实现
6.3 Lasso回归
Lasso回归可以将某些回归系数置于0,可基于此特性进行特征选择。
- 基本概念
又叫套索回归,1996年Robert Tibshirani提出。基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归系数,进一步得到可以解释的模型。 - 使用LAR算法求解Lasso
是一个二次规划问题。LAR(最小角度回归)算法,是对传统的逐步向前选择方法加以改进而得到的有效精确方法。 - Python 实现
6.4 分位数回归
是解释变量X估计响应变量y的条件分位数的基本方法,它利用解释变量的多个分位数(例如四分位、十分位、百分位等)来得到相应变量的条件分布的相应的分位数方程。
- 基本概念
- 分位数回归的计算
单纯形法、内点法和平滑法。 - Python 实现
6.5 稳健回归
现实中的数据常常不能满足这些性质,这便使得基于普通最小二乘法的回归模型难以达到满意的预测精度。此外,数据中的异常点,引起数据分布的偏离,特别对线性回归的拟合形成杠杆效应,最终使预测结果与真实值偏离较远。稳健回归可以解决这些问题。
- 基本概念
主要思路是修改异常值十分敏感的普通最小二乘回归中的目标函数,使其更稳健。
常见的稳健回归方法有:M估计法、最小中位方差估计(LMS)、最小修建方差估计(LTS)、S估计、YohaiMM估计、L估计、R估计等。 - M估计法及Python实现
M估计是极大似然估计的简称,通过迭代加权来消除或减弱离群值对参数估计的影响,从而保证结果的可靠性。
第七章 复杂回归分析
现实世界中遇到的多数问题甚至出现高纬度、小样本、非线性的复杂的回归问题,这就需要建立针对复杂回归问题的分析体系。
7.1 梯度提升回归树(GBRT)
是一种迭代的回归树算法,该算法由多棵回归树组成,所有树的结论累加起来得到最终结果。
-
Boosting 方法简介
Boosting(提升)是一种提高任意给定学习算法准确度的方法,它的思想起源于Valiant提出的PAC学习模型。
弱可学习定理:如果一个概念是弱可学习的,则其是强可学习的。 -
AdaBoost 算法
是一种迭代算法。最基本的性质是它能在学习过程中不断减少训练误差,模型是由基本分类器组成的加法模型,而损失函数是指数函数。 -
提升回归树算法
提升树(Boosting Tree)算法实际上是指采用加法模型(即以决策树为基函数的线性组合)与前向分步算法的Boosting方法。 -
梯度提升
该算法是最速下降法的近似方法,其关键是利用损失函数的负梯度产生回归问题提升树算法中残差的近似值,并拟合一棵回归树。 -
GBRT算法的Python实现
7.2 深度神经网络
1987年,Lapedes和Farber首先应用神经网络进行预测。开创了神经网络预测的先河。使用神经网络预测的基本思路为通过收集数据训练网络,使用神经网络算法建立数学模型,并根据模型进行预测。与传统的预测方法相比,神经网络预测不需要预先确定样本数据的数学模型,仅通过学习样本数据即可以进行相当精确的预测,因此具有很多优越性。
2016年,李世石和AlphaGo机器人围棋比赛。
-
基本概念
人工神经网络(ANN),是由大量类似于生物神经元的处理单元相互连接而组成的非线性复杂网络系统。起源于生物体的神经系统。
常见的激活函数:Hardlim函数(硬极限函数)、Hardlims函数(对称硬极限函数)、Purelin函数(线性函数)、Sigmoid函数(对称S形函数)、Tanh函数(双曲正切S形函数)、ReLU函数(修正线性单元)。 -
从线性回归说起
单层感知机模型,只有一个输入层和一个输出层,没有隐含层。 -
浅层神经网络
1986年,Rinehart等提出BP神经网络,是一种按误差反向传播算法训练的多层感知机网络。由一个输入层、至少一个隐含层、一个输出层组成。
BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。 -
深层次拟合问题
一般将隐含层次超过3层的神经网络叫做深度神经网络。
随着神经网络层次的加深,理论上神经网络的表达抽象能力也越强。
有时会发生梯度消失或梯度爆炸现象,使用不同的激活函数尝试。 -
DNN的Python实现
深度神经网络(DNN)
7.3 支持向量机回归
用于解决回归问题的支持向量机算法。
-
基本问题
支持向量机最初是用来解决模式识别问题的,也可以很好地应用于回归问题,其思路与模式识别十分相似。
常见的核函数:多项式核函数、Gauss径向基核函数、Sigmoid核函数。 -
LS-SVMR算法 :最小二乘支持向量机回归
J.A.K Suykens提出,对SVM进行的一种改进。 -
LS-SVMR算法的Python实现
7.4 高斯过程回归 GPR
有着严格的统计学系理论基础,对处理高维数、小样本、非线性等复杂问题具有很好的适应性,且泛化能力强。
- GPR算法
- Python 实现
第八章 时间序列分析
时间序列就是按照时间顺序取得的一系列观测值,其本质特征是相邻观察值得依赖性。使用时间序列方法进行预测就是通过编制和分析时间序列,根据时间序列所反映出来的发展过程、方向和趋势,进行类推或延伸,借以预测下一段时间或以后若干年可能达到的水平。
8.1 Box-Jenkins方法
美国学者Box和英国学者Jenkins于20世纪70年代提出的,也称为传统时间序列建模方法,也称为ARIMA模型,线性模型,可以对平稳随机序列和非平稳随机序列进行描述。
-
p阶自回归模型
分析表征观察值之间的相互依赖性与相关性,分析数据内部相关关系的方法,即自回归(AR)模型。 -
q阶移动平均模型
移动平均(MA)模型, -
自回归移动平均(ARMA)模型
-
ARIMA 模型
求和自回归移动平均模型,简记为ARIMA(p,d,q)
-
ARIMA 模型的Python 实现
8.2 门限自回归模型
门限自回归(TAR),1980年H.Tong(汤家豪)提出,该模型能有效描述极限点、极限环、跳跃性、相依性、谐波等复杂现象的非线性时序动态系统,对于非线性、非稳定的时间序列预测,效果较好。
- TAR模型的基本原理
实质是分段的AR模型。 - Python 实现
8.3 GARCH模型族
1982年,恩格尔提出ARCH模型,即自回归条件异方差模型,后博勒斯莱文发展成为GARCH模型,即广义的自回归条件异方差模型。
-
线性ARCH 模型
ARCH 模型是特别用来建立条件方差模型并对其进行预测的。 -
GARCH 模型
广义自回归条件异方差模型,与ARMA模型相类似的结构。 -
EGARCH 模型
1991年,Nelson提出,即指数GARCH模型。可以更好地判断波动源的持续性,不受平稳性条件的限制。 -
PowerARCH 模型
1993年,Ding、Granger、Engle提出,将多种ARCH模型和GARCH模型作为其特例,灵活性很强。
8.4 向量自回归模型
1980年,Sims最早提出向量自回归模型,简记为VAR,它是目前处理多个相关时序指标分析与预测最容易操作的模型之一。
-
VAR 模型的基本原理
就是非结构化的多方程模型,核心思想是不考虑经济理论而直接考虑经济变量时间序列之间的关系,避开了结构建模方法中需要对系统中每个内生变量关于所有内生变量滞后值函数建模的问题,通常用来预测相关时间序列系统和研究随机扰动对变量系统的动态影响。 -
Python 实现
8.5 卡尔曼滤波
是一个以最小均方误差为准则的最佳线性估计方法。1960年,美籍匈牙利数学家卡尔曼将状态空间分析方法引入到滤波理论中,对状态和噪声进行了完美的统一描述,得到时域上的递推滤波算法,即卡尔曼滤波,相应的公式被称为卡尔曼滤波器。
-
卡尔曼滤波算法介绍
卡尔曼滤波是根据上一状态的估计值和当前状态项的观测值推出当前状态的估计值滤波方法,这里的滤波其实是指通过一种算法排除可能的随机干扰以提高检测精度的方法或手段。 -
Python 实现
8.6 循环神经网络
循环神经网络(RNN)是一种非常强大的对序列数据进行建模和预测的神经网络,并且是深度学习领域中非常重要的模型。非常擅长处理时序数据,它可以将神经元某时刻的输出再次作为神经元的输入,由于网络结构中的参数是共享的,这也大大提高了训练的性能,同时使模型可以应用到不同长度的猫数据中。
Jordan和Elman分别于1986年和1990年提出循环神经网络框架,别称为简单循环网络。
- RNN的基本原理
- RNN的结构
- BPTT算法。基于时间的反向传播算法,BP算法的改版。
- 梯度消失和梯度爆炸
- Python 实现
8.7 长短期记忆网络
长短期记忆网络(LSTM)能够让信息长期保存,成功的解决了循环神经网络的缺陷问题(梯度消失和梯度爆炸)。
LSTM 包含一个结构可以用来判断信息的价值,一次来选择遗忘或者记忆,它可以保存一些长期记忆并聚焦一些短期记忆,从而能够有效的根据场景的变化重新学习相关信息,在解决长序依赖问题方面,有着非常重要的价值。
- LSTM 模型的基本原理
输入门、遗忘门、输出门 - Python 实现