精华内容
下载资源
问答
  • 神经网络分类算法
    万次阅读
    2018-10-02 23:45:01

    机器学习实战-57: 人工神经网络分类算法

    深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读!

    人工神经网络(Artificial Neural Network)分类算法属于监督学习算法。常用分类算法包括:逻辑回归(Logistic Regression, LR)、K最近邻(k-Nearest Neighbor, KNN)、朴素贝叶斯模型(Naive Bayesian Model, NBM)、隐马尔科夫模型(Hidden Markov Model)、支持向量机(Support Vector Machine)、决策树(Decision Tree)、神经网络(Neural Network)和集成学习(ada-boost)。

    人工神经网络(Artificial Neural Network)是模拟神经元的处理信息的数学模型。神经网络包含多个层次,同层之间的神经元相互之间不进行数据通信;相邻层之间的神经元相互联接构成网络,即”神经网络”。数据信息顺着网络正向传播,误差信息逆着网络方向反向传播。

    2000年以前,神经网络一直被SVM算法压制,随后出现大量理论创新和应用创新,成为最热门的机器学习方法。人工神经网络(Artificial Neural Network)包括多种模型:BP网络、径向基RBF网络、Hopfield网络、随机神经网络(Boltzmann机)、竞争神经网络(Hamming网络,自组织映射网络)等。神经网络仍普遍存在收敛速度慢、计算量大、训练时间长和不可解释等缺点。

    1 算法原理

    人工神经网络(Artificial Neural Network)分类算法是由多层神经元结构组成,每一层神经元拥有输入和输出。人工神经网络由3个要素组成:拓扑结构、连接方式和学习规则。人工神经网络包含三种层类型:

    • 输入层(Input layer),输入层神经元可以接受多种类型的数据输入(文字、声音和图像等)。
    • 输出层(Output layer),输出层输出分类或其他决策信息。
    • 隐藏层(Hidden layer),输入层和输出层之间包含多个隐藏层。

    人工神经网络(Artificial Neural Network)分类算法的核心步骤如下:

    • 数据清洗:数据规范化, 了解数据的基本特征;
    • 构建神经网络的拓扑结构
    • 确定神经网络的连接方式
    • 通过训练样本的校正,得到神经网络的权值矩阵值

    人工神经网络(Artificial Neural Network)分类算法的核心优势如下:

    • 计算伸缩性: 计算复杂度复杂,基于专用芯片加速可以使用复杂网络结构;
    • 参数依赖性: 可调节参数较多;
    • 普适性能力: 泛化能力强大;
    • 抗噪音能力: 鲁棒性强;
    • 结果解释性: 黑箱,不易解释。

    2 算法实例

    [TODO, Coming Soon!]

    3 典型应用

    人工神经网络(Artificial Neural Network)用于处理语言处理、语音识别、图像识别等领域,表现出优良的性能。

    系列文章

    参考资料

    • [1] 周志华. 机器学习. 清华大学出版社. 2016.
    • [2] [日]杉山将. 图解机器学习. 人民邮电出版社. 2015.
    • [3] 佩德罗·多明戈斯. 终极算法-机器学习和人工智能如何重塑世界. 中信出版社. 2018.
    • [4] 李航. 统计学习方法. 2012.
    更多相关内容
  • 多个神经网络分类算法,包括多种神经网络方法,较好的分类算法
  • 目录前置知识1、前言2、人工神经网络模型2.1、神经元模型与单层神经网络2.2、多层人工神经网络模型人工神经网络分类算法1、构建数据集2、响应函数3、模型训练4、测试样本分类 前置知识 1、前言 紧接着前面两篇关于...

    前置知识

    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 = x
        layer1 = 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 emas
    
    ema = 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+i
        point.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代码实现】人工神经网络分类算法及其实战案例(股票价格波动分析)本文

    展开全文
  • BP神经网络分类算法

    千次阅读 2020-04-23 20:47:48
    用BP神经网络对数据进行分类 p=[0 1 0 5 1 3 2 2 2 1 19 18 23 17 43 12 2 17 19 23; 1 2 0 4 1 1 1 4 0 1 13 15 13 11 9 9 2 14 12 7; 5 5 8 0 10 9 5 7 11 9 0 0 1 0 0 0 3 1 0 0; 7 10 16 2 11 9 6 5 8 6 0 0 ...

    用BP神经网络对数据进行分类

    p=[0 1 0 5 1 3 2 2 2 1 19 18 23 17 43 12 2 17 19 23;
        1 2 0 4 1 1 1 4 0 1 13 15 13 11 9 9 2 14 12 7;
        5 5 8 0 10 9 5 7 11 9 0 0 1 0 0 0 3 1 0 0;
        7 10 16 2 11 9 6 5 8 6 0 0 0 1 0 0 3 2 0 0
        10 11 15 2 11 12 12 9 5 6 2 1 1 1 0 1 1 0 1 1];
    
    t=[1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0];
    
    net=newff([0,20;0,16;0,12;0,12;0,13],[3,1],{'logsig','purelin'},'traingdx');
    net.trainparam.show=100;
    net.trainparam.lr=0.5;
    net.trainparam.epochos=20000;
    net.trainparam.goal=0.01;
    [net,tr]=train(net,p,t);
    Y=sim(net,p)
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 神经网络分类算法 数据挖掘

    万次阅读 2017-02-09 16:36:47
    神经网络分类介绍:  神经网络就是一组相互连接的输入输出单元,这些单元之间的每个连接都关联一个权重。在网络学习阶段,网络通过调整权重来实现输入样本与其相应(正确)类别的对应。由于网络学习主要是针对其中...

    神经网络分类介绍:

          神经网络就是一组相互连接的输入输出单元,这些单元之间的每个连接都关联一个权重。在网络学习阶段,网络通过调整权重来实现输入样本与其相应(正确)类别的对应。由于神经网络学习主要是针对其中的连接权重进行的,因此神经网络的学习有时也称为连接学习;神经网络的优点就是对噪声数据有较好适应能力,并且对未知数据也具有较好的预测分类能力;

    多层神经网络如图-4.9 所示,它包含两层处理单元(除输入层外);同样包含两个隐层的神经网络称为三层神经网络,如此等等。该网络是前馈的,即每一个反馈只能发送到前面的输出层或隐含层。它是全连接的,即每一个层中单元均与前面一层的各单元相连接。后传方法通过不断处理一个训练样本集,并将网络处理结果与每个样本已知类别相比较所获误差,来帮助完成学习任务。

     

    下面就以一个案例为准就行说明;以第一个训练元祖X={1,0,1} 其类标号为 1


    第一步:初始化network的所有权重和偏倚;网络的权重一般初始为小随机数(例如 -1.0 到1.0),具体初始数据如下:


    第二步:在终止循环条件下循环每个训练元祖,设X={1,0,1},其类标号Y为1;

    第三步:循环输入单元,输入单元的输入=输出,及I₁=O₁=1;I₂=O₂=0 ; I₃=O₂=1

    第四部:计算隐藏层或输出层的输入和输出;

    输入公式见下方:


    故可以求输入I₄= I₁*W₁₄+I₂*W₂₄+I₃*W₃₄+θ₄=1*0.2+0*0.4+1*(-0.5)+(-0.4)=-0.7

    输出公式见下方:


      O₄=1+(1+E[0.7])=0.332;

    按照输入和输出公式,可以分别求出4/5/6节点的输入和输出见下方:

     

    第五部:计算误差,对于隐藏节点和输出节点的误差计算公式不一样,见下方:

    输出层误差公式:


    隐藏层误差公式


    按照以上公式可以求 :(T为类标志)  

    Err6 = 0.474*(1-0.474)*(1-0.474)=0.1311

    Err4 = 0.332*(1-0.332)*Err6*W46=0.332*(1-0.332)*(-0.1311)*(-0.3)=-0.02087;

    计算结果分别如下:


    第五部:更新权重和偏倚值,公式如下:


    上面就是更新权重的公式,设置 L = 0.9,以W₁₄更新为例子说明:△W₁₄=0.9*(-0.0087)*1=-0.00783  故 W₁₄=△W₁₄+ W₁₄=0.19217

    最后各个更新数据如下:


    以上就是一个元祖的过程,训练时候循环大量元祖,更新权重和偏倚值,当达到跳出循环元祖条件时候,中断训练;

    中断训练的条件如下:









    展开全文
  • 神经网络BPN算法这是一种经典的分类算法,使用该方法进行数据挖掘的结果更好
  • 参考周爱民教授机器学习公式推导过程及相关伪代码,使用简单易懂的语言将其编写出来,注释挺多,很适合编程新手。
  • SSA-BP 麻雀搜索算法优化BP神经网络分类算法 麻雀算法 sparrow search algorithm BP神经算法 BP 分类算法 matlab代码 编号:8329656063584223温雨态度好
  • 基于全连接神经网络的基本神经网络分类算法
  • 多种神经网络分类算法合集,MATLAB代码源程序
  • 基于神经网络的数据挖掘分类算法比较和分析研究.pdf
  • R分类算法-神经网络算法

    千次阅读 2017-07-24 15:16:37
    神经网络(Artifical Neural Network) 神经网络(人工神经网络),是一种模仿生物网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型。 现代神经网络,是一种非线性的数据建模工具,常用来对...
  • 人工神经网络算法

    千次阅读 2021-03-04 19:06:02
    一、人工神经网络算法概念 1、神经元 正如我们日常生活中,遇到美女眼睛移不开、闻到香味流口水等生理现象等,其实都是神经所支配进行的,这就涉及到神经细胞。神经细胞(nerve cell)又称神经元或神经原,是神经...
  • 基于卷积神经网络的语句级新闻分类算法.pdf
  • BP神经网络分类信号 本代码亲测有效 含有测试数据 对正在进行相关研究的人员来说很有参考价值
  • 神经网络多目标分类算法.rar,神经网络多目标分类算法,TestMultiClass.m,RealMultiClass.m,rng.m,Softmax.m,MultiClass.m,Sigmoid.m
  • 基于非迭代训练层次循环神经网络的快速文本分类算法.pdf
  • 基于深度卷积神经网络的服装图像分类检索算法
  • 遗传算法优化神经网络matlab源码。此程序实现了利用遗传算法优化BP神经网络,内含matlab源码及遗传算法gaot工具包。亲测可用 神经网路 遗传算法 matlab。
  • 分类BP算法代码及注释 import numpy as np import matplotlib.pyplot as plt # 中文、负号 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False #数据集 x1 = [0.697,0....
  • 神经网络之BP算法【图文并茂】

    千次阅读 2020-09-21 09:26:41
    最近在学习《Deep Learning》这本书,书中在前馈神经网络、全连接神经网络以及卷积神经网络等内容中,都有提到反向传播算法,这一算法可以说是神经网络中求解参数比较核心的部分了。为了更好地理解神经网络工作的...
  • 一个很好的分类程序,里面有包括神经网络,遗传算法等经典的学习算法
  • 小波神经网络算法

    2018-08-21 01:54:08
    模型算法
  • BP(BackPropagation)神经网络算法详解

    千次阅读 2020-02-27 22:37:51
    BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。 在人工神经网络的发展历史上,感知机...
  • 基于神经网络的图像分类算法.pdf
  • 一直有想梳理下主要的机器学习算法了,做一个从各个主流算法到新兴的算法,都做一番回顾,理论结合代码实践,做一个复习,毕竟温故而知新。顺便说下,什么机器学习,数据挖掘,人工智能,这几个词语很多,也很容易用...
  • 基于K-means算法的神经网络文本分类算法研究.pdf
  • 卷积神经网络算法综述

    千次阅读 2019-10-09 20:34:33
    损失函数是主要是用来衡量神经网络输出的值Y’和真实值Y之间的差距,常用的损失函数主要有交叉熵和均方误差损失函数。下面分别介绍一下这两个损失函数的原理: 交叉熵损失函数 均方误差损失函...
  • 基于改进卷积神经网络的多标记分类算法
  • 基于深度卷积神经网络的图像分类算法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,202
精华内容 61,680
关键字:

神经网络分类算法

友情链接: adjustspin_algorithm.rar