神经网络模型
多层感知机
多层感知机(Multi-layer Perceptron
)是一个监督学习算法,学习函数
f
:
R
m
→
R
o
f:R^m\rightarrow R^o
f:Rm→Ro,其中,
m
m
m是输入维度的数量,
o
o
o是输出的维度数量。给定一个特征集合
X
=
x
1
,
x
2
,
.
.
.
.
,
x
m
X = x_1, x_2, ...., x_m
X=x1,x2,....,xm和一个目标值
y
y
y,它能够学习用于分类或回归的非线性函数逼近。它不同于逻辑回归,因为在输入和输出层中,会有一个和多个非线性层,称作隐藏层。
输入层包含神经元集合 { x i ∣ x 1 , x 2 , . . . , x m } \{x_i|x_1, x_2, ..., x_m\} {xi∣x1,x2,...,xm}表示输入特征。隐藏层中的每个神经元转换前面层的值转化为一个线性加权和 w 1 x 1 + w 2 x 2 + . . . + w m x m w_1x_1+w_2x_2+...+w_mx_m w1x1+w2x2+...+wmxm,后面紧接着一个非线性的激活函数 g : R → R g: R\rightarrow R g:R→R。输出层收到从上一隐藏层得到的值,并将他们转化为输出值。
多层感知机的优点是
- 能学习非线性模型
- 能够实时学习模型
多层感知机的缺点是
- 使用隐藏层的多层感知机有非凸的损失函数,存在多个局部最优
- 需要调整大量的超参
- 对特征缩放敏感
分类
MLPClassifier
实现了一个多层感知机算法,使用Backpropagation
训练数据。它支持使用Softmax
作为输出函数来实现多类别分类。
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),
random_state=1)
clf.fit(x, y)
print(clf.predict([[2., 2.]]))
print([coef.shape for coef in clf.coefs_])
print(clf.predict_proba([[2., 2.]]))
回归
MLPRegressor
实现了一个多层感知机,在输出层不使用激活函数的反向传播训练数据。它使用最小二乘作为损失函数,输出是连续值。
正则
MLPRegressor
和MLPClassifier
使用参数alpha
作为正则项,有助于避免过拟合。
算法
MLP
使用Stochastic Gradient Descent Algorithm
/Adam
/L-BFGS
训练算法。