MLPRegressor#

class sklearn.neural_network.MLPRegressor(hidden_layer_sizes=(100,), activation='relu', *, solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08, n_iter_no_change=10, max_fun=15000)#

多层感知器回归器。

该模型使用LBFGS或随机梯度下降优化平方误差。

Added in version 0.18.

Parameters:
hidden_layer_sizesarray-like of shape(n_layers - 2,), default=(100,)

第i个元素表示第i个隐藏层中的神经元数量。

activation{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, default=’relu’

隐藏层的激活函数。

  • ‘identity’, 无操作激活,用于实现线性瓶颈, 返回 f(x) = x

  • ‘logistic’, 逻辑sigmoid函数, 返回 f(x) = 1 / (1 + exp(-x))。

  • ‘tanh’, 双曲正切函数, 返回 f(x) = tanh(x)。

  • ‘relu’, 修正线性单元函数, 返回 f(x) = max(0, x)

solver{‘lbfgs’, ‘sgd’, ‘adam’}, default=’adam’

权重优化的求解器。

  • ‘lbfgs’ 是拟牛顿法家族中的优化器。

  • ‘sgd’ 指的是随机梯度下降。

  • ‘adam’ 指的是由Kingma, Diederik和Jimmy Ba提出的随机梯度下降优化器

有关Adam优化器和SGD的比较,请参见 对比MLPClassifier的随机学习策略

注意:默认求解器’adam’在相对较大的数据集(具有数千个训练样本或更多)上表现良好, 在训练时间和验证分数方面都是如此。 对于小数据集,’lbfgs’可以更快收敛并表现更好。

alphafloat, default=0.0001

L2正则化项的强度。L2正则化项在添加到损失时会除以样本大小。

batch_sizeint, default=’auto’

随机优化器的小批量大小。 如果求解器是’lbfgs’,回归器将不使用小批量。 当设置为”auto”时, batch_size=min(200, n_samples)

learning_rate{‘constant’, ‘invscaling’, ‘adaptive’}, default=’constant’

权重更新的学习率计划。

  • ‘constant’ 是给定的恒定学习率 ‘learning_rate_init’。

  • ‘invscaling’ 使用’power_t’的逆缩放指数逐渐降低学习率 learning_rate_ 在每个时间步’t’。 effective_learning_rate = learning_rate_init / pow(t, power_t)

  • ‘adaptive’ 保持学习率恒定为 ‘learning_rate_init’,只要训练损失不断减少。 每次连续两个epoch未能将训练损失减少至少tol,或者如果 ‘early_stopping’开启,未能将验证分数增加至少tol,当前学习率除以5。

仅在solver=’sgd’时使用。

learning_rate_initfloat, default=0.001

使用的初始学习率。它控制更新权重的步长。仅在solver=’sgd’或’adam’时使用。

power_tfloat, default=0.5

逆缩放学习率的指数。 在设置learning_rate为’invscaling’时用于更新有效学习率。仅在solver=’sgd’时使用。

max_iterint, default=200

最大迭代次数。求解器迭代直到收敛 (由’tol’决定)或此迭代次数。对于随机求解器(’sgd’, ‘adam’),注意这决定了epoch的数量 (每个数据点将被使用的次数),而不是梯度步数。

shufflebool, default=True

是否在每次迭代中打乱样本。仅在solver=’sgd’或’adam’时使用。

random_stateint, RandomState instance, default=None

确定权重和偏差初始化、如果使用早停法时的训练-测试分割以及求解器为’sgd’或’adam’时的批量采样的随机数生成。 传递一个int以在多次函数调用中获得可重复的结果。 参见 Glossary

tolfloat, default=1e-4

优化的容差。当损失或分数在连续的 n_iter_no_change 次迭代中未能改善至少 tol 时, 除非 learning_rate 设置为’adaptive’,否则认为收敛并停止训练。

verbosebool, default=False

是否将进度消息打印到stdout。

warm_startbool, default=False

当设置为True时,重用上一次调用fit的解决方案作为初始化,否则,只擦除之前的解决方案。参见 the Glossary

momentumfloat, default=0.9

梯度下降更新的动量。应在0和1之间。仅在solver=’sgd’时使用。

nesterovs_momentumbool, default=True

是否使用Nesterov动量。仅在solver=’sgd’且momentum > 0时使用。

early_stoppingbool, default=False

是否使用早停法在验证分数不改善时终止训练。如果设置为True,将自动设置 训练数据的 validation_fraction 作为验证,并在验证分数连续 n_iter_no_change 个epoch未能改善至少 tol 时终止训练。 仅在solver=’sgd’或’adam’时有效。

validation_fractionfloat, default=0.1

作为早停法验证集的训练数据比例。必须在0和1之间。 仅在early_stopping为True时使用。

beta_1float, default=0.9

adam中第一个时刻向量的指数衰减率,应在[0, 1)之间。仅在solver=’adam’时使用。

beta_2float, default=0.999

adam中第二个时刻向量的指数衰减率,应在[0, 1)之间。仅在solver=’adam’时使用。

epsilonfloat, default=1e-8

adam中的数值稳定性值。仅在solver=’adam’时使用。

n_iter_no_changeint, default=10

未能满足 tol 改善的最大epoch数。 仅在solver=’sgd’或’adam’时有效。

Added in version 0.20.

max_funint, default=15000

仅在solver=’lbfgs’时使用。最大函数调用次数。 求解器迭代直到收敛(由 tol 决定)、迭代次数达到max_iter,或此函数调用次数。 注意,函数调用次数将大于或等于MLPRegressor的迭代次数。

Added in version 0.22.

Attributes:
loss_float

使用损失函数计算的当前损失。

best_loss_float

求解器在整个拟合过程中达到的最小损失。 如果 early_stopping=True ,此属性设置为 None 。请参考 best_validation_score_ 拟合属性。 仅在solver=’sgd’或’adam’时可访问。

loss_curve_list of shape ( n_iter_ ,)

每个训练步骤结束时的损失值。 列表中的第i个元素表示第i次迭代的损失。 仅在solver=’sgd’或’adam’时可访问。

validation_scores_list of shape ( n_iter_ ,) or None

在保留的验证集上每次迭代的分数。报告的分数是R2分数。仅在 early_stopping=True 时可用, 否则属性设置为 None 。 仅在solver=’sgd’或’adam’时可访问。

best_validation_score_float 或 None

触发早期停止的最佳验证分数(即 R2 分数)。仅在 early_stopping=True 时可用,否则该属性设置为 None 。 仅当 solver=’sgd’ 或 ‘adam’ 时可访问。

t_int

拟合过程中求解器观察到的训练样本数目。 数学上等于 n_iters * X.shape[0] ,表示 时间步 ,并被优化器的学习率调度器使用。

coefs_形状为 (n_layers - 1,) 的列表

列表中的第 i 个元素表示与第 i 层对应的权重矩阵。

intercepts_形状为 (n_layers - 1,) 的列表

列表中的第 i 个元素表示与第 i + 1 层对应的偏置向量。

n_features_in_int

fit 过程中观察到的特征数目。

feature_names_in_形状为 ( n_features_in_ ,) 的 ndarray

fit 过程中观察到的特征名称。仅当 X 的特征名称全部为字符串时有效。

n_iter_int

求解器运行的迭代次数。

n_layers_int

层的数量。

n_outputs_int

输出的数量。

out_activation_str

输出激活函数的名称。

See also

BernoulliRBM

伯努利受限玻尔兹曼机(RBM)。

MLPClassifier

多层感知器分类器。

sklearn.linear_model.SGDRegressor

通过 SGD 最小化正则化经验损失拟合的线性模型。

Notes

MLPRegressor 是通过迭代训练的,因为在每个时间步中,会计算损失函数相对于模型参数的偏导数以更新参数。

也可以在损失函数中添加正则化项,将模型参数缩小以防止过拟合。

此实现适用于表示为浮点值的密集和稀疏 numpy 数组的数据。

References

Hinton, Geoffrey E. “连接主义学习程序。” 人工智能 40.1(1989):185-234。

Glorot, Xavier 和 Yoshua Bengio。 “理解训练深度前馈神经网络的困难。” 人工智能与统计学国际会议。2010。

He, Kaiming 等(2015)。”深入研究整流器:在 imagenet 分类上超越人类水平表现。”

Kingma, Diederik 和 Jimmy Ba(2014)。”Adam:一种用于随机优化的方法。”

Examples

>>> from sklearn.neural_network import MLPRegressor
>>> from sklearn.datasets import make_regression
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_regression(n_samples=200, random_state=1)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y,
...                                                     random_state=1)
>>> regr = MLPRegressor(random_state=1, max_iter=500).fit(X_train, y_train)
>>> regr.predict(X_test[:2])
array([-0.9..., -7.1...])
>>> regr.score(X_test, y_test)
0.4...
fit(X, y)#

