83-预测分析-R语言实现-神经网络

Python014

83-预测分析-R语言实现-神经网络,第1张

预测任务:利用建筑物的各种特性,例如表面积和屋顶面积,预测建筑物的能源效率,其中效率以供暖负荷和制冷负荷来表示。

数据集不存在缺失值。

orientation和glazareadist分别表示建筑朝向和玻璃面积分布情况,应该为因子型变量

为了让神经网络能够处理这些因子变量,需要先将它们转换为虚拟变量。

在训练神经网络时,为防止饱和现象(因为当优化过程的误差函数的梯度绝对值变得非常小时,非线性神经元激活函数有非常大或非常小的输入,会导致优化过程认为已经达到收敛而终止),需要先对数据进行比例缩放,这样做同时有助于收敛。

将数据维度比例缩放到单位区间[-1, 1]。

输出变量只选一个,heatload。(暂不清楚caret包能否同时训练两个因变量的模型,以及如何设置参数

输出变量有两个,heatload 和 coolload。10个隐藏层,激活函数选择logistic,误差函数选择sse,它对应的是误差平方和。linear.output = TRUE表示输出层的神经元不应用logistic激活函数,因为这是一个回归任务,需要得到线性的输出,否则输出就会被约束到[0, 1]之间。

预测值与实际值之间的相关性相当高。

预测值与实际值之间的相关性非常高,说明模型的性能接近完美。

模型拟合

对于人口模型可以采用Logistic增长函数形式,它考虑了初期的指数增长以及总资源的限制。其函数形式如下。

首先载入car包以便读取数据,然后使用nls函数进行建模,其中theta1、theta2、theta3表示三个待估计参数,start设置了参数初始值,设定trace为真以显示迭代过程。nls函数默认采用Gauss-Newton方法寻找极值,迭代过程中第一列为RSS值,后面三列是各参数估计值。然后用summary返回回归结果。

library(car)

pop.mod1 <- nls(population ~ theta1/(1+exp(-(theta2+theta3*year))),start=list(theta1 = 400, theta2 = -49, theta3 = 0.025), data=USPop, trace=T)

summary(pop.mod)

在上面的回归过程中我们直接指定参数初始值,另一种方法是采用搜索策略,首先确定参数取值范围,然后利用nls2包的暴力方法来得到最优参数。但这种方法相当费时。

还有一种更为简便的方法就是采用内置自启动模型(self-starting Models),此时我们只需要指定函数形式,而不需要指定参数初始值。本例的logistic函数所对应的selfstarting函数名为SSlogis

pop.mod2 <- nls(population ~ SSlogis(year,phi1,phi2,phi3),data=USPop)

二、判断拟合效果

非线性回归模型建立后需要判断拟合效果,因为有时候参数最优化过程会捕捉到局部极值点而非全局极值点。最直观的方法是在原始数据点上绘制拟合曲线。

library(ggplot2)

p <- ggplot(USPop,aes(year, population))