目录

  • 前置知识
    • 1、前言
    • 2、人工神经网络模型
      • 2.1、神经元模型与单层神经网络
      • 2.2、多层人工神经网络模型
  • 人工神经网络分类算法
    • 1、构建数据集
    • 2、响应函数
    • 3、模型训练
    • 4、测试样本分类
  • 案例:股票价格波动分析
    • 1、数据来源
    • 2、变量与指标
    • 3、数据处理
    • 4、指标计算
    • 4、模型训练
    • 5、模型预测及可视化
  • 结语

前置知识

1、前言

紧接着前面两篇关于分类算法的文章,今天我们来讲一讲人工神经网络分类算法,本文算法代码实现部分的数据与之前两篇一致,大家可自行查看:
【python代码实现】决策树分类算法
【python代码实现】朴素贝叶斯分类算法

2、人工神经网络模型

2.1、神经元模型与单层神经网络

人工神经网络中最基本的成分是神经元模型,也称MP神经元模型。在这个模型中,神经元接收到来自其他神经元传递过来的信息,如图中的箭头称之为连接。连接是神经元中最重要的东西,每一个连接上都有一个权重,输入信号通过带权重的连接进行传递,神经元接收到的总输入值与神经元阀值进行比较,然后通过激活函数处理以产生神经元输出。

在MP神经元模型的输入位置添加神经元节点,标志其为“输入单元”,输入层的输入单元只负责接收信号后传递给输出层;而输出层的输出单元需要对前面一层的输入进行计算。我们把需要计算的层次称为计算层,并把拥有一个计算层的网络称之为单层神经网络

2.2、多层人工神经网络模型

单层神经网络本质上是若干个权重与信号的线性组合,无法解决非线性问题。因此在此基础上加入隐含层,发展出可以解决非线性问题的多层神经网络

多层神经网络实际上是将多个神经元进行组合,用不同的方法进行连接并作用到激活函数上,一般使用的激活函数是Sigmoid函数

之所以选用Sigmoid函数,主要是它与正态高斯分布函数图像接近;符合日常生活大多数现象且计算简单,可降低算法计算开销。

与文章【实战】——以波士顿房价为例进行数据的相关分析和回归分析中逻辑回归部分相似,这里的模型以是否买产品将数据分为0/1类,也就是目标值y;其对应的输入矩阵x与权重矩阵相乘得到另一个数据,称之为预测值y’。预测值与真实值之间的距离越小,损失也越小,模型越准确。

神经网络算法的基本思路是:从随机设置的权重开始,通过网络输出与实际样本之间的误差来调整权重,使得输出样本与样本观测值之间的误差不断减小来完成模型训练。

人工神经网络分类算法

1、构建数据集

# 构建数据集
def createdataset():dataSet=[[0,2,0,0,0],[0,2,0,1,0],[1,2,0,0,1],[2,1,0,0,1],[2,0,1,0,1],[2,0,1,1,0],[1,0,1,1,1],[0,1,0,0,0],[0,0,1,0,1],[2,1,1,0,1],[0,1,1,1,1],[1,1,0,1,1],[1,2,1,0,1],[2,1,0,1,0],]labels=['age','income','job','credit']return dataSet,labels

与之前的分类算法不同,这里将数据分类标签‘Y/N’改为了0/1

ds1,lab = createdataset()
x = np.array(ds1)[:,0:4]
y = np.array(ds1)[:,4].reshape(14,1)
print(x)
print(y)

因为后续的计算都是基于二维矩阵的,所以这里将目标值y转化为二维数组。

2、响应函数

# 响应函数
def nonlin(x,deriv=False):if(deriv==True):return x*(1-x)return 1/(1+np.exp(-x))

相应函数充分利用了Sigmoid函数的数学特征,简化了计算

3、模型训练

# 中间层/隐含层系数矩阵
syn0 = np.random.random((4,4))
# 输出层系数
syn1 = np.random.random((4,1))
print('算法开始前,随机系数矩阵:')
print("syn0:",str(syn0))
print("syn1:",str(syn1))

首先,先产生一个随机矩阵作为模型的权重系数矩阵;然后再经过训练得出模型的系数矩阵:

for i in range(1000):# 计算误差layer0 = xlayer1 = nonlin(np.dot(layer0,syn0))layer2 = nonlin(np.dot(layer1,syn1))layer2_error = y - layer2# 每循环200,输出一次系数矩阵if((i+1)%200)==0:print("After:",i)print("Error:",np.mean(np.abs(layer2_error)))print("syn0:\n",syn0)print("syn1:\n",syn1)# 梯度下降法调整系数矩阵layer2_delta = layer2_error*nonlin(layer2,deriv=True)layer1_error = layer2_delta.dot(syn1.T)layer1_delta = layer1_error*nonlin(layer1,deriv=True)syn0 += layer0.T.dot(layer1_delta)syn1 += layer1.T.dot(layer2_delta)

这里循环1000次,利用梯度下降法调整系数矩阵,使得误差收敛。为了便于观察迭代效果,每运行200输出一次误差Error和系数矩阵:

