众所周知,神经网络可用于解决分类问题,例如,它们被用于手写体数字分类,但问题是,如果我们将它们用于回归问题,它会有效果吗?
在本文中,我将使用一个深层次的神经网络来预测房屋价格(使用一个来自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,看看我们的模型怎么样。
第五:尝试另一个ML算法
现在,让我们尝试另一个ML算法来比较结果。
我们将使用随机森林回归和XGBRegressor。
将培训数据拆分为培训和验证数据,我们将首先尝试随机森林模型:
Random forest validation MAE = 19089.71589041096
创建一个提交文件并将其提交给Kaggle以查看结果:
现在,让我们试试XGBoost模型:
[out]: XGBoost validation MAE = 17869.75410958904
创建一个提交文件并将其提交给Kaggle以查看结果:
总结一下我们所做的:
· 加载并处理数据集
· 通过绘制一些直方图和特征的相关热图来熟悉数据集
· 使用了一个由三个隐层组成的深度神经网络,每个隐层有256个节点
· 在输出层上使用了线性激活函数
· 训练了模型,然后在Kaggle上测试
· 还测试了另外两种型号
· 深层神经网络能够超过这两个模型
· 我们相信,如果调整它们的超参数,这两种模型都能超越深层神经网络模型
下一步:
· 尝试将更多的精力放在处理数据集上
· 尝试其他类型的神经网络
· 尝试调整我们使用的两个模型的超参数
原文标题《Deep Neural Networks for Regression Problems》
作者:Mohammed Ma’amari
译者:lemon
不代表云加社区观点,更多详情请查看原文链接