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)在每个时间步长t逐渐减小学习率,保持效率最高的学习率:effective_learning_rate = learning_rate_init / pow(t, power_t) | ‘adaptive’ | 只要训练损失不断减小,就保持学习率不变,如果连续两次迭代所减低的训练损失小于n(n=tol)或者提高的验证得分小于n(n=tol)当参数early_stopping=True时,学习率将处除以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 是否使用动量梯度下降法,当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)
设置模型参数
|