直到循环结束:

到此,我们就已经得到了一个误差为0.02的模型了。

4、测试样本分类

与之前的分类算法一样,我们对新的测试数据进行分类,看结果是否正确:

ly = [0,2,0,1]
ly1 = nonlin(np.dot(ly,syn0))
ly2 = nonlin(np.dot(ly1,syn1))
print("Test input:"+str(ly)+";Test output:"+str(ly2))

Test input:[0, 2, 0, 1];Test output:[0.00784408]

ly0 = [0,0,1,1]
ly01 = nonlin(np.dot(ly0,syn0))
ly02 = nonlin(np.dot(ly01,syn1))
print("Test input:"+str(ly0)+";Test output:"+str(ly02))

Test input:[0, 0, 1, 1];Test output:[0.99941724]

可以看到结果与决策树分类算法、朴素贝叶斯分类算法的结果一致,进一步证明了结果的正确性。

案例:股票价格波动分析

1、数据来源

案例股票是中国平安保险集团股份有限公司(601318),2016-01-01至2020-12-31的开盘价、最高价、最低价、收盘价和日收益率,数据来自锐思金融数据库,共1218个数据。

2、变量与指标

输入矩阵由4个基于5天预测时段的收益率(rdp5、rdp10、rdp15、rdp20)和转变后的收盘价(ema15)5个分量组成。

rdpn = (p(i+5 - n) - p(i - n))/p(i - n) * 100
ema15是当天收盘价减去前15天价格指数滑动平均值

输出变量(rdp)是首先分别将当天与其后第5天的原始收盘价转换为各自前3天的指数滑动平均值,在以此求收益率。

指标均方误差(MSE)与平均绝对误差(MAE)用于衡量真实值与预测值之间的偏差度,值越小预测越好。

3、数据处理

模型主要用到的是收盘价,因此将数据提取出来并转化为浮点数:

f1 = csv.reader(open('a601318.csv'))
closeprice = [row[4] for row in f1]
del closeprice[0]
p = list(map(float,closeprice))
len(p)

4、指标计算

计算指标rdp5、rdp10、rdp15、rdp20:

rdp5 = []
for i in range(len(p)):if i > 5:rdp5.append((p[i]-p[i-5])/p[i-5]*100)
rdp5 = rdp5[14:1211]rdp10 = []
for i in range(len(p)):if i > 10:rdp10.append((p[i-5]-p[i-10])/p[i-10]*100)
rdp10 = rdp10[9:1206]rdp15 = []
for i in range(len(p)):if i > 15:rdp15.append((p[i-10]-p[i-15])/p[i-15]*100)
rdp15 = rdp15[4:1201]rdp20 = []
for i in range(len(p)):if i > 20:rdp20.append((p[i-15]-p[i-20])/p[i-20]*100)

计算指标ema15:

def get_ema(cps,days):emas = cps.copy()for i in range(len(cps)):if i < 15:emas[i] = cps[i]if i >= 15:emas[i] = ((days-1)*emas[i-1]+2*cps[i])/(days+1)return emasema = get_ema(p,15)
ema15 = [p[i] - ema[i] for i in range(len(p))]
ema15 = ema15[20:1217]

计算指标rdp:

p1 = get_ema(p,3)
rdp = []
for i in range(len(p1)):if i < len(p1)-5:rdp.append((p1[i+5]-p[i])/p1[i]*100)
rdp = rdp[15:1212]

4、模型训练

构造数据集:

data = pd.DataFrame()
data['rdp5'] = np.array(rdp5)
data['rdp10'] = np.array(rdp10)
data['rdp15'] = np.array(rdp15)
data['rdp20'] = np.array(rdp20)
data['ema15'] = np.array(ema15)
target = pd.DataFrame()
target = np.array(rdp)

将数据集分为训练集测试集:

x_train,x_test,y_train,y_test = train_test_split(data,target,random_state=7,test_size=0.1)
print(len(x_train),len(x_test),len(y_train),len(y_test))
print(y_test[0:5])

模型训练:

mlplr = MLPRegressor(activation='logistic',learning_rate='adaptive')
mlplr.fit(x_train,y_train)

这里构造了多层感知回归器mlplr,它本质上是一个基于人工神经网络的回归方程。使用logistic(Sigmoid)函数作为神经元的激活函数,学习率采用adaptive自适应方式。

5、模型预测及可视化

mlplr_y_predict = mlplr.predict(x_test)
print('MSE:',"%.4f"%mean_squared_error(y_test,mlplr_y_predict))
print('MAE:',"%.4f"%mean_absolute_error(y_test,mlplr_y_predict))

MSE: 0.0365
MAE: 0.1552

从模型的MSE、MAE来看,测试集的预测数据与实际数据吻合较为理想

