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)#
多层感知器分类器。
该模型使用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’的逆缩放指数在每个 时间步’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
确定权重和偏差初始化、如果使用早期停止时的训练-测试拆分以及solver=’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,它将自动设置 10%的训练数据作为验证,并在验证分数在至少
n_iter_no_change
次连续epoch中没有改善至少tol
时终止训练。拆分是分层的, 除非在多标签设置中。 如果早期停止为False,则当训练损失在n_iter_no_change次连续遍历训练集时没有改善超过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,或此损失函数调用次数。 注意,损失函数调用次数将大于或等于
MLPClassifier
的迭代次数。Added in version 0.22.
- Attributes:
- classes_ndarray或list of ndarray of shape (n_classes,)
每个输出的类标签。
- loss_float
使用损失函数计算的当前损失。
- best_loss_float或None
求解器在整个拟合过程中达到的最小损失。 如果
early_stopping=True
,此属性设置为None
。请参考best_validation_score_
拟合属性。- loss_curve_list of shape (
n_iter_
,) 列表中的第i个元素表示第i次迭代的损失。
- validation_scores_list of shape (
n_iter_
,)或None 在保留验证集上的每次迭代得分。报告的得分是准确性得分。仅在
early_stopping=True
时可用, 否则此属性设置为None
。- best_validation_score_float或None
触发早期停止的最佳验证分数(即准确性得分)。仅在
early_stopping=True
时可用, 否则此属性设置为None
。- t_int
拟合期间求解器看到的训练样本数。
- coefs_list of shape (n_layers - 1,)
列表中的第i个元素表示对应于层i的权重矩阵。
- intercepts_list of shape (n_layers - 1,)
列表中的第i个元素表示对应于层i + 1的偏差向量。
- n_features_in_int
fit 期间看到的特征数。
Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_
,) fit 期间看到的特征名称。仅当
X
的特征名称均为字符串时定义。Added in version 1.0.
- n_iter_int
求解器运行的迭代次数。
- n_layers_int
层数。
- n_outputs_int
输出数。
- out_activation_str
输出激活函数的名称。
See also
MLPRegressor
多层感知器回归器。
BernoulliRBM
伯努利受限玻尔兹曼机(RBM)。
Notes
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.”
Examples
>>> 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.038..., 0.961...]]) >>> clf.predict(X_test[:5, :]) array([1, 0, 1, 0, 1]) >>> clf.score(X_test, y_test) 0.8...
- 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, classes=None)#
更新模型,通过在给定数据上进行单次迭代。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入数据。
- yarray-like,形状为 (n_samples,)
目标值。
- classesarray,形状为 (n_classes,),默认=None
所有 partial_fit 调用中的类别。 可以通过
np.unique(y_all)
获得,其中 y_all 是整个数据集的目标向量。 此参数在第一次调用 partial_fit 时是必需的,在后续调用中可以省略。 注意,y 不需要包含classes
中的所有标签。
- Returns:
- selfobject
训练好的 MLP 模型。
- predict(X)#
使用多层感知器分类器进行预测。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入数据。
- Returns:
- yndarray, 形状为 (n_samples,) 或 (n_samples, n_classes)
预测的类别。
- predict_log_proba(X)#
返回概率估计的对数。
- Parameters:
- X形状为 (n_samples, n_features) 的 ndarray
输入数据。
- Returns:
- log_y_prob形状为 (n_samples, n_classes) 的 ndarray
样本在模型中每个类别的预测对数概率, 其中类别按照
self.classes_
中的顺序排列。 等同于log(predict_proba(X))
。
- predict_proba(X)#
概率估计。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
输入数据。
- Returns:
- y_probndarray,形状为 (n_samples, n_classes)
模型中每个类别的样本预测概率,其中类别按
self.classes_
中的顺序排列。
- score(X, y, sample_weight=None)#
返回给定测试数据和标签的平均准确率。
在多标签分类中,这是子集准确率,这是一个严格的指标,因为你要求每个样本的每个标签集都被正确预测。
- Parameters:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组
` X`的真实标签。
- sample_weight形状为 (n_samples,) 的类数组,默认=None
样本权重。
- Returns:
- scorefloat
self.predict(X)
相对于y
的平均准确率。
- set_params(**params)#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
)。后者具有形式为<component>__<parameter>
的参数,以便可以更新嵌套对象的每个组件。- Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- set_partial_fit_request(*, classes: bool | None | str = '$UNCHANGED$') MLPClassifier #
Request metadata passed to the
partial_fit
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed topartial_fit
if 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
: 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:
- classesstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
classes
parameter inpartial_fit
.
- Returns:
- selfobject
The updated object.
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') MLPClassifier #
Request metadata passed to the
score
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed toscore
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it toscore
.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 inscore
.
- Returns:
- selfobject
The updated object.