警告
此实现不适用于大规模应用程序。特别是,scikit-learn没有提供GPU支持。要获得基于GPU更快的实现,以及提供更多灵活性以构建深度学习体系结构的框架,请参见相关项目https://scikit-learn.org/stable/related_projects.html#related-projects。1. 多层感知器
多层感知器 (MLP)是一种有监督的学习算法,它通过在数据集进行训练来学习函数 ,其中m是输入的维数,o是输出的维数。给定一组特征 一个标签y,它可以学习用于分类或回归的非线性函数,与logistic回归不同,它在输入层和输出层之间可以有一个或多个非线性层,称为隐藏层。图1显示了一个带有标量输出的单隐藏层MLP。 图 1 : 一个隐藏层的MLP. 最左边的层称为输入层,由一组代表输入特征的神经元 组成。隐藏层中的每个神经元用加权线性和 来变换前一层的值,然后再通过非线性激活函数 g ( ⋅ ) : R → R 进行变换,如双曲正切函数(tanh)。输出层从最后一个隐藏层接收值并将其转换为输出值。 模块包含公共属性coefs_
和
intercepts_
。
coefs_
是一个权重矩阵列表,其中下标为i的权重矩阵表示第i层和第 i + 1 层之间的权重。
intercepts_
是一个偏移向量,其中下标为i的向量表示添加到第 i + 1 层的偏移值。 多层感知器的优点是:
- 能够学习非线性模型
- 能够使用
partial_fit
学到实时(real-time)模型
- 具有隐藏层的MLP具有非凸损失函数,其存在多个局部极小值,因此不同的随机权重初始化会导致不同的验证精度。
- MLP需要调整许多超参数,例如隐藏层神经元的数量、层数和迭代次数。
- MLP对特征缩放很敏感。
2. 分类
类MLPClassifier
实现了一个多层感知器(MLP)算法,该算法使用 Backpropagation 进行训练。 MLP在两个数组上进行训练:大小为(n_samples,n_features)的数组X,它保存浮点型特征向量的训练样本;大小为(n_samples)的数组y,它保存训练样本的目标值(类标签):
>>> from sklearn.neural_network import MLPClassifier
>>> X = [[0., 0.], [1., 1.]]
>>> y = [0, 1]
>>> clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
... hidden_layer_sizes=(5, 2