point = []
for i in range(len(x_test)):a=1+ipoint.append(a)
plt.plot(point,mlplr_y_predict,color='r',linestyle='-',label='predicted values in MLP')
plt.plot(point,y_test,color='c',linestyle='-',label='actual values')
plt.xlabel('Test data points')
plt.ylabel('Normalized target value')
plt.legend()
plt.show()

结语

神经网络的发展非常迅速,其在金融中的股票市场预测、借贷风险管理、信用卡欺骗检测等应用领域取得较好结果。

关于分类算法的文章就讲到这里啦,大家如果觉得文章不错的话,记得收藏、点赞、关注三连~

【python代码实现】决策树分类算法
【python代码实现】朴素贝叶斯分类算法
【python代码实现】人工神经网络分类算法及其实战案例(股票价格波动分析)本文

【python代码实现】人工神经网络分类算法及其实战案例(股票价格波动分析)相关推荐

  1. 机器学习实战-57: 人工神经网络分类算法(Artificial Neural Network)

    机器学习实战-57: 人工神经网络分类算法 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 人工神经网络(Artificial Neural Network)分类算法属于监督学习算法 ...

  2. Python实现贝叶斯优化器(Bayes_opt)优化BP神经网络分类模型(BP神经网络分类算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 贝叶斯优化器(BayesianOptimization) 是一种 ...

  3. 【python代码实现】决策树分类算法

    目录 前置信息 1.决策树 2.样本数据 决策树分类算法 1.构建数据集 2.数据集信息熵 3.信息增益 4.构造决策树 5.实例化构造决策树 6.测试样本分类 后置信息:绘制决策树代码 前置信息 1 ...

  4. 【python代码实现】朴素贝叶斯分类算法

    目录 前置知识 1.概念 2.算法原理 2.1.条件概率 2.2.全概率 2.3.先验概率 2.4.后验概率 朴素贝叶斯分类算法 1.构建数据集 2.分类概率 3.条件概率 4.先验概率 前置知识 1 ...

  5. 人工神经网络算法实例代码,人工神经网络算法步骤

    神经网络算法实例说明有哪些? 在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能.构作专家系统.制成机器人.复杂系统控制等等. 纵观当代新兴科学技 ...

  6. Python实现GWO智能灰狼优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

  7. 神经网络分类算法是什么,神经网络分类算法简介

    人工神经网络分类方法 从20世纪80年代末期,人工神经网络方法开始应用于遥感图像的自动分类. 目前,在遥感图像的自动分类方面,应用和研究比较多的人工神经网络方法主要有以下几种:(1)BP(Back P ...

  8. 13行Python代码实现一个神经网络(Part 2 - 梯度下降法)

    Declaration: 本文翻译自iammask的blog,原作者保留本文知识产权,转载请注明出处. Part 1 "一个 11 行 Python 代码实现的神经网络(第一部分)" ...

  9. 人工神经网络的算法原理,对人工神经网络的理解

    什么是人工神经网络及其算法实现方式 人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点. 它从信息处理角度对人脑神经元网 ...

最新文章

  1. appium 控件定位
  2. 深度学习入门篇(二)Lenet网络在caffe+QtCreator上部署应用
  3. python distplot 图_Python可视化23 |seaborn.distplot公司单变量分布图(直方图|核密度图),23seaborndistplot...
  4. Leetcode--7. 整数反转
  5. 【蓝桥杯嵌入式】【STM32】6_ADC之LCD实时显示电压值
  6. 【24万欧】国外人工智能计算机博士自述面试经历
  7. 通过jquery进行ajax的一些“异常”请求的页面自提交到其它页面
  8. 个人工作总结10(冲刺二)
  9. python 基线拟合
  10. json map 转换 android,map和json之间的转换
  11. 计算机网络工程师模拟题库,计算机网络工程师模拟题56.doc
  12. Halcon深度学习自定义网络模型-VGG16
  13. linux-ubuntu-obs推流到bilibili及虎牙直播测试
  14. 区块链数据分析1-如何查询token余额
  15. 韩顺平python教程视频_尚硅谷_韩顺平_Linux_2018Linux基础入门教程全集
  16. Verilog HDL 编程语言接口
  17. 今天就给大家介绍一个抢购茅台的小技巧,不需要安装Python,不需要配置环境,就和你在电脑上安装使用QQ等软件一样
  18. 利用shell遍历文件夹下所有文件
  19. 面向订单生产型电子制造企业,如何快速响应客户?
  20. 他博士毕业论文写了1255页,28岁评教授,38岁当院士!

热门文章

  1. 支付宝认证的作用是什么?考试方向有哪些?
  2. 【FTP工具】FileZila安装以及使用详解
  3. 如何从官网下载jdk_如何从官网下载itunes
  4. 联想笔记本重装win11系统后找不到无线网卡
  5. ZYNQ PS端模块读书笔记-XADC
  6. 2021 七大IT高薪认证,你都get了吗?
  7. oracle查看sga实际使用,如何查看SGA区情况
  8. Small Tips
  9. 信用卡使用时的6点,第六点认真看一下
  10. 计算机网络(第7版) - 第九章 无线网络和移动网络 - 习题