多层感知机分类器--MLPClassifier

目录

  • MLPClassifier
    • 主要参数
      • hidden_layer_sizes
      • activation
      • solver
      • alpha
      • batch_size
      • learning_rate
      • learning_rate_init
      • power_t
      • max_iter
      • shuffle
      • tol
      • momentum
      • nesterovs_momentum
      • early_stopping
      • validation_fraction
      • n_iter_no_change
    • 参数总览
    • 类属性
    • 类方法
      • fit(X, y)
      • get_params([deep])
      • partial_fit(X, y[, classes])
      • predict(X)
      • score(X, y[, sample_weight])
      • set_params(**params)

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_size mini_batch大小 sgd atuo
learning_rate 学习率更新方法 sgd conatant
learning_rate_init 学习率初始值 sgd或adam 0.001
power_t 学习率更新方法中的一个参数 sgd 0.5
max_iter 最大迭代次数 200
shuffle 每次迭代是否打乱数据 sgd,adam True
random_state 决定权重和阈值初始化数值的生成 None
tol 优化的最低限度 1e-4
verbose
warm_start
momentum 动量梯度下降法中的一个参数 sgd 0.9
nesterovs_momentum 是否使用动量梯度下降法 sgd True
early_stopping 验证分数不更新时候是否提前终止训练 False
validation_fraction 见early_stopping 0.1
beta_1 adam
beta_2 adam
epsilon adam
n_iter_no_change 学习率更新方法中的一个参数 sgd,adam 10
max_fun 损失函数最大调用次数 lbfgs 15000

类属性

属性 描述 数据类型
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_laters_ 神经网络层数 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 ↩︎

你可能感兴趣的:(#,sklearn机器学习库,python,sklearn)