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.
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对象
更新后的对象。