神经网络的应用

人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最接近期望输出值的结果。

BP神经网络的计算过程正向计算过程反向计算过程组成。正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。

【例题1】

 【代码】

'''神经网络编程步骤
(1)寻找对结果产生影响的各种指标,假设有m个
(2)寻找样本n个,构造矩阵m*n,其对应的标准输出是n*1
 (3)将上述m*n与n*1分别带入网络中训练
(4)输入新的数据进行仿真'''
#Multi-layer Perceptron classifier optimizes the log-loss function using LBFGS or stochastic gradient descent.
from sklearn.neural_network import MLPClassifier
from numpy import array, r_, ones,zeros
#训练数据
x0=array([[1.14,1.18,1.20,1.26,1.28,1.30,1.24,1.36,1.38,1.38,1.38,1.40,1.48,1.54,1.56],
         [1.78,1.96,1.86,2.00,2.00,1.96,1.72,1.74,1.64,1.82,1.90,1.70,1.82,1.82,2.08]]).T
#目标标签
y0=r_[ones(6),zeros(9)]
#‘lbfgs’ is an optimizer in the family of quasi-Newton methods.一般就选择lbfgs
md = MLPClassifier(solver='lbfgs', alpha=1e-5,
                   hidden_layer_sizes=15)
#使用训练好的 md 模型对 x 中的样本进行预测,并将预测结果存储在 pred 变量中
md.fit(x0, y0); 
#待预测数据集
x=array([[1.24, 1.80], [1.28, 1.84], [1.40, 2.04]])
pred=md.predict(x)

#输出训练集上的准确率,即模型在训练数据上表现的好坏
print(md.score(x0,y0))
#输出模型的权重矩阵
print(md.coefs_)
#输出待预测样本点属于各个类别的概率分布
print("属于各类的概率为:",md.predict_proba(x))
print("三个待判样本点的类别为:",pred);

hidden_layer_sizes=15:这个参数指定了隐藏层神经元的数量或结构。在这个例子中,设置为15意味着有一个隐藏层,并且该层包含15个神经元。

如果需要多个隐藏层或者每个隐藏层有不同的神经元数量,可以传入一个列表,例如 [15, 10] 表示两个隐藏层,第一个隐藏层有15个神经元,第二个隐藏层有10个神经元。在这里只有一层隐藏层且固定了神经元数量为15。

【结果】

将问题视为系统,飞蠓的数据作为输入,类型作为输出,建立只有一个隐层,神经元数为15的BP神经网络,求得三只待判断蠓虫分别属于Apf、Af、Apf类别。

【例题2】

【代码】

以求解客运量为例:

from sklearn.neural_network import MLPClassifier
from numpy import array, r_
from numpy import array, loadtxt
from pylab import subplot, plot, show, xticks,rc,legend

a=loadtxt("D:\桌面的文件\Pdata17_5.txt")
#客运量训练集
x0=a[:,:3]
#客运量训练标签
y1=a[:,3]
md1=MLPRegressor(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=10,max_iter=500)
md1.fit(x0,y1)
#待测数据
x=array([[73.39,3.9635,0.988],[75.55,4.0975,1.0268]])

pred1=md1.predict(x)
print(pred1)
print(md1.score(x0,y1))


yr=range(1990,2010)
plot(yr,y0,'o')
plot(yr,md1.predict(x0),'-*')
xticks(yr,rotation=55); 
legend(("original data","amount of passenger traffic"))
show()

【结果】

 

图片显示的是原始数据与网络输出值的对比

【例题3】

【代码】

from sklearn.neural_network import MLPClassifier
from numpy import array, r_
from numpy import array, loadtxt
from pylab import subplot, plot, show, xticks,rc,legend

x=array([0,34,67,101,135,202,259,336,404,471]).reshape(-1, 1) 
y=array([15.10,21.36,25.72,32.29,34.03,39.45,43.15,43.46,40.83,30.75])
md=MLPRegressor(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=10)
md.fit(x,y)
plot(x,y,'o')
plot(x,md.predict(x),'-*')
legend(("rate of fertilisation","Yield"))
print(md.score(x,y))
show()

【结果】

 

【总结】

MLPRegressor 和 MLPClassifier 都是来自 scikit-learn 库中的多层感知器(Multilayer Perceptron, MLP)模型,它们都属于神经网络家族的一部分。然而,它们在功能和目标上有所区别:

  1. MLPRegressor

    • 是一个用于回归任务的神经网络模型。它的目的是预测连续变量的值,即输出是一个实数。
    • 在训练过程中,它最小化的是均方误差(Mean Squared Error, MSE)或类似的回归损失函数。
  2. MLPClassifier

    • 是一个用于分类任务的神经网络模型。它的目标是预测离散类标签,即输出是一个类别或者说是有限个离散值之一。
    • 在训练过程中,它通常使用交叉熵损失函数(对于多类别问题)或二元交叉熵损失函数(对于二分类问题),以及其他可能的分类损失函数。

总结来说,如果你的任务是要预测一个数值结果,比如房价、销售额等连续变量,则应使用 MLPRegressor;而如果你的任务是要对数据进行分类,如判断邮件是否为垃圾邮件、图像识别等,则应使用 MLPClassifier

 

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值