神经网络模型
多层感知器
多层感知器(Multi-layer Perceptron, MLP)是一个有监督学习算法,它在一个训练集上学习一个函数 f(⋅):Rm→Ro, m 是输入维数, o 是输出维数。给定一个特征集 X=x1,x2,…,xm 和目标变量 y, MLP能学习一个非线性函数近似器,用于分类或回归。它与logistic回归的区别在于,在输入层和输出层之间,有一个或多个非线性层,称隐藏层。下图显示了有一个隐藏层的MLP, 输出是常量。
最左边的层,称输入层,组成一个神经元集 {xi∣x1,x2,…,xm} 代表输入特征。
隐藏层里的每一个神经元将来自上一层的值,用一个加权线性加和 w1x1+w2x2+⋯+wmxm 变换,然后作用一个非线性激活函数 g(⋅):R→R, 比如双曲正切函数。输出层接收来自最后的隐藏层的值,把它们转换为输出值。
scikit-learn模块包括公开的属性coefs_ and intercepts_. coefs_是一个权矩阵列表,矩阵里的索引 i 代表第 i 层与 i+1 层之间的权。intercepts_是一个偏差向量列表,索引 i 的向量代表增加到第 i+1 层的偏差值。
多层感知器的优势是:
-
学习非线性模型的能力
-
使用partial_fit在线学习的能力
多层感知器的不足包括:
-
MLP有一个非凸损失函数,它存在多个局部最小值。因此,不同的随机权初始化能导致不同的验证准确率。
-
MLP需要调整很多超参数,诸如隐层神经元的数量、层数、迭代次数等。
-
MLP对于特征缩放(feature scaling)是敏感的。
分类
类MLPClassifier
执行一个多层感知器算法,该算法使用向后传播训练。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), random_state=1)
clf.fit(X, y)
在拟合后,模型就能预测新样本的标签了。
clf.predict([[2., 2.], [-1., -2.]])
MLP能在训练数据上拟合一个非线性模型,clf.coefs_
属性包括由模型参数组成的权矩阵。
[coef.shape for coef in clf.coefs_]
当前,MLPClassifier
仅支持交叉熵损失函数,通过执行predict_proba方法,可以估计概率。
MLP使用向后传播法训练,更确切地说,它使用经向后传播计算的梯度下降训练模型。对于分类问题,它最小化交叉熵损失,给出每个样本的概率估计向量 P(y∣x).
print(clf.predict_proba([[2., 2.], [1., 2.]]))
通过应用Softmax
作为输出函数,MLPClassifier支持多类别分类。进一步,模型支持多标签分类,即,一个样本能够属于多个类。对于每一个类,原始输出经历logistic函数。大于等于0.5的值,记为1;否则,记为0. 对于一个样本的预测输出,值是1的索引代表分派给那个样本的类。
回归
类MLPRegressor
执行一个多层感知器,使用向后传播法训练,在输出层无激活函数。它使用平方误差作为损失函数,输出是一个连续值集。MLPRegressor也支持多输出回归,即,一个样本可以有多个目标值。
正则化
MLPRegressor and MLPClassifier使用参数 α 作为正则项(L2正则),通过惩罚数量级大的权,避免过度拟合。下图显示了 α 取不同值的决策函数。
实际使用提示
- 多层感知器对特征缩放是敏感的,因此强烈建议scale数据。例如,scale输入向量X的每个属性到[0, 1]或[-1, 1], 或者归一化成0均值、1方差。注意,为了得到有意义的结果,你必须在训练集上采用相同的缩放标准。你可以使用StandardScaler标准化,我们建议在一个Pipeline里使用它。
- 最好使用GridSearchCV找到一个合理的正则参数 α, 通常在
10.0 ** -np.arange(1, 7)
范围内。
相关阅读
来源: AI科技大本
sklearn.linear_model.LinearRegression
最小二乘法线性回归:sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)主要参
sklearn中predict_proba用法(注意和predict的区别)
predict_proba返回的是一个 n 行 k 列的数组, 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的
1. 引言 1.1 神经元 1.2卷积神经元(Convolutional cells) 1.3 解卷积神经元 1.4 池化神经元和插值神经元(Pooling and interpolating
你已经知道如何对二维图像做卷积了,现在看看如何执行卷积不仅仅在二维图像上,而是三维立体上。 我们从一个例子开始,假如说你不仅想