深度学习与机器学习:房价预测模型比较

深度学习是机器学习的一个子领域,它通过在层中组织一组神经元来实现。深度学习模型由三层组成:输入层、输出层和隐藏层。与流行的机器学习算法(如k最近邻、支持向量机、线性回归等)相比,深度学习提供了几个优势。与机器学习算法不同,深度学习模型可以从有限的信息中创建新特征并执行高级分析。深度学习模型可以学习比机器学习算法更复杂的特征。然而,尽管它有优势,但也带来了几个挑战。这些挑战包括需要大量的数据和专用硬件,如GPU和TPU。

在本文中,将创建一个深度学习回归模型,使用著名的波士顿房价预测数据集来预测房价。不仅如此,还将比较其结果与一些知名的机器学习算法在不同方面的表现。

波士顿房价预测数据集包含506行,13个特征和一个目标列,即价格列。该数据集在互联网上很容易获得,可以使用此链接下载它。或者也可以使用Keras加载,如下步骤所示。

import pandas as pd import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense (train_features, train_labels), (test_features, test_labels) = keras.datasets.boston_housing.load_data() pd.DataFrame(train_features).head()

如果从Keras加载数据,将得到一个NumPy数组。因此,为了更好地查看它,将把它转换成一个pandas数据框并查看数据框的头部。

现在已经看到了数据集的样子;可以开始构建深度学习回归模型。将使用TensorFlow库来创建模型。由于数据集不是很大,可以限制深度学习模型中的层数并节省时间。将使用两个全连接层,激活函数为relu。relu激活函数如果输入大于0,则直接输出输入;否则返回零。

model = keras.Sequential() model.add(Dense(20, activation='relu', input_shape=[len(train_features[0])])) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse', metrics=['mse']) history = model.fit(train_features, train_labels, epochs=20, verbose=0)

在上述代码中,创建了一个前馈神经网络。训练了模型20个周期,并使用均方误差作为损失函数,使用adam优化器。现在可以在测试数据上预测结果并与实际值进行比较。

from sklearn.metrics import mean_squared_error as mse pred = model.predict(test_features) mse(pred, test_labels)

可以使用其他值集,如平均绝对误差代替均方误差,或者使用RMS优化器代替adam优化器。还可以调整学习率和周期数以获得更好的结果。

深度学习回归模型已经完成,并且如承诺的那样,将比较其结果与一些流行的机器学习算法。

首先,将训练著名的k最近邻回归器数据。该算法在分类问题中很受欢迎,但在回归任务中也能给出公平的结果。它计算训练和测试集中示例之间的距离。然后根据最接近问题的K个示例进行预测。

from sklearn.neighbors import KNeighborsRegressor as KNN model_k = KNN(n_neighbors=3) model_k.fit(train_features, train_labels) pred_k = model_k.predict(test_features) mse(pred_k, test_labels)

线性回归是一种监督学习算法,它期望输入和输出变量之间存在线性关系。它基于公式Y = a + bX工作。这里,X是解释变量,Y是因变量,b是最佳拟合线的斜率。

from sklearn.linear_model import LinearRegression model_l = LinearRegression() model_l.fit(train_features, train_labels) pred_l = model_l.predict(test_features) mse(pred_l, test_labels)

支持向量机是一种监督学习算法,它在N维空间中找到一个超平面,并将数据点明显分类。超平面是分隔类别的最佳线,并将它们分隔到N维空间中。SVM也可用于数据不是线性可分的情况。

from sklearn.svm import SVR model_s = SVR(C=1.0) model_s.fit(train_features, train_labels) pred_s = model_s.predict(test_features) mse(pred_s, test_labels)

Sklearn还提供了一个正则化参数C,与SVM一起使用。正则化可以防止模型学习许多可能导致数据过拟合的复杂特征。

现在来到了激动人心的部分,将比较迄今为止创建的所有模型。将根据均方根误差比较模型。

模型 算法 MSE(均方误差) 训练时间(s)
model 前馈神经网络 119.768 2.929
model_k KNN 41.428 0.008
model_l 线性回归 23.195 0.063
model_s SVM 66.345 0.305

从表中,可以得出几个结论。深度学习模型的错误更大,训练时间比机器学习算法更长。这可能是由于架构的简单性或缺乏训练数据。线性回归模型给出了最小的错误,这意味着输入和目标变量之间存在完美的线性关系。还训练了没有正则化参数的SVM,显示出几乎相同的结果。这意味着数据集中的所有特征都与目标变量相关。

结论:深度学习提供了许多优势,但不能取代简单的问题。本文创建了使用深度学习和简单机器学习算法的回归模型。从结果中看到,训练深度学习模型可能并不总是最佳选择。对于选择的数据集,即使是更简单的机器学习算法也优于深度学习。因此,可以得出结论,只有在简单的机器学习算法未能提供令人满意的结果时,才应使用深度学习。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485