回归分析与人工神经网络

回归分析是一种监督学习技术,它涉及到学习特征和目标之间的关系。目标值是连续的,意味着这些值可以在一个区间内取任何值。例如,1.2、2.4和5.6都被认为是连续值。回归分析的应用案例包括股市价格预测、房价预测、销售额预测等。

在回归分析中,目标是学习假设函数中的参数。模型参数包括截距(beta 0)和斜率(beta 1)。上述方程适用于单变量数据,即数据中只有一个特征列。线性回归如何学习这些参数呢?分子表示数据的协方差,分母表示特征X的方差。结果将是beta 1的值,也称为斜率。beta 1参数决定了线性回归线的斜率。截距决定了线在y轴上的通过位置。

在上图中,截距值为5,因为这是线性回归线通过y轴的点。通过这种方式,线性回归学习了特征和目标之间的关系。

为什么需要使用人工神经网络进行回归分析,而不是简单地使用线性回归呢?使用人工神经网络进行回归分析而不是线性回归的目的是,线性回归只能学习特征和目标之间的线性关系,因此不能学习复杂的非线性关系。为了学习特征和目标之间的复杂非线性关系,需要其他技术。其中一种技术就是使用人工神经网络。人工神经网络由于每一层都有激活函数,因此有能力学习复杂的关系。让看看什么是人工神经网络以及它们是如何工作的。

人工神经网络是深度学习算法之一,它模拟人脑中神经元的工作方式。有许多类型的人工神经网络,包括传统的神经网络、循环神经网络和卷积神经网络。传统的神经网络只能处理结构化数据,而循环神经网络和卷积神经网络能够很好地处理非结构化数据。在本文中,将使用传统的神经网络进行回归分析。

人工神经网络的结构包括输入层、隐藏层和输出层。隐藏层可以有多个。每一层由n个神经元组成。每一层都有一个与每个神经元相关的激活函数。激活函数是负责引入关系的非线性的函数。在例子中,输出层必须包含一个线性激活函数。每一层还可以有与之相关的正则化器。正则化器负责防止过拟合。

人工神经网络包括两个阶段:前向传播和反向传播。前向传播是将权重与每个特征相乘并相加的过程。结果中还要加上偏置。反向传播是更新模型中权重的过程。反向传播需要一个优化函数和一个损失函数。

使用TensorFlow进行回归分析的整个代码在Google Colab中执行。使用的数据是加州房价数据集,将预测房价的中位数。数据在Colab中的路径是/content/sample_data/california_housing_train.csv。将使用TensorFlow来训练模型。

import math import pandas as pd import tensorflow as tf import matplotlib.pyplot as plt from tensorflow.keras import Model from tensorflow.keras import Sequential from tensorflow.keras.optimizers import Adam from sklearn.preprocessing import StandardScaler from tensorflow.keras.layers import Dense, Dropout from sklearn.model_selection import train_test_split from tensorflow.keras.losses import MeanSquaredLogarithmicError TRAIN_DATA_PATH = '/content/sample_data/california_housing_train.csv' TEST_DATA_PATH = '/content/sample_data/california_housing_test.csv' TARGET_NAME = 'median_house_value' train_data = pd.read_csv(TRAIN_DATA_PATH) test_data = pd.read_csv(TEST_DATA_PATH) x_train, y_train = train_data.drop(TARGET_NAME, axis=1), train_data[TARGET_NAME] x_test, y_test = test_data.drop(TARGET_NAME, axis=1), test_data[TARGET_NAME] def scale_datasets(x_train, x_test): """ 标准化测试和训练数据 Z分数归一化 """ standard_scaler = StandardScaler() x_train_scaled = pd.DataFrame( standard_scaler.fit_transform(x_train), columns=x_train.columns ) x_test_scaled = pd.DataFrame( standard_scaler.transform(x_test), columns = x_test.columns ) return x_train_scaled, x_test_scaled x_train_scaled, x_test_scaled = scale_datasets(x_train, x_test) hidden_units1 = 160 hidden_units2 = 480 hidden_units3 = 256 learning_rate = 0.01 def build_model_using_sequential(): model = Sequential([ Dense(hidden_units1, kernel_initializer='normal', activation='relu'), Dropout(0.2), Dense(hidden_units2, kernel_initializer='normal', activation='relu'), Dropout(0.2), Dense(hidden_units3, kernel_initializer='normal', activation='relu'), Dense(1, kernel_initializer='normal', activation='linear') ]) return model model = build_model_using_sequential() msle = MeanSquaredLogarithmicError() model.compile( loss=msle, optimizer=Adam(learning_rate=learning_rate), metrics=[msle] ) history = model.fit( x_train_scaled.values, y_train.values, epochs=10, batch_size=64, validation_split=0.2 )

在构建Sequential类的模型后,需要用训练配置来编译模型。使用均方对数误差作为损失函数和度量,以及Adam损失函数优化器。损失函数用于优化模型,而度量用于参考。编译模型后,需要训练模型。对于训练,使用fit函数,它接受以下参数:特征、目标、周期、批量大小和验证分割。选择了10个周期来运行。一个周期是训练数据的单次通过。使用了64的批量大小。

训练后,绘制历史记录。

def plot_history(history, key): plt.plot(history.history[key]) plt.plot(history.history['val_'+key]) plt.xlabel("周期") plt.ylabel(key) plt.legend([key, 'val_'+key]) plt.show() plot_history(history, 'mean_squared_logarithmic_error')

上图显示,随着周期的增加,损失减少,这是进步的好兆头。现在已经训练了模型,可以使用该模型来预测未见过的数据,在例子中,是测试数据。

x_test['prediction'] = model.predict(x_test_scaled)

通过这种方式,可以利用人工神经网络进行回归分析

常见问题解答

Q1. 什么是神经网络回归? A. 神经网络回归是一种机器学习技术,其中使用人工神经网络来建模和预测连续的数值。网络从输入-输出数据对中学习,调整其权重和偏差,以近似输入变量和目标变量之间的潜在关系。这使得神经网络能够执行回归任务,在各种预测和预测应用中非常有价值。

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