拟合模型到数据矩阵X和目标值y。

Parameters:
Xndarray 或 sparse matrix,形状为 (n_samples, n_features)

输入数据。

yndarray,形状为 (n_samples,) 或 (n_samples, n_outputs)

目标值(在分类中为类别标签,在回归中为实数)。

Returns:
selfobject

返回一个训练好的MLP模型。

get_metadata_routing()#

获取此对象的元数据路由。

请查看 用户指南 以了解路由机制的工作原理。

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

partial_fit(X, y)#

更新模型,通过在给定数据上进行单次迭代。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入数据。

yndarray,形状为 (n_samples,)

目标值。

Returns:
selfobject

训练好的 MLP 模型。

predict(X)#

使用多层感知器模型进行预测。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入数据。

Returns:
yndarray,形状为 (n_samples, n_outputs)

预测值。

score(X, y, sample_weight=None)#

返回预测的决定系数。

决定系数 \(R^2\) 定义为 \((1 - rac{u}{v})\) ,其中 \(u\) 是残差平方和 ((y_true - y_pred)** 2).sum() ,而 \(v\) 是总平方和 ((y_true - y_true.mean()) ** 2).sum() 。最好的可能得分是 1.0,它可能是负的(因为模型可能任意地差)。一个总是预测 y 的期望值的常数模型,忽略输入特征,将得到 \(R^2\) 得分为 0.0。

Parameters:
Xarray-like of shape (n_samples, n_features)

测试样本。对于某些估计器,这可能是一个预计算的核矩阵或一个形状为 (n_samples, n_samples_fitted) 的通用对象列表,其中 n_samples_fitted 是估计器拟合中使用的样本数量。

yarray-like of shape (n_samples,) or (n_samples, n_outputs)

X 的真实值。

sample_weightarray-like of shape (n_samples,), default=None

样本权重。

Returns:
scorefloat

\(R^2\) 相对于 yself.predict(X)

Notes

在调用回归器的 score 时使用的 \(R^2\) 得分从 0.23 版本开始使用 multioutput='uniform_average' 以保持与 r2_score 默认值一致。 这影响了所有多输出回归器的 score 方法(除了 MultiOutputRegressor )。

set_params(**params)#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline )。后者具有形式为 <component>__<parameter> 的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') MLPRegressor#

Request metadata passed to the score method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to score if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to score .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for sample_weight parameter in score .

Returns:
selfobject

The updated object.