神经网络(1.17.2)
sklearn.neural_network.MLPClassifier
Multi-layer Perceptron classifier
参数:
1、hidden_layer_sizes : tuple, length = n_layers - 2, default (100,),第i个元素代表了第i个隐藏层中的神经元数目。
2、activation:{‘identity’,‘logistic’,‘tanh’,‘relu’}, default‘relu’,隐藏层的激活函数。‘identity’, no-op激活函数,对实现线性瓶颈很有用,returns f(x) = x。‘logistic’, logistic sigmoid函数,returns f(x) = 1 / (1 + exp(-x))。‘tanh’,双曲tan函数,returns f(x) = tanh(x)。‘relu’, the 修正的线性单位函数,returns f(x) = max(0, x)
3、solver : {‘lbfgs’,‘sgd’,‘adam’}, default‘adam’,求解权重的优化方法。‘lbfgs’是一种拟牛顿方法族的优化方法。‘sgd’代表随机梯度下降。‘adam’指的是由Kingma、Diederik和Jimmy Ba提出的基于随机梯度的优化器。注意:在相对较大的数据集(有数千个训练样本或更多)的训练时间和验证分数方面,默认的解析器“adam”工作得很好。然而,对于小型数据集,“lbfgs”可以更快地收敛,并且性能更好。
4、alpha : float, optional, default 0.0001,L2惩罚(正则化项)的参数。
5、batch_size : int, optional, default ‘auto’,小批量随机优化器的大小,如果“solver”是“lbfgs”,分类器将不会使用minibatch。当设置为“auto”时batch_size=min(200, n_samples)。小批量梯度下降的大小。
6、learning_rate : {‘constant’, ‘invscaling’, ‘adaptive’}, default ‘constant’,更新权重的学习率。只有当solver='sgd'时,可用。‘constant’,学习率是由‘learning_rate_init’给出的一个常量。‘invscaling’,逐步降低了学习率learning_rate,effective_learning_rate = learning_rate_init / pow(t, power_t)。‘adaptive’将学习率保持为learning_rate_init的常数,只要训练的损失持续减少。当连续两个时间段,训练的损失的减少都比tol小,或者不能提高至少tol的验证分数,如果‘early_stopping’设置为“True”,那么当前学习率将除以5。
7、learning_rate_init : double, optional, default 0.001,使用的初始学习率。它控制了更新权重时的步长。当solver=‘sgd’或者‘adam’时才可用。
8、power_t : double, optional, default 0.5,只有当solver='sgd'时,可用。它的指数和学习率成反比,当learning_rate被设置为“invscaling”时,它用于更新当前学习率。
9、max_iter : int, optional, default 200,最大迭代次数。这个solver将会不断迭代直到收敛(由tol决定),或者达到最大迭代次数max_iter。对于随机的solver(‘sgd’和‘adam’)。注意,它决定了epochs 的数量(这个数据点将被使用多少次),不是梯度的步骤数。
10、shuffle : bool, optional, default True,每次迭代时,样本是否重新洗牌,仅当solver=‘sgd’或者‘adam’时可用。
11、random_state : int, RandomState instance or None, optional, default None,随机种子。
12、tol : float, optional, default 1e-4,迭代停止条件。
13、verbose : bool, optional, default False,冗长输出。
14、warm_start : bool, optional, default False,热启动。
15、momentum : float, default 0.9,仅当solver=‘sgd’时,可用。梯度下降更新的动量。
16、nesterovs_momentum : boolean, default True,仅当solver=‘sgd’且momentum >0时,可用。是否使用Nesterov的动量法。
17、early_stopping : bool, default False,当solver=‘sgd’或者‘adam’时,有效。当验证分数不在提升时,是否使用早期停止来终止训练。如果设置为True,当验证分数至少在两个连续的时间内没有提高,它将自动留出10%的训练数据作为验证和终止训练。
18、validation_fraction : float, optional, default 0.1,仅当early_stopping设置为True时可用。训练数据的比例,作为早期停止的验证。必须在0到1之间。
19、beta_1 : float, optional, default 0.9,仅当solver=‘adam’时可用。adam中第一矩向量估计的指数衰减率。
20、beta_2 : float, optional, default 0.999,仅当solver=‘adam’时可用。adam中第二矩向量估计的指数衰减率。
21、epsilon : float, optional, default 1e-8,仅当solver=‘adam’时可用。adam中数值稳定性的值。
属性:
1、classes_ : array or list of array of shape (n_classes,),每个输出的类标签。
2、loss_ : float,用损失函数计算当前的损失。
3、coefs_ : list, length n_layers - 1,列表中的第i个元素代表了与第i层相对应的权重矩阵。
4、intercepts_ : list, length n_layers - 1,列表中的第i个元素代表了对应于i+1层的偏差向量。
5、n_iter_ : int,solver运行的迭代次数。
6、n_layers_ : int,层数。
7、n_outputs_ : int,输出的数目。
8、out_activation_ : string,输出激活函数的名称。
方法:
1、fit(X, y[, sample_weight, check_input, …]),拟合。
2、get_params([deep]),得到参数。
3、predict(X[, check_input]),预测。
4、predict_log_proba(X),预测输入样本X的对数概率。
5、predict_proba(X[, check_input]),预测输入样本X的概率。
6、score(X, y[, sample_weight]),返回给定测试数据和标签的平均精度。
7、set_params(**params),设置参数。
由于当solver的选择不同的时候,尤其是当solver=‘lbfgs’时,参数的差别比较大,因此将参数根据solver的不同分开讨论。
1、当solver=‘lbfgs’时,有很多参数都不起作用。
1,hidden_layer_sizes,随着隐藏层中神经元数目的增加,acc的值会有所增加,同时训练时间也会相对较长,而且acc的值的增加幅度会变小,因此,选择一个自己认为合适的就可以了。(保持默认)
2,激活函数activation,根据激活函数的不同acc会有一些变化不过不大。
3,正则化参数alpha,随着alpha的增加acc的值会有所增加,随后alpha继续增加,acc值就收敛了,略有下降之后就保持不变了。
4,max_iter最大迭代次数,随着迭代次数的增加,acc会有所增加,随后收敛,不在变化了。在我做的多次实验中,默认值200,都达到了收敛。(保持默认)
5,tol,迭代停止条件,随着值的减小acc会提高,随后收敛,不在变化。同样,在我做的多次实验中,tol的默认值都已经收敛了。(保持默认)
2、当solver=sgd时,还有一些参数不可用(针对adam)。
1,hidden_layer_sizes,随着隐藏层中神经元数目的增加,acc的值会有所增加,但是给出的默认值已经收敛,在增加神经元的数目,acc也不会提高了。(保持默认)
2,激活函数activation,根据激活函数的不同acc会有一些变化不过不大。
3,正则化参数alpha,随着alpha的减少acc的值会有所增加。随后acc到达最大值,然后alpha再减小acc反倒会略有降低,然后收敛,不再发生变化了。默认给出的alpha是一个极小的已经收敛的值。(保持默认就很好)
4,小批量梯度下降的批量大小,batch_size,随着值的增加acc会先增加在减少,用默认值“auto”效果就很好。(保持默认)
5,学习率learning_rate,可以尝试更换一下,正确率差别较大。
6,learning_rate_init,随着值的减少,acc会有所增加,然后达到收敛acc的值不在发生变化了。通常默认值很小,已经收敛。(保持默认)
7,max_iter,也一样,通常默认值已经收敛。(保持默认)
8,tol,迭代停止条件也一样,默认值已经收敛。(保持默认)
9,momentum,谨慎更改,感觉改动不大,但是正确率影响较大,默认值效果就很好。(保持默认)
10,nesterovs_momentum,Boolean值,true或者false会正确率影响都不大。(保持默认)
11,early_stopping,true或者false对正确率影响较大,谨慎修改。默认值false效果更好(我的实验里),保持默认。
12,validation_fraction,当early_stopping为true时才起作用,可以设置过去调节一下试一试,对正确率影响较大,总体不如early_stopping为false时效果好。
3、当solver=adam时,仍有一些不可用(针对sgd)。
1,hidden_layer_sizes,随着神经元数目的增加正确率会有所增加,随后收敛,但是总体来说感觉调节数值对acc影响不大。(保持默认)
2,activation,可以调节一下,影响不大。
3,alpha,随着alpha的减小acc有所增加,随后稍微降低达到收敛,默认值不是最优值,是一个收敛值。(保持默认)
4,batch_size,变化不大,auto效果就很好,保持默认。
5,learning_rate_init,收敛值,保持默认。
6,max_iter,收敛值,保持默认。
7,tol,收敛值,保持默认。
8,early_stopping和validation_fraction的变化规律和上面的一样,所以请保持默认。
可以看出,很多时候,默认的参数值就可以达到较好的效果,所以要我们费心思调的参数其实不多。