BP神经网络学习笔记

本文深入探讨了sklearn中的BP神经网络实现——MLPClassifier和MLPRegressor,讲解了其工作原理,如向后传播训练、交叉熵损失函数、正则化参数调整等,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sklearn中的BP神经网络就是MLP包

scikit-learn模块包括公开的属性coefs_ and intercepts_. coefs_是一个权矩阵列表,矩阵里的索引 ii 代表第 ii 层与 i+1i+1 层之间的权。intercepts_是一个偏差向量列表,索引 ii 的向量代表增加到第 i+1i+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里使用它。

è¿éåå¾çæè¿°

注意:可以看到,x_test用的也是经过x_train 训练的scalar,而不是自己训练一个


最好使用GridSearchCV找到一个合理的正则参数 αα, 通常在10.0 ** -np.arange(1, 7)范围内。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值