多层感知机分类器–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_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 ↩︎

    来源:夺笋123

    物联沃分享整理
    物联沃-IOTWORD物联网 » 多层感知机分类器–MLPClassifier

    发表评论