神经网络-回归(Python)

回归与神经网络简介

回归分析

回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。

回归分析的作用是:
①从一组数据出发确定某些变量之间的定量关系式
②对变量间这些关系式进行统计检验。并从影响某一个变量的多个变量中找出影响显著的变量
③利用所求出的关系式,根据一个变量或多个变量取值估计或预测另一个特定变量的取值。

神经网络

网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型
在这里插入图片描述
输入层:输入神经元定义数据挖掘模型所有的输入属性值以及概率。一个感知器可以接收多个输入(x_1,?_2 ……?_?),每个输入上有一个权值?_?,此外还有一个偏置项b,就是上图中的?_0。
隐含层:隐藏神经元接受来自输入神经元的输入,并向输出神经元提供输出。隐藏层是向各种输入概率分配权重的位置。
输出层:输出神经元代表数据挖掘模型的可预测属性值。
在这里插入图片描述
激活函数:所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端,如sigmod函数、tanh函数等。

神经网络学习算法原理

在这里插入图片描述
1、网络初始化(给各连接权值分别赋一个(-1,1)内的随机数。给定计算精度和最大学习次数。
2、将训练样本通过神经网络进行前向传播计算。
3、计算输出误差,通常用均方差。网络误差通过随机梯度下降法来最小化,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
4、判断网络误差是否满足要求,当误差达到预设精度或学习次数大于所设定的最大次数,则结束算法。否则进行下一轮学习,直至结束。

监督学习和无监督学习

机器学习有一类学习方法叫做监督学习,它是说为了训练一个模型,我们要提供这样一堆训练样本:每个训练样本既包括输入特征x,也包括对应的输出y(y也叫做标记,label)。也就是说,我们要找到很多人,我们既知道他们的特征(工作年限,行业…),也知道他们的收入。我们用这样的样本去训练模型,让模型既看到我们提出的每个问题(输入特征x),也看到对应问题的答案(标记y)。当模型看到足够多的样本之后,它就能总结出其中的一些规律。然后,就可以预测那些它没看过的输入所对应的答案了。

另外一类学习方法叫做无监督学习,这种方法的训练样本中只有x而没有y。模型可以总结出特征的一些规律,但是无法知道其对应的答案y。

多层感知器——MLP

神经元——感知器
多层感知器的优点:
可以学习得到非线性模型。
可以学习得到实时模型(在线学习)
多层感知器(MLP)的缺点:
具有隐藏层的 MLP 具有非凸的损失函数,它有不止一个的局部最小值。 因此不同的随机权重初始化会导致不同的验证集准确率。
MLP 需要调试一些超参数,例如隐藏层神经元的数量、层数和迭代轮数。
MLP 对特征归一化很敏感.

我们需要知道一个神经网络的每个连接上的权值是如何得到的。我们可以说神经网络是一个模型,那么这些权值就是模型的参数,也就是模型要学习的东西。然而,一个神经网络的连接方式、网络的层数、每层的节点数这些参数,则不是学习出来的,而是人为事先设置的。对于这些人为设置的参数,我们称之为超参数(Hyper-Parameters)。
(隐藏节点数,学习步长,迭代次数等)

BP神经网络

误差的反向传播(“BP”)
误差反向传播:输出误差(某种形式)->隐层(逐层)->输入层    其主要目的是通过将输出误差反传,将误差分摊给各层所有单元,从而获得各层单元的误差信号进而修正各单元的权值(其过程,是一个权值调整的过程)。注:权值调整的过程,也就是网络的学习训练过程(学习也就是这么的由来,权值调整)。

标准BP算法的缺陷
1)易形成局部极小(属贪婪算法,局部最优)而得不到全局最优;    
2)训练次数多使得学习效率低下,收敛速度慢(需做大量运算);
3)隐节点的选取缺乏理论支持;  
4)训练时学习新样本有遗忘旧样本趋势。  
  注:改进算法—增加动量项、自适应调整学习速率及引入陡度因子

引用文本

代码实现(利用sklearn库)

简单的MLP

第一种

from sklearn.neural_network import MLPRegressor  
from sklearn.preprocessing import StandardScaler
from sklearn.cross_validation import train_test_split
import pandas as pd

input = pd.read_excel("C:/Users/Lenovo/Desktop/数据集/in.xlsx")
output = pd.read_excel("C:/Users/Lenovo/Desktop/数据集/out.xlsx")
x_train, x_test, y_train, y_test = train_test_split(input,output,test_size=0.2, random_state=0)
X = x_train
y = y_train
scaler = StandardScaler() # 标准化转换
scaler.fit(X)  # 训练标准化对象
X = scaler.transform(X)   # 转换数据集
#(多层感知器对特征的缩放是敏感的,所以需要归一化你的数据。 例如,将输入向量 X 的每个属性放缩到到 [0, 1][-1+1] ,或者将其标准化使它具有 0 均值和方差 1。 
为了得到有意义的结果,必须对测试集也应用 相同的尺度缩放。 可以使用 StandardScaler 进行标准化。)
# solver=‘sgd',  MLP的求解方法:L-BFGS 在小数据上表现较好,Adam 较为鲁棒,SGD在参数调整较优时会有最佳表现(分类效果与迭代次数);SGD标识随机梯度下降。
# alpha:L2的参数:MLP是可以支持正则化的,默认为L2,具体参数需要调整
# hidden_layer_sizes=(2, 1) hidden层2,第一层2个神经元,第二层1个神经元)2层隐藏层,也就有3层神经网络
clf = MLPRegressor(solver=‘sgd', alpha=1e-5,hidden_layer_sizes=(2, 1), random_state=1)
clf.fit(X, y)
print('预测结果:', clf.predict([[5,1]]))  # 预测某个输入对象
cengindex = 0
for wi in clf.coefs_:
    cengindex += 1  # 表示底第几层神经网络。
    print('第%d层网络层:' % cengindex)
    print('权重矩阵维度:',wi.shape)
    print('系数矩阵:\n',wi)

在这里插入图片描述
随机梯度下降(SGD&#

  • 41
    点赞
  • 511
    收藏
    觉得还不错? 一键收藏
  • 56
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值