详解 Scikit-learn 的 neural_network.MLPRegressor函数:多层感知器回归器

  • Post category:Python

sklearn.neural_network.MLPRegressor 是 Scikit-learn 中的神经网络模型,用于回归任务。该模型允许用户定义多层感知器(MLP)的结构,并使用反向传播算法进行训练。在该模型中,输入层的神经元接受训练数据的输入,输出层的神经元提供预测的输出,而中间层则通过一些非线性函数(如 ReLU)将输入转换成更高层次的特征表示。

使用该函数的过程如下:

  1. 导入需要的库
from sklearn.neural_network import MLPRegressor
  1. 准备数据

为了使用 MLPRegressor 模型,需要准备训练集和测试集,并将其转换为 NumPy 数组(或 Pandas 数据框)的格式。比如:

import numpy as np

# 生成随机数据
X_train = np.random.rand(100, 10)
y_train = np.random.rand(100)

X_test = np.random.rand(50, 10)
y_test = np.random.rand(50)
  1. 构建模型

构建 MLPRegressor 模型,需要指定模型的结构和参数。比如指定包括两个隐藏层,每个隐藏层有 20 个神经元的 MLP 模型:

model = MLPRegressor(hidden_layer_sizes=(20, 20))
  1. 训练模型

调用 fit 方法,使用训练集来训练模型:

model.fit(X_train, y_train)
  1. 预测输出

使用训练好的模型进行预测:

y_pred = model.predict(X_test)

两个实例说明:

示例1:预测房屋价格

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 导入数据集并划分训练集和测试集
data = load_boston()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)

# 数据规范化
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# 构建模型
model = MLPRegressor(hidden_layer_sizes=(30, 30), max_iter=500, solver='adam', tol=0.0001)

# 训练模型
model.fit(X_train, y_train)

# 预测输出
y_pred = model.predict(X_test)

示例2:预测波士顿公共交通票价

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 读取数据
data = pd.read_csv('boston_transit.csv')

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.drop('Fare',axis=1), data['Fare'], test_size=0.2, random_state=42)

# 数据规范化
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# 构建模型
model = MLPRegressor(hidden_layer_sizes=(20, 20, 20), max_iter=500, solver='adam', tol=0.0001)

# 训练模型
model.fit(X_train, y_train)

# 预测输出
y_pred = model.predict(X_test)