前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >神经网络分类算法的应用及其实现

神经网络分类算法的应用及其实现

作者头像
zhangjiqun
发布于 2024-12-14 01:48:21
发布于 2024-12-14 01:48:21
1600
举报
文章被收录于专栏:计算机工具计算机工具

神经网络分类算法的应用及其实现

神经网络算法特点

我们知道,深度学习的本质就是神经网络算法(深度学习是神经网络算法的一个分支)。理论上来说,在数据量和隐藏层足够多的情况下,神经网络算法能够拟合任何方程(函数)。神经网络算法是一种具有网络结构的算法模型,这决定了它具有非常好的延展性,通过调节神经网络中各个节点的权值参数使得分类效果明显提升。总的来说,神经网络算法具有以下特点:

1) 黑盒算法

神经网络算法,也被称为“黑盒算法”,这是因为人们无法从外部得知神经网络模型究竟是如何完成训练的,比如使用一个预测准确率为 97% 的猫脸识别模型,有时会将小狗的脸部照片归纳到小猫中,而这种情况是无法解释的,因此神经网络算法又被人们形象地称之为“黑盒算法”。

图1:黑盒算法

由于神经网络算法的这一特性,导致一些场景并不适合使用神经网络算法,比如银行不会使用神经网络算法来评判用户的是否具备信用,因为一旦出现预测错误,银行根本无法溯源找到评判错误的原因,也就无法向客户做出合理的解释。

2) 数据量

在互联网并不发达的七八十年代,数据量不足是阻碍神经网络发展的一大因素。与传统的机器学习算法相比,要想训练一个优秀的神经网络模型,往往需要更多的数据(至少需要数千甚至数百万个标记样本)。 比如人脸识别,需要各种姿态样式的人脸,发怒的、喜悦的、悲伤的、戴眼镜的、模糊的等等,总之越多越好。海量数据集对于训练一个优秀的神经网络模型非常重要,神经网络获得数据越多,表现能力就越好,这样训练出来的模型才具有更好的泛化能力

注意:经过长达几十年的积累,直到目前,已经有大量的公开数据集可以使用,比如 Kaggle 数据集、Amazon 数据集、UCI 机器学习资源库、微软数据集等等。

3) 算力和开发成本高

在计算方面,比传统算法下相比,神经网络算法要耗费更多的计算机资源,对于复杂的深度学习模型来说,若想训练出一个优秀的模型,甚至需要几周的时间。但以 20 世纪七八十年代的计算机硬件水平,想要实现如此大规模的计算,几乎是不可能的。因此计算机的硬件性能也是影响神经网络发展的因素之一。 进入 21 世纪以后,计算机的硬件性能获得了飞速发展,这为神经网络的发展创造了有利的外部环境。 2017 年 5 月,围棋高手 AlphaGo 机器人,从空白状态学起,自我训练 3 天,对弈 490 万次,便打败了人类第一围棋高手柯洁。AlphaGo Zero 作为 AlphaGo 的进阶版,它自我训练 40 天,对弈 2900 万次,最终以 100:0 的战绩,打败了它的前辈 AlphaGo 机器人。而这些数据的背后,是强大算力作为支撑。 同时神经网络模型搭建过程较为复杂,激活函数的选择,权值的调节,都是一个比较费时的过程,因此其开发周期相对较长。总之,神经网络算法是一种成本较高的算法,这也决定了它能够解决比传统机器学习算法更为复杂的问题。下表对神经网络的特点做了简单的总结:

项目

说明

优点

网络结构延展性好,能够拟合复杂的数据分布,比如非线性函数,通过调节权值参数来获取泛化能力较强的模型。

缺点

可解释性差,调参依赖于经验,可能会陷入局部最优解,或者梯度消失、梯度爆炸等问题。

应用领域

神经网络算法拟合能力强,应用领域广,比如文本分类等,而深度学习作为神经网络的分支,也是当前最为热门研究方向,在图像处理、语言识别和自然语言处理等多个领域都有着非常突出的表现。

神经网络算法应用

