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’:逻辑 sigmoid 函数,返回 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’ 收敛速度更快,性能也更好。
- alphafloat, default=0.0001
L2 正则化项的强度。L2 正则化项在添加到损失函数时除以样本大小。
有关不同正则化用法的示例和可视化,请参见 多层感知机中的正则化变化。
- batch_sizeint,默认值=’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_initfloat,默认值=0.001
使用的初始学习率。它控制更新权重的步长。仅当 solver=’sgd’ 或 ‘adam’ 时使用。
- power_tfloat, default=0.5
用于反向缩放学习率的指数。当 learning_rate 设置为 ‘invscaling’ 时,用于更新有效学习率。仅当 solver=’sgd’ 时使用。
- max_iter整型, 默认为 200
最大迭代次数。求解器迭代直到收敛(由 ‘tol’ 确定)或达到此迭代次数。对于随机求解器(‘sgd’、‘adam’),请注意这决定了 epoch 数(每个数据点将被使用多少次),而不是梯度步数。
- shufflebool, default=True
是否在每次迭代中打乱样本。仅当 solver=’sgd’ 或 ‘adam’ 时使用。
- random_stateint, RandomState instance, default=None
确定权重和偏差初始化的随机数生成,如果使用提前停止,则确定训练-测试集分割,以及当 solver=’sgd’ 或 ‘adam’ 时确定批量采样。传递一个整数可在多次函数调用中获得可重现的结果。参见 词汇表。
- tolfloat, default=1e-4
优化的容差。当损失或分数在
n_iter_no_change次连续迭代中没有至少提高tol时(除非learning_rate设置为 ‘adaptive’),则认为已达到收敛并停止训练。- verbosebool, default=False
是否将进度消息打印到标准输出。
- warm_startbool, default=False
When set to True, reuse the solution of the previous call to fit as initialization, otherwise, just erase the previous solution. See the Glossary.
- momentumfloat,默认值=0.9
梯度下降更新的动量。应在 0 到 1 之间。仅当 solver=’sgd’ 时使用。
- nesterovs_momentumbool,默认值=True
是否使用 Nesterov 动量。仅当 solver=’sgd’ 且 momentum > 0 时使用。
- early_stoppingbool, default=False
是否使用提前停止来终止训练,当验证分数没有提高时。如果设置为 True,它将自动将
validation_fraction的训练数据作为验证集,并在验证分数在n_iter_no_change次连续 epoch 中没有至少提高tol时终止训练。分割是分层的,除非在多标签设置中。如果 early stopping 为 False,则当训练损失在连续n_iter_no_change次遍历训练集后没有改善超过tol时停止训练。仅当 solver=’sgd’ 或 ‘adam’ 时有效。- validation_fractionfloat, default=0.1
The proportion of training data to set aside as validation set for early stopping. Must be between 0 and 1. Only used if early_stopping is True.
- beta_1float,默认值=0.9
adam 中第一个动量向量估计值的指数衰减率,应在 [0, 1) 之间。仅当 solver=’adam’ 时使用。
- beta_2float,默认值=0.999
adam 中第二个动量向量估计值的指数衰减率,应在 [0, 1) 之间。仅当 solver=’adam’ 时使用。
- epsilonfloat,默认值=1e-8
adam 中用于数值稳定性的值。仅当 solver=’adam’ 时使用。
- n_iter_no_changeint, default=10
未达到
tol改进的最大 epoch 数。仅当 solver=’sgd’ 或 ‘adam’ 时有效。0.20 版本新增。
- max_funint,默认值=15000
仅当 solver=’lbfgs’ 时使用。损失函数调用的最大次数。求解器迭代直到收敛(由 ‘tol’ 确定),迭代次数达到 max_iter,或损失函数调用次数达到此限制。请注意,对于
MLPClassifier,损失函数调用的次数将大于或等于迭代次数。版本 0.22 新增。
- 属性:
- classes_形状如 (n_classes,) 的 ndarray 或 ndarray 列表
每个输出的类别标签。
- loss_float
使用损失函数计算的当前损失。
- best_loss_float 或 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_float 或 None
触发提前停止的最佳验证分数(即准确率分数)。仅当
early_stopping=True时可用,否则属性设置为None。- t_int
求解器在拟合期间看到的训练样本数。
- coefs_形状如 (n_layers - 1,) 的列表
列表中的第 i 个元素代表对应于第 i 层的权重矩阵。
- intercepts_形状如 (n_layers - 1,) 的列表
列表中的第 i 个元素代表对应于第 i + 1 层的偏差向量。
- n_features_in_int
在 拟合 期间看到的特征数。
0.24 版本新增。
- feature_names_in_shape 为 (
n_features_in_,) 的 ndarray 在 fit 期间看到的特征名称。仅当
X具有全部为字符串的特征名称时才定义。1.0 版本新增。
- n_iter_int
求解器已运行的迭代次数。
- n_layers_int
层数。
- n_outputs_int
输出数量。
- out_activation_str
输出激活函数的名称。
另请参阅
MLPRegressor多层感知器回归器。
BernoulliRBM伯努利受限玻尔兹曼机 (RBM)。
注意事项
MLPClassifier 迭代训练,因为在每个时间步计算损失函数关于模型参数的偏导数来更新参数。
它还可以添加正则化项到损失函数中,以缩小模型参数来防止过拟合。
此实现适用于表示为密集 numpy 数组或稀疏 scipy 浮点值数组的数据。
References
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 或稀疏矩阵
输入数据。
- yndarray of shape (n_samples,) or (n_samples, n_outputs)
目标值(分类中的类别标签,回归中的实数)。
- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。
在版本 1.7 中新增。
- 返回:
- selfobject
返回经过训练的 MLP 模型。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅 用户指南,了解路由机制如何工作。
- 返回:
- routingMetadataRequest
封装路由信息的
MetadataRequest。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deepbool, default=True
如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- partial_fit(X, y, sample_weight=None, classes=None)[source]#
使用给定数据的单次迭代更新模型。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入数据。
- yarray-like of shape (n_samples,)
目标值。
- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。
在版本 1.7 中新增。
- classes形状如 (n_classes,) 的数组,默认值=None
across all calls to partial_fit. 可以通过
np.unique(y_all)获取,其中 y_all 是整个数据集的目标向量。此参数在第一次调用 partial_fit 时是必需的,在后续调用中可以省略。请注意,y 不需要包含classes中的所有标签。
- 返回:
- selfobject
已训练的 MLP 模型。
- predict(X)[source]#
使用多层感知机分类器进行预测。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入数据。
- 返回:
- yndarray,形状如 (n_samples,) 或 (n_samples, n_classes)
预测的类别。
- predict_log_proba(X)[source]#
返回概率估计的对数。
- 参数:
- Xndarray of shape (n_samples, n_features)
输入数据。
- 返回:
- log_y_prob形状如 (n_samples, n_classes) 的 ndarray
样本对模型中每个类别的预测对数概率,其中类别的顺序与
self.classes_中的顺序相同。等同于log(predict_proba(X))。
- predict_proba(X)[source]#
概率估计。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入数据。
- 返回:
- y_prob形状如 (n_samples, n_classes) 的 ndarray
样本对模型中每个类别的预测概率,其中类别的顺序与
self.classes_中的顺序相同。
- score(X, y, sample_weight=None)[source]#
返回在提供的数据和标签上的 准确率 (accuracy)。
在多标签分类中,这是子集准确率 (subset accuracy),这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
测试样本。
- yshape 为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like
X的真实标签。- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。
- 返回:
- scorefloat
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 中新增。
- 参数:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit方法中sample_weight参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- set_params(**params)[source]#
设置此估计器的参数。
此方法适用于简单的估计器以及嵌套对象(如
Pipeline)。后者具有<component>__<parameter>形式的参数,以便可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计器参数。
- 返回:
- selfestimator instance
估计器实例。
- set_partial_fit_request(*, classes: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') MLPClassifier[source]#
Configure whether metadata should be requested to be passed to the
partial_fitmethod.请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过
enable_metadata_routing=True启用了元数据路由(请参阅sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。每个参数的选项如下:
True: metadata is requested, and passed topartial_fitif provided. The request is ignored if metadata is not provided.False: metadata is not requested and the meta-estimator will not pass it topartial_fit.None:不请求元数据,如果用户提供元数据,元估计器将引发错误。str:应将元数据以给定别名而不是原始名称传递给元估计器。
默认值 (
sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。在版本 1.3 中新增。
- 参数:
- classesstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
用于
partial_fit中classes参数的元数据路由。- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weightparameter inpartial_fit.
- 返回:
- selfobject
更新后的对象。
- 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 中新增。
- 参数:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
score方法中sample_weight参数的元数据路由。
- 返回:
- selfobject
更新后的对象。