MLPClassifier#

class sklearn.neural_network.MLPClassifier(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)[source]#

多层感知器分类器。

此模型使用 LBFGS 或随机梯度下降优化对数损失函数。

0.18 版本新增。

参数:
hidden_layer_sizes形状为 (n_layers - 2,) 的类数组,默认值=(100,)

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

activation{‘identity’, ‘logistic’, ‘tanh’, ‘relu’},默认值=’relu’

隐藏层的激活函数。

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

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

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

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

solver{‘lbfgs’, ‘sgd’, ‘adam’},默认值=’adam’

权重优化的求解器。

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

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

  • ‘adam’ 指由 Kingma, Diederik 和 Jimmy Ba 提出的基于随机梯度的优化器。

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

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

alpha浮点数,默认值=0.0001

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

有关不同正则化用法的示例和可视化,请参阅 多层感知器中不同正则化强度的影响

batch_size整数,默认值=’auto’

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

learning_rate{‘constant’, ‘invscaling’, ‘adaptive’},默认值=’constant’

权重更新的学习率调度。

  • ‘constant’ 是由 ‘learning_rate_init’ 给定的常数学习率。

  • ‘invscaling’ 在每个时间步 ‘t’ 使用 ‘power_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_init浮点数,默认值=0.001

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

power_t浮点数,默认值=0.5

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

max_iter整数,默认值=200

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

shuffle布尔值,默认值=True

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

random_state整数,RandomState 实例,默认值=None

确定权重和偏差初始化、(如果使用早期停止)训练-测试集划分以及(当 solver=’sgd’ 或 ‘adam’ 时)批量采样的随机数生成。传入一个整数可在多次函数调用中获得可重现的结果。请参阅 术语表

tol浮点数,默认值=1e-4

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

verbose布尔值,默认值=False

是否向标准输出打印进度消息。

warm_start布尔值,默认值=False

当设置为 True 时,重用上次 fit 调用的解决方案作为初始化,否则,擦除之前的解决方案。请参阅 术语表

momentum浮点数,默认值=0.9

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

nesterovs_momentum布尔值,默认值=True

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

early_stopping布尔值,默认值=False

是否使用早期停止来终止训练,当验证分数没有改善时。如果设置为 True,它将自动留出 10% 的训练数据作为验证集,并在验证分数在连续 n_iter_no_change 个 epoch 中未能至少改善 tol 时终止训练。除了多标签设置外,数据拆分是分层的。如果 early stopping 为 False,则当训练损失在连续 n_iter_no_change 次遍历训练集后未改善超过 tol 时,训练停止。仅当 solver=’sgd’ 或 ‘adam’ 时有效。

validation_fraction浮点数,默认值=0.1

用于早期停止而留作验证集的训练数据比例。必须介于 0 和 1 之间。仅当 early_stopping 为 True 时使用。

beta_1浮点数,默认值=0.9

Adam 中第一阶矩向量估计的指数衰减率,应在 [0, 1) 之间。仅当 solver=’adam’ 时使用。

beta_2浮点数,默认值=0.999

Adam 中第二阶矩向量估计的指数衰减率,应在 [0, 1) 之间。仅当 solver=’adam’ 时使用。

epsilon浮点数,默认值=1e-8

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

n_iter_no_change整数,默认值=10

未达到 tol 改进的最大 epoch 数。仅当 solver=’sgd’ 或 ‘adam’ 时有效。

0.20 版本新增。

max_fun整数,默认值=15000

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

0.22 版本新增。

属性:
classes_形状为 (n_classes,) 的 ndarray 或 ndarray 列表

每个输出的类别标签。

loss_浮点数

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

best_loss_浮点数或 None

求解器在整个拟合过程中达到的最小损失。如果 early_stopping=True,此属性设置为 None。请改用 best_validation_score_ 拟合属性。

loss_curve_形状为 (n_iter_,) 的列表

列表中第 i 个元素表示第 i 次迭代时的损失。

validation_scores_形状为 (n_iter_,) 的列表或 None

在保留验证集上每次迭代的分数。报告的分数是准确率分数。仅当 early_stopping=True 时可用,否则属性设置为 None

best_validation_score_浮点数或 None

触发早期停止的最佳验证分数(即准确率分数)。仅当 early_stopping=True 时可用,否则属性设置为 None

t_整数

求解器在拟合过程中看到的训练样本数量。

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

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

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

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

n_features_in_整数

拟合 期间看到的特征数量。

0.24 版本新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合 期间看到的特征名称。仅当 X 的特征名称都是字符串时定义。

1.0 版本新增。

n_iter_整数

求解器已运行的迭代次数。

n_layers_整数

层数。

n_outputs_整数

输出数量。

out_activation_字符串

输出激活函数的名称。

另请参见

MLPRegressor

多层感知器回归器。

BernoulliRBM

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

备注

MLPClassifier 以迭代方式进行训练,因为在每个时间步,都会计算损失函数对模型参数的偏导数以更新参数。

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

此实现支持以密集 numpy 数组或稀疏 scipy 浮点值数组表示的数据。

参考文献

Hinton, Geoffrey E. “Connectionist learning procedures.” Artificial intelligence 40.1 (1989): 185-234.

Glorot, Xavier, and Yoshua Bengio. “Understanding the difficulty of training deep feedforward neural networks.” International Conference on Artificial Intelligence and Statistics. 2010.