讲了这么多有关神将网络的相关知识,一切的都是为了解决实际的问题,那应该如何在编程中使用它呢?Python 机器学习 Sklearn 库提供了多层感知器算法(Multilayer Perceptron,即 MLP),也就是我们所说的神经网络算法,它被封装在 sklearn.neural_network 包中,该包提供了三个神经网络算法 API,分别是:

  • neural_network.BernoulliRBM,伯努利受限玻尔兹曼机算法,无监督学习算法;
  • neural_network.MLPClassifier,神经网络分类算法,用于解决分类问题;
  • neural_network.MLPRgression,神经网络回归算法,用于解决回归问题。

下面使用神经网络分类算法解决鸢尾花的分类问题。在这之前有必要先了解 neural_network.MLPClassifier 分类器常用参数,如下所示:

名称

说明

hidden_layer_sizes

元组或列表参数,序列内元素的数量表示有多少个隐藏层,每个元素的数值表示该层有多少个神经元节点,比如(10,10),表示两个隐藏层,每层10个神经元节点。

activation

隐藏层激活函数,参数值有 identity、logistic、tanh、relu,默认为 'relu' 即线性整流函数(校正非线性)

solver

权重优化算法,lbfgs、sgd、adam,其中 lbfg 鲁棒性较好,但在大型模型或者大型数据集上花费的调优时间会较长,adam 大多数效果都不错,但对数据的缩放相当敏感,sgd 则不常用

alpha

L2 正则项参数,比如 alpha = 0.0001(弱正则化)

learning_rate

学习率,参数值 constant、invscaling、adaptive

learning_rate_init

初始学习率,只有当 solver 为 sgd 或 adam 时才使用。

max_iter

最大迭代次数

shuffle

是否在每次迭代时对样本进行清洗,当 solver 参数值为 sgd 或 adam 时才使用该参数值

random_state

随机数种子

tol

优化算法中止的条件,当迭代先后的函数差值小于等于 tol 时就中止

Iris 鸢尾花数据集内包含 3 个类别,分别是山鸢花(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)共150 条记录,每一个类别有 50 条数据,每条记录有 4 项特征(单位为厘米):

  • sepallength:萼片长度
  • sepalwidth:萼片宽度
  • petallength:花瓣长度
  • petalwidth:花瓣宽度

我们选取两个类别(0 和 1,即山鸢尾花和变色鸢尾花)的样本标记值和两个特征属性('sepal length (cm)', 'petal length (cm)'),之后使用神经网络分类算法对数据集中的 0 和 1 两类鸢尾花进行正确分类。代码如下所示:

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from sklearn import datasets
  5. from sklearn.preprocessing import StandardScaler
  6. from sklearn.model_selection import train_test_split
  7. from sklearn.neural_network import MLPClassifier
  8. def main():
  9. iris = datasets.load_iris() # 加载鸢尾花数据集
  10. # 用pandas处理数据集
  11. data = pd.DataFrame(iris.data, columns=iris.feature_names)
  12. print(iris.feature_names)
  13. #数据集标记值 iris.target
  14. data['class'] = iris.target
  15. # 此处只取两类 0/1 两个类别的鸢尾花,设置类别不等于 2
  16. data = data[data['class'] != 2]
  17. # 对数据集进行归一化和标准化处理
  18. scaler = StandardScaler()
  19. # 选择两个特征值(属性)
  20. X = data[['sepal length (cm)', 'petal length (cm)']]
  21. #计算均值和标准差
  22. scaler.fit(X)
  23. # 标准化数据集(数据转化)
  24. X = scaler.transform(X)
  25. # 'class'为列标签,读取100个样本的的列表
  26. Y = data[['class']]
  27. # 划分数据集
  28. X_train, X_test, Y_train, Y_test = train_test_split(X, Y)
  29. # 创建神经网络分类器
  30. mpl = MLPClassifier(solver='lbfgs', activation='logistic')
  31. # 训练神经网络模型
  32. mpl.fit(X_train, Y_train)
  33. # 打印模型预测评分
  34. print('Score:\n', mpl.score(X_test, Y_test))
  35. # 划分网格区域
  36. h = 0.02
  37. x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
  38. y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
  39. xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))
  40. Z = mpl.predict(np.c_[xx.ravel(), yy.ravel()])
  41. Z = Z.reshape(xx.shape)
  42. #画三维等高线图,并对轮廓线进行填充
  43. plt.contourf(xx, yy, Z,cmap='summer')
  44. # 绘制散点图
  45. class1_x = X[Y['class'] == 0, 0]
  46. class1_y = X[Y['class'] == 0, 1]
  47. l1 = plt.scatter(class1_x, class1_y, color='b', label=iris.target_names[0])
  48. class2_x = X[Y['class'] == 1, 0]
  49. class2_y = X[Y['class'] == 1, 1]
  50. l2 = plt.scatter(class2_x, class2_y, color='r', label=iris.target_names[1])
  51. plt.legend(handles=[l1, l2], loc='best')
  52. plt.grid(True)
  53. plt.show()
  54. main()

