MLPClassifier

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算法或随机梯度下降算法来优化损失函数

主要参数

hidden_layer_sizes

tuple,(100,)
元组中的第i个元素表示第i个隐藏层所包含的神经元数量

activation

{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}
隐藏层使用的激活函数

参数激活函数数学表达式
‘identity’,f(x) = x
‘logistic’,f(x) = 1 / (1 + exp(-x)).
‘tanh’,f(x) = tanh(x).
‘relu’f(x) = max(0, x)

solver

权重优化方法

参数描述
‘lbfgs’一种拟牛顿法优化方法
‘sgd’随机梯度下降方法
‘adam’一种基于随机梯度的优化方法

对于大型数据集(训练数据集有上千个数据),“adam”方法不管是在训练时间还是测试集得分方面都有不俗的表现。
但是对于小型数据集,“lbfgs”能够有更快的收敛速度而且表现得更好

alpha

float,0.0001
L2正则化项权重

batch_size

int,“auto”
mini_batch的大小,如果使用“lbfgs”分类器将不会有mini_batch
如果使用“auto”,该参数值batch_size=min(200, n_samples)

什么是mini_batch?
使用训练数据进行学习的过程,就是要针对训练数据计算损失函数的值,找出使得该值最小的那组参数。如果一个训练数据集非常大,我们还是要以这些数据集中的数据为对象,不仅需要花费很长的时间还需要大量内存,这样显然是不现实的,因此我们可以选择全部数据中的一部分作为全部数据的代表,这部分被选出来的数据就是mini_batch,我们每次使用mini_batch训练即可
什么是随机梯度下降法(SGD)?
训练时需要我们降低mini_batch损失函数的值,而这个过程使用梯度下降法实现,又由于这里是使用的mini_batch是从原训练数据集中随机抽取的,所以这种方法又称为随机梯度下降法(SGD)
关于epoch的另一种解释
假设一个神经网络类中有一个train(x,y)函数,每次调用该函数都会根据x求得预测值f(x),然后与真实值y求得损失函数的值,然后使用反向传播更新一次权重;也就是说,每一组数据x,y都会使得神经网络更新一次权重参数(使得权重参数对应的损失函数值向全局最小移动),当训练数据集中的数据全部使用一遍后,如果那组权重参数对应的损失函数值还是没有达到最小,那么这一次训练是不合格的。这时我们就会使用训练集中的数据再次训练以更新权重参数,显然它的权重参数还是会改变,如果使用完后那组权重参数对应的损失函数值还没有达到最小,那么我们就重复上面的过程…这样,每一次就是一个epoch

learning_rate

{‘constant’, ‘invscaling’, ‘adaptive’},’constant’
学习率更新方法

参数描述
‘constant’学习率保持恒定,值由参数"learning_rate_init"提供
‘invscaling’使用一个逆指数(power_t)在每个时间步长t1逐渐减小学习率,保持效率最高的学习率:effective_learning_rate = learning_rate_init / pow(t, power_t)
‘adaptive’只要训练损失不断减小,就保持学习率不变,如果连续两次迭代所减低的训练损失小于n(n=tol)或者提高的验证得分小于n(n=tol)当参数early_stopping=True时2,学习率将处除以5

learning_rate_init

float,0.001
初始学习率的大小,它控制着每次权重参数更新的幅度,仅仅当solver='sgd’和’adam’时使用该参数

power_t

见learning_rate,仅仅在learning_rate=‘invscaling’,solver='sgd’时使用该参数

max_iter

最大迭代次数,代表epoch,即每个数据将会被使用多少次,权重优化方法将会一直迭代直到收敛或者达到迭代次数

epoch是一个单位,一个epoch代表训练模型时所有训练数据均被使用过一次的更新次数,比如如果训练数据集有10000条训练数据,用大小为100的mini_batch进行学习时,重复随机梯度下降100次,此能保证所有数据都被使用了一遍,我们称100次就是一个epoch

shuffle

每次迭代是否打乱数据集, 当solver=’sgd’ or ‘adam’.时使用

tol

float,1e-4
除非learing_rate的值为“adaptive”,否则当连续迭代n(n=n_iter_no_changes)次,训练误差和验证得分变化不超过tol时,将被视为收敛,训练停止

momentum

动量梯度下降法中的一个参数

nesterovs_momentum

bool,true
是否使用动量梯度下降法3,当solver=’sgd’ 和 momentum > 0时被使用

early_stopping

当验证得分不再增加时是否提前终止训练
如果值为True
将自动分出n(n= validation_fraction)的训练集数据作为验证集,当验证得分在n(n=n_iter_no_changes)次连续迭代后增加的值不超过n(n=tol)时终止训练

如果值为False
当训练损失函数值在n次连续迭代后减小的值小于n(n=tol)时终止训练

validation_fraction

见early_stopping,值在[0,1]之间

n_iter_no_change

见tol

参数总览

参数描述solver默认值
hidden_layer_sizes隐藏层数量(100,)
activation激活函数relu
solver权重更新方法adam
alpha正则化项权重0.0001
batch_sizemini_batch大小sgdatuo
learning_rate学习率更新方法sgdconatant
learning_rate_init学习率初始值sgd或adam0.001
power_t学习率更新方法中的一个参数sgd0.5
max_iter最大迭代次数200
shuffle每次迭代是否打乱数据sgd,adamTrue
random_state决定权重和阈值初始化数值的生成None
tol优化的最低限度1e-4
verbose
warm_start
momentum动量梯度下降法中的一个参数sgd0.9
nesterovs_momentum是否使用动量梯度下降法sgdTrue
early_stopping验证分数不更新时候是否提前终止训练False
validation_fraction见early_stopping0.1
beta_1adam
beta_2adam
epsilonadam
n_iter_no_change学习率更新方法中的一个参数sgd,adam10
max_fun损失函数最大调用次数lbfgs15000

类属性

属性描述数据类型
class_每个输出的标签ndarray
loss_当前损失函数的输出float
best_loss拟合过程中的最小损失函数值float
loss_curve_列表中的第i个元素表示第i次迭代后的损失函数值list
t_拟合过程中,slover使用到的训练数据集中的样本数量int
coefs_列表中的第i个元素表示第i层的权重矩阵list
intercepts_列表中的第i个元素表示第i+1层的偏差向量list
n_features_in_拟合过程中的特征种类数量int
feature_names_in_拟合过程中的特征种类名称ndarray
n_iter_solver已经迭代的次数int
n_layers_神经网络层数int
n_outputs_输出的种类数量int
out_activation_输出层的激活函数名称str

类方法

fit(X, y)

使用数据X和标签y进行拟合

get_params([deep])

获取模型参数

partial_fit(X, y[, classes])

使用给定数据对数据进行一次迭代

predict(X)

预测未知数据的标签

score(X, y[, sample_weight])

获取给定数据和标签的平均精度(用数据给模型评分)

set_params(**params)

设置模型参数


  1. 这个时间步长t笔者没搞明白 ↩︎

  2. 此处原文为:Each time two consecutive epochs fail to decrease training loss by at least tol, or fail to increase validation score by at least tol if ‘early_stopping’ is on, the current learning rate is divided by 5.,关于这个if从句笔者的翻译可能会有点问题 ↩︎

  3. 这里笔者不太理解,明明mini_batch梯度下降和动量梯度下降是两种梯度下降方法,为何当slover设置为sgd时这个参数还会设置为True ↩︎

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