回归问题的深层神经网络

2018-10-12 18:35:58 浏览数 (1)

众所周知,神经网络可用于解决分类问题,例如,它们被用于手写体数字分类,但问题是,如果我们将它们用于回归问题,它会有效果吗?

在本文中,我将使用一个深层次的神经网络来预测房屋价格(使用一个来自Kaggle的数据集)。

你可以从这里下载。

我建议你跟着我一起使用notebook在GoogleCoLab上运行代码。【here】

内容:

1- Process the dataset 2- Make the deep neural network 3- Train the DNN 4- Test the DNN 5- Compare the result from the DNN to another ML algorithm

首先,我们将导入所需的依赖项:

第一:处理数据集

我们不会深入处理数据集,我们所要做的就是将数据集输入到我们的模型中。

我们将去掉任何缺少值的特性,然后对分类特性进行编码。

加载数据集:

· 将训练和测试数据加载到pandas数据框架中

· 将训练和测试数据结合在一起进行处理。

combined.describe()

让我们定义一个函数来获取不缺少任何值的列。

让我们看看我们有多少列:

[out]: Number of numerical columns with no nan values : 25 Number of nun-numerical columns with no nan values : 20

特征直方图特征直方图

特征之间的相关性

从上述相关热图可以看出,约有15个特征与目标高度相关。

一个热门编码的分类特征:

我们将使用一个热编码对分类特性进行编码。

[out]: There were 45 columns before encoding categorical features There are 149 columns after encoding categorical features

现在,将组合数据框架拆分回训练数据和测试数据

第二:构建深层神经网络

· 定义顺序模型

· 增加一些致密的层

· 使用‘relu‘作为隐藏层的激活函数

· 用‘normal‘初始化器为核初始化器

Initializers define the way to set the initial random weights of Keras layers.

· 我们将使用均值绝对误差作为损失函数。

· 定义只有一个节点的输出层

· 使用‘linear‘作为输出层的激活函数

[Out]: _________________________________________________________________ Layer (type)                 Output Shape              Param #    ================================================================= dense_1 (Dense)              (None, 128)               19200      _________________________________________________________________ dense_2 (Dense)              (None, 256)               33024      _________________________________________________________________ dense_3 (Dense)              (None, 256)               65792      _________________________________________________________________ dense_4 (Dense)              (None, 256)               65792      _________________________________________________________________ dense_5 (Dense)              (None, 1)                 257        ================================================================= Total params: 184,065 Trainable params: 184,065 Non-trainable params: 0 _________________________________________________________________

定义检查点回调:

第三:训练模式:

[out]: Train on 1168 samples, validate on 292 samples Epoch 1/500 1168/1168 [==============================] - 0s 266us/step - loss: 19251.8903 - mean_absolute_error: 19251.8903 - val_loss: 23041.8968 - val_mean_absolute_error: 23041.8968   Epoch 00001: val_loss did not improve from 21730.93555 Epoch 2/500  1168/1168 [==============================] - 0s 268us/step - loss: 18180.4985 - mean_absolute_error: 18180.4985 - val_loss: 22197.7991 - val_mean_absolute_error: 22197.7991   Epoch 00002: val_loss did not improve from 21730.93555 . . . Epoch 00500: val_loss did not improve from 18738.19831

<keras.callbacks.History at 0x7f4324aa80b8>

We see that the validation loss of the best model is 18738.19

第四:测试模型

我们将把测试数据的预测提交给Kaggle,看看我们的模型怎么样。

深度神经网络在Kaggle上的提交结果深度神经网络在Kaggle上的提交结果

第五:尝试另一个ML算法

现在,让我们尝试另一个ML算法来比较结果。

我们将使用随机森林回归和XGBRegressor。

将培训数据拆分为培训和验证数据,我们将首先尝试随机森林模型:

Random forest validation MAE =  19089.71589041096

创建一个提交文件并将其提交给Kaggle以查看结果:

随机森林提交Kaggle的结果随机森林提交Kaggle的结果

现在,让我们试试XGBoost模型:

[out]: XGBoost validation MAE =  17869.75410958904

创建一个提交文件并将其提交给Kaggle以查看结果:

XGBoost关于Kaggle的结果XGBoost关于Kaggle的结果
总结一下我们所做的:

· 加载并处理数据集

· 通过绘制一些直方图和特征的相关热图来熟悉数据集

· 使用了一个由三个隐层组成的深度神经网络,每个隐层有256个节点

· 在输出层上使用了线性激活函数

· 训练了模型,然后在Kaggle上测试

· 还测试了另外两种型号

· 深层神经网络能够超过这两个模型

· 我们相信,如果调整它们的超参数,这两种模型都能超越深层神经网络模型

下一步:

· 尝试将更多的精力放在处理数据集上

· 尝试其他类型的神经网络

· 尝试调整我们使用的两个模型的超参数

原文标题《Deep Neural Networks for Regression Problems》

作者:Mohammed Ma’amari

译者:lemon

不代表云加社区观点,更多详情请查看原文链接

0 人点赞