模型评分为 1.0,即模型预测正确率为 100%,输出效果图如下:

神经网络分类效果图
神经网络分类效果图

图2:分类效果图

以上就是神经网络算法的实际应用,可以看出神经网络虽然复杂,但训练出的模型预测正确率高,这是传统的机器学习算法所不能相比的。神经网络算法适合处理大规模的数据分析任务,不管是分类还是回归任务,都有着十分优秀的表现力。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从零到一:如何系统性学习AI并实现技术突破
随着人工智能(AI)在各个行业的快速发展,越来越多的人渴望学习AI并在该领域取得突破。无论是初学者,还是有一定基础的工程师,掌握AI的核心知识和技能,逐步深入研究,是走向技术突破的必经之路。本文将帮助你从零开始学习AI,逐步实现技术突破。
江南清风起
2025/03/16
1500
基于神经网络——鸢尾花识别(Iris)
鸢尾花识别是学习AI入门的案例,这里和大家分享下使用Tensorflow 2框架,编写程序,获取鸢尾花数据,搭建神经网络,最后训练和识别鸢尾花。
一颗小树x
2021/05/18
6.9K0
基于神经网络——鸢尾花识别(Iris)
【深度学习实验】前馈神经网络(final):自定义鸢尾花分类前馈神经网络模型并进行训练及评价
鸢尾花分类(通过输入鸢尾花的特征信息,预测鸢尾花的种类)是一个常见的机器学习问题。本次实验旨在使用PyTorch构建一个简单的鸢尾花分类前馈神经网络模型,并进行训练和评价,以了解PyTorch的基本使用方法和模型训练过程。
Qomolangma
2024/07/30
2750
【深度学习实验】前馈神经网络(final):自定义鸢尾花分类前馈神经网络模型并进行训练及评价
手把手教你用PyTorch创建首个神经网络
随着深度学习领域日益渐火以及网络上的前沿文章铺天盖地地出现,人们很容易将深度学习视为是只对数学博士开放的高级领域——但本文要证明这种观点是错的。
人工智能小咖
2020/05/08
2.1K0
手把手教你用PyTorch创建首个神经网络
机器学习实战第1天:鸢尾花分类任务
鸢尾花分类任务是一个经典的机器学习问题,通常用于演示和测试分类算法的性能。该任务的目标是根据鸢尾花的特征将其分为三个不同的品种,即山鸢尾(Setosa)、变色鸢尾(Versicolor)和维吉尼亚鸢尾(Virginica)。这个任务是一个多类别分类问题,其中每个样本都属于三个可能的类别之一。
Nowl
2024/01/18
1.6K0
机器学习实战第1天:鸢尾花分类任务
机器学习算法(八):基于BP神经网络的乳腺癌的分类预测
本项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc
汀丶人工智能
2023/03/24
7890
【深度学习实验】前馈神经网络(七):批量加载数据(直接加载数据→定义类封装数据)
在本系列先前的代码中,借助深度学习框架的帮助,已经完成了前馈神经网络的大部分功能。本文将基于鸢尾花数据集构建一个数据迭代器,以便在每次迭代时从全部数据集中获取指定数量的数据。(借助深度学习框架中的Dataset类和DataLoader类来实现此功能)
Qomolangma
2024/07/30
1620
【深度学习实验】前馈神经网络(七):批量加载数据(直接加载数据→定义类封装数据)
sklearn应用线性回归算法
Scikit-learn 简称 sklearn 是基于 Python 语言实现的机器学习算法库,它包含了常用的机器学习算法,比如回归、分类、聚类、支持向量机、随机森林等等。同时,它使用 NumPy 库进行高效的科学计算,比如线性代数、矩阵等等。 Scikit-learn 是 GitHub 上最受欢迎的机器学习库之一,其最新版本是 2020 年12 月发布的 scikit-learn 0.24.1。
zhangjiqun
2024/12/14
2530
sklearn应用线性回归算法
【深度学习 | 感知器 & MLP(BP神经网络)】掌握感知的艺术: 感知器和MLP-BP如何革新神经网络
一个非常有趣的讲解 (感知器是一种单层神经网络,而多层感知器则称为神经网络。): https://towardsdatascience.com/what-the-hell-is-perceptron-626217814f53
计算机魔术师
2023/10/18
5730
【深度学习 | 感知器 & MLP(BP神经网络)】掌握感知的艺术: 感知器和MLP-BP如何革新神经网络
完全汇总,十大机器学习算法!!
接下来我会从每个算法模型的介绍、基本原理、优缺点以及适用场景注意叙述,最后会基于开源数据集给出一个比较入门型的案例供大家学习~
Python编程爱好者
2024/04/12
4610
完全汇总,十大机器学习算法!!
Python快速构建神经网络
机器学习一直是Python的一大热门方向,其中由神经网络算法衍生出来的深度学习在很多方面大放光彩。那神经网络到底是个个什么东西呢?
ZackSock
2021/04/13
7760
Python快速构建神经网络
Python BP神经网络实现
人工神经网络模型种类很多,其中根据网络内数据流向进行分类可以分为前馈网络、反馈网络和自组织网络。
用户7886150
2020/12/28
1.3K0
快速入门Python机器学习(32)
脑神经元的抽象模型,被称为M-P 模型(McCulloch-Pitts neuron,MCP):1943年,美国神经解剖学家沃伦麦克洛奇(Warren McCulloch)神经网络和数学家沃尔特皮茨(Walter Pitts)。
顾翔
2022/09/23
4270
快速入门Python机器学习(32)
使用神经网络解决鸢尾花分类问题
#例12-8 使用训练集和测试集,对iris数据进行分类 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.neural_network import MLPClassifier import pandas as pd from sklearn.model_selection import train_test_split import joblib iris = data
爱编程的小明
2022/09/06
5090
机器学习-12-sklearn案例01-初级
网上有很多关于sklearn的学习教程,最好的教程就是官方文档。 官方文档地址:https://scikit-learn.org/stable/
用户2225445
2024/05/26
3590
机器学习-12-sklearn案例01-初级
sklearn库的功能_numpy库
sklearn是目前python中十分流行的用来实现机器学习的第三方包,其中包含了多种常见算法如:决策树,逻辑回归、集成算法等。
全栈程序员站长
2022/11/02
7900
分类-KNN算法(代码复现和可视化)
K近邻(K Nearest Neighbors,KNN)算法是最简单的分类算法之一,也就是根据现有训练数据判断输入样本是属于哪一个类别。
唔仄lo咚锵
2022/10/04
9340
分类-KNN算法(代码复现和可视化)
使用腾讯云 GPU 学习深度学习系列之一:传统机器学习的回顾
本文介绍了神经网络在图像识别领域的研究进展,以及深度学习技术在图像分类、物体检测、语义分割、姿态估计等方向的算法应用。通过对比不同神经网络模型在性能、速度、易用性等方面的差异,进一步分析了各种方法的优缺点,并展望了未来研究方向。
集智
2017/05/10
7.3K5
机器学习-04-分类算法-04-支持向量机SVM-案例
1995年Cortes和Vapnik首先提出了支持向量机(Support Vector Machine),由于其能够适应小样本的分类,分类速度快等特点,性能不差于人工神经网络,所以在这之后,人们将SVM应用于各个领域。大量使用SVM模型的论文不断涌现,包括国内和国外。
用户2225445
2025/04/02
1630
机器学习-04-分类算法-04-支持向量机SVM-案例
【深度学习 | 感知器 & MLP(BP神经网络)】掌握感知的艺术: 感知器和MLP-BP如何革新神经网络 | 技术创作特训营第一期
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/08/22
5880
推荐阅读
相关推荐
从零到一:如何系统性学习AI并实现技术突破
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档