Scikit-learn的sklearn.neural_network.MLPRegressor函数
Scikit-learn的sklearn.neural_network.MLPRegressor是一个实现多层神经网络回归的函数。它可以训练一个具有一个或多个隐藏层的神经网络,并使用反向传播算法进行训练。
MLPRegressor的使用方法
首先,导入必要的库和数据集:
import numpy as np
from sklearn.neural_network import MLPRegressor
from sklearn.datasets import make_regression
# 制作回归数据,并拆分为训练集和测试集
X, y = make_regression(n_samples=100, n_features=10, random_state=1)
X_train, X_test = X[:80], X[80:]
y_train, y_test = y[:80], y[80:]
然后,我们可以创建MLPRegressor对象并进行训练和测试。在创建对象时,我们可以指定隐藏层的数量和每个隐藏层中神经元的数量。默认情况下,MLPRegressor使用具有10个神经元的单个隐藏层。
# 创建MLPRegressor对象,指定两个隐藏层并且每层有5个神经元
mlp = MLPRegressor(hidden_layer_sizes=(5, 5), max_iter=1000)
# 训练模型
mlp.fit(X_train, y_train)
# 测试模型
y_pred = mlp.predict(X_test)
MLPRegressor的其他可用参数包括学习率、正则化项系数、停止训练的容差(tolerance)、随机数生成种子(random_state)等。这些参数的具体用法在下面给出的实例中会有更详细的介绍。
实例一:使用MLPRegressor进行房价预测
我们将使用一个加利福尼亚房价数据集来演示如何使用MLPRegressor进行房价预测。首先,我们导入数据集、分割数据集并进行特征缩放。
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 导入数据集,并分割为训练集和测试集
data = fetch_california_housing()
X_train, X_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.2, random_state=1)
# 对特征进行缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
接下来,我们创建一个MLPRegressor对象。我们将使用两个隐藏层,每个隐藏层有16个神经元。我们还将使用L2正则化,正则化系数为0.01,学习率为0.001,停止容差为1e-5。
mlp = MLPRegressor(hidden_layer_sizes=(16, 16), alpha=0.01, learning_rate_init=0.001,
tol=1e-5, max_iter=1000, random_state=1)
接下来,我们将模型拟合到训练数据上。
mlp.fit(X_train, y_train)
最后,我们使用测试数据评估模型的表现。
from sklearn.metrics import mean_squared_error
y_pred = mlp.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("MSE: ", mse)
打印出来的结果将是均方误差(MSE)。
实例二:使用MLPRegressor进行带有交互特征的销售预测
这次我们将在线性回归任务中使用MLPRegressor。我们将创建一些人工特征,其中包含一些交互特征。之后我们看看使用MLPRegressor在不包含这些交互特征的情况下与包含这些交互特征的情况下性能的差异。 我们首先制作特征并拆分数据集。
# 制作人工特征
X = np.random.rand(1000, 5)
X[:, 2] = X[:, 0] * X[:, 1] # 增加交互特征
y = np.sum(X, axis=1)
# 将数据集拆分成训练和测试集
X_train, X_test = X[:800], X[800:]
y_train, y_test = y[:800], y[800:]
接下来,我们训练一个MLPRegressor模型。
mlp = MLPRegressor(hidden_layer_sizes=(10, 10), max_iter=1000, random_state=1)
mlp.fit(X_train, y_train)
我们还可以计算模型在测试集上的R²分数。
from sklearn.metrics import r2_score
y_pred = mlp.predict(X_test)
r2 = r2_score(y_test, y_pred)
print("R²: ", r2)
接下来,我们制作包含交互特征的人工特征,并重新拆分数据集。
# 制作包含交互特征的人工特征
X = np.random.rand(1000, 5)
X[:, 2] = X[:, 0] * X[:, 1]
X[:, 3] = X[:, 0] / (X[:, 1] + 0.1)
y = np.sum(X, axis=1)
X_train, X_test = X[:800], X[800:]
y_train, y_test = y[:800], y[800:]
我们再训练一个MLPRegressor模型。
mlp = MLPRegressor(hidden_layer_sizes=(10, 10), max_iter=1000, random_state=1)
mlp.fit(X_train, y_train)
计算模型在测试集上的R²分数。
y_pred = mlp.predict(X_test)
r2 = r2_score(y_test, y_pred)
print("R²: ", r2)
在这个例子中,我们使用了MLPRegressor的默认参数来构建模型,只改变了输入特征。我们可以看到,包含交互特征的模型的R²分数更高。
这两个实例展示了如何使用MLPRegressor函数去拟合回归模型,以及如何进行模型参数的选择,从而提高模型预测的准确性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 neural_network.MLPRegressor函数:多层感知器回归器 - Python技术站