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算法或随机梯度下降算法来优化损失函数
tuple,(100,)
元组中的第i个元素表示第i个隐藏层所包含的神经元数量
{‘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) |
权重优化方法
参数 | 描述 |
---|---|
‘lbfgs’ | 一种拟牛顿法优化方法 |
‘sgd’ | 随机梯度下降方法 |
‘adam’ | 一种基于随机梯度的优化方法 |
对于大型数据集(训练数据集有上千个数据),“adam”方法不管是在训练时间还是测试集得分方面都有不俗的表现。
但是对于小型数据集,“lbfgs”能够有更快的收敛速度而且表现得更好
float,0.0001
L2正则化项权重
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
{‘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 |
float,0.001
初始学习率的大小,它控制着每次权重参数更新的幅度,仅仅当solver='sgd’和’adam’时使用该参数
见learning_rate,仅仅在learning_rate=‘invscaling’,solver='sgd’时使用该参数
最大迭代次数,代表epoch,即每个数据将会被使用多少次,权重优化方法将会一直迭代直到收敛或者达到迭代次数
epoch是一个单位,一个epoch代表训练模型时所有训练数据均被使用过一次的更新次数,比如如果训练数据集有10000条训练数据,用大小为100的mini_batch进行学习时,重复随机梯度下降100次,此能保证所有数据都被使用了一遍,我们称100次就是一个epoch
每次迭代是否打乱数据集, 当solver=’sgd’ or ‘adam’.时使用
float,1e-4
除非learing_rate的值为“adaptive”,否则当连续迭代n(n=n_iter_no_changes)次,训练误差和验证得分变化不超过tol时,将被视为收敛,训练停止
动量梯度下降法中的一个参数
bool,true
是否使用动量梯度下降法3,当solver=’sgd’ 和 momentum > 0时被使用
当验证得分不再增加时是否提前终止训练
如果值为True
将自动分出n(n= validation_fraction)的训练集数据作为验证集,当验证得分在n(n=n_iter_no_changes)次连续迭代后增加的值不超过n(n=tol)时终止训练
如果值为False
当训练损失函数值在n次连续迭代后减小的值小于n(n=tol)时终止训练
见early_stopping,值在[0,1]之间
见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 |
使用数据X和标签y进行拟合
获取模型参数
使用给定数据对数据进行一次迭代
预测未知数据的标签
获取给定数据和标签的平均精度(用数据给模型评分)
设置模型参数
这个时间步长t笔者没搞明白 ↩︎
此处原文为: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从句笔者的翻译可能会有点问题 ↩︎
这里笔者不太理解,明明mini_batch梯度下降和动量梯度下降是两种梯度下降方法,为何当slover设置为sgd时这个参数还会设置为True ↩︎