He, Kaiming, et al (2015). “Delving deep into rectifiers: Surpassing human-level performance on imagenet classification.”

Kingma, Diederik, and Jimmy Ba (2014) “Adam: A method for stochastic optimization.”

示例

>>> from sklearn.neural_network import MLPClassifier
>>> from sklearn.datasets import make_classification
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_classification(n_samples=100, random_state=1)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y,
...                                                     random_state=1)
>>> clf = MLPClassifier(random_state=1, max_iter=300).fit(X_train, y_train)
>>> clf.predict_proba(X_test[:1])
array([[0.0383, 0.961]])
>>> clf.predict(X_test[:5, :])
array([1, 0, 1, 0, 1])
>>> clf.score(X_test, y_test)
0.8...
fit(X, y, sample_weight=None)[source]#

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

参数:
X形状为 (n_samples, n_features) 的 ndarray 或稀疏矩阵

输入数据。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的 ndarray

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

sample_weight形状为 (n_samples,) 的类数组,默认值=None

样本权重。

1.7 版本新增。

返回:
self对象

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

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRequest

一个封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认值=True

如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回:
params字典

参数名称映射到其值。

partial_fit(X, y, sample_weight=None, classes=None)[source]#

使用对给定数据的单次迭代更新模型。

参数:
X形状为 (n_samples, n_features) 的 {类数组,稀疏矩阵}

输入数据。

目标值。

y形状为 (n_samples,) 的类数组

sample_weight形状为 (n_samples,) 的类数组,默认值=None

样本权重。

1.7 版本新增。

classes形状为 (n_classes,) 的数组,默认值=None

所有 partial_fit 调用中的类别。可以通过 np.unique(y_all) 获取,其中 y_all 是整个数据集的目标向量。此参数在第一次调用 partial_fit 时是必需的,后续调用中可以省略。请注意,y 不必包含 classes 中的所有标签。

返回:
self对象

训练好的 MLP 模型。

predict(X)[source]#

使用多层感知器分类器进行预测。

参数:
X形状为 (n_samples, n_features) 的 {类数组,稀疏矩阵}

输入数据。

返回:
y形状为 (n_samples,) 或 (n_samples, n_classes) 的 ndarray

预测的类别。

predict_log_proba(X)[source]#

返回概率估计的对数。

参数:
X形状为 (n_samples, n_features) 的 ndarray

输入数据。

返回:
log_y_prob形状为 (n_samples, n_classes) 的 ndarray

模型中每个类别的样本的预测对数概率,其中类别按 self.classes_ 中的顺序排列。等同于 log(predict_proba(X))

predict_proba(X)[source]#

概率估计。

参数:
X形状为 (n_samples, n_features) 的 {类数组,稀疏矩阵}

输入数据。

返回:
y_prob形状为 (n_samples, n_classes) 的 ndarray

模型中每个类别的样本的预测概率,其中类别按 self.classes_ 中的顺序排列。

score(X, y, sample_weight=None)[source]#

返回所提供数据和标签的 准确率

在多标签分类中,这是子集准确率,这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。

参数:
X形状为 (n_samples, n_features) 的类数组

测试样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组

X 的真实标签。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

样本权重。

返回:
score浮点数

self.predict(X) 相对于 y 的平均准确率。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') MLPClassifier[source]#

请求传递给 fit 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时才相关(请参阅 sklearn.set_config)。请参阅 用户指南 以了解路由机制的工作原理。

每个参数的选项为

  • True:请求元数据,如果提供则传递给 fit。如果未提供元数据,则忽略该请求。

  • False:不请求元数据,且元估计器不会将其传递给 fit

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:元数据应以此给定别名而非原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

1.3 版本新增。

注意

此方法仅在此估计器用作元估计器的子估计器时才相关,例如在 Pipeline 内部使用时。否则无效。

参数:
sample_weight字符串,True,False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

set_partial_fit_request(*, classes: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') MLPClassifier[source]#

请求传递给 partial_fit 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时才相关(请参阅 sklearn.set_config)。请参阅 用户指南 以了解路由机制的工作原理。

每个参数的选项为

  • True:请求元数据,如果提供则传递给 partial_fit。如果未提供元数据,则忽略该请求。

  • False:不请求元数据,且元估计器不会将其传递给 partial_fit

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:元数据应以此给定别名而非原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

1.3 版本新增。

注意

此方法仅在此估计器用作元估计器的子估计器时才相关,例如在 Pipeline 内部使用时。否则无效。

参数:
classes字符串,True,False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

partial_fit 方法中 classes 参数的元数据路由。

sample_weight字符串,True,False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

partial_fit 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') MLPClassifier[source]#

请求传递给 score 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时才相关(请参阅 sklearn.set_config)。请参阅 用户指南 以了解路由机制的工作原理。

每个参数的选项为

  • True:请求元数据,如果提供则传递给 score。如果未提供元数据,则忽略该请求。

  • False:不请求元数据,且元估计器不会将其传递给 score

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:元数据应以此给定别名而非原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

1.3 版本新增。

注意

此方法仅在此估计器用作元估计器的子估计器时才相关,例如在 Pipeline 内部使用时。否则无效。

参数:
sample_weight字符串,True,False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

score 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。