神经网络案例分析

神经网络(neural network)是一种模拟人脑神经思维方式的数据模型,神经网络有多种,包括BP神经网络、卷积神经网络,多层感知器MLP等,最为经典为神经网络为多层感知器MLP(Multi-Layer Perception),SPSSAU默认使用该模型。类似其它的机器学习模型(比如决策树、随机森林、支持向量机SVM等),神经网络模型构建时首先将数据分为训练集和测试集,训练集用于训练模型,测试集用于测试模型的优劣,并且神经网络模型可用于特征重要性识别、数据预测使用,也或者训练好模型用于部署工程使用等。

神经网络案例

1 背景

本部分神经网络使用的'鸢尾花分类数据集'进行案例演示,其共为150个样本,包括4个特征属性(4个自变量X),以及标签(因变量Y)为鸢尾花卉类别,共包括3个类别分别是刚毛鸢尾花、变色鸢尾花和弗吉尼亚鸢尾花(下称A、B、C三类)。

2 理论

神经网络的原理上,其可见下图。

原理上,首先输入特征项X,即放入的自变量项,神经网络模型时,可将特征项X构建出'伪特征',比如输入的是性别、年龄、身高、体重等,其结合'激活函数'构建出一些'伪特征项'(即事实不存在,完全由模型构建的特征项,并且是无法解释的特征项),具体构建上,比如为线性激活函数时可直观理解为类似"y=1+2*x1+3*x2+4*x3+..."这样的函数)。并且构建'伪特征项'可有多个层次(即'隐层神经元'可以有多层,默认是1层),并且每个层次可以有多个神经元(默认是100)。最终由数学优化算法计算,得到输出,即预测项。

通俗上看,即输入特征项X,然后经过1轮或多轮的'伪特征'构建,并且由算法最优求解,得到输出项。结合神经网络的原理情况,其涉及以下参数,如下:

激活函数,即中间神经元如何得到的数学函数,通常是非线性函数,且通常使用relu项即可。权重优化方法上提供三种,分别是lbfgs,sgd和adam,默认使用机遇梯度下降法,权重优化方法用于最优权重值计算。"L2正则化惩罚系数"用于防止过拟合使用,该值越大时越容易带来更好的训练模型拟合,但'过拟合'风险越高(即训练数据模型良好,但测试数据模型糟糕)。最大迭代次数和优化容忍度为算法内部结束的判断标准。

隐层神经元设置上,层数越多模型越复杂,计算时间越长,但理论上层数越多模型拟合效果会越好,SPSSAU默认是一层。神经元个数(即'伪特征数量')上,该参数值越大时越容易带来更好的模型拟合效果,但同时也容易带来'过拟合'效果,一般情况下建议神经元个数应该小于'特征项个数'的2倍,比如本案例数据时仅为4个特征项,可将神经元个数最多设置为8;隐层神经元层次越多,神经元个数越多时,会让模型变的复杂并且计算时间越长,当特征项个数较多时,建议通过减少层数和神经元个数方式综合权衡(SPSSAU默认是一层,神经元个数为100)。

除此之外,当权重优化方法为sgd或者adam时,可能涉及下述3个参数值(权重优化方法为lbfgs牛顿法时时不包括),如下:

初始学习率为内部迭代过程中最优解移动的步长值,该值越大时计算越快,但容易找不到最优解,该值越小时计算越慢,但其更可能找到最优解。除此之外,还可对学习率进行优化,优化方法共有三种,默认使用constant法。

Batch size指内部数学算法时每次用于训练数据的个数,比如训练数据有1000个,那么设置Batch size为100,神经网络内部算法会先用其中100个数据来训练,然后用另外100个训练,一直训练直至训练数据使用完。该参数值越小时,其会减少机器内存的使用,但通常神经网络运行时间会越长,该参数值默认为200和训练样本个数二者的较小值,如果训练数据较小时,建议自行设置该参数值为较小值,比如仅100个训练数据时,建议设置该值介于2 ~ 20之间,但过小的Batch size值会带来计算收敛太慢等问题,因而实际使用时,建议设置多个不同的batch size值进行对比选择使用。

3 操作

本例子操作如下:

训练集比例默认选择为:0.8即80%(150*0.8=120个样本)进行训练神经网络,余下20%即30个样本(测试数据)用于模型的验证。为保持数据量纲统一,选择'正态标准化'方式。但需要注意的是,本案例数据仅150个,用于训练的数据仅120个非常少,因而需要特别设置某些参数值。

首先是batch size值,由于仅120个数据用于训练模型太少,因此batch size设置为10个(或者20个对比等)较好。其它参数暂默认,但第一次出来的模型非常糟糕,训练集数据f1-score仅为0.58,意味着该模型不可行。接着考虑隐层神经元这个重要的参数值,由于当前数据样本非常少,并且特征项很低,可以考虑'让模型更复杂些',即加大神经元层数,本次设置为3层,每层为100个神经元。最终训练数据评估效果良好,并且测试数据评估效果良好,意味着模型不存在'过拟合'现象,模型可用。

本案例设置参数如下:

4 SPSSAU输出结果

SPSSAU共输出5项结果,依次为基本信息汇总,训练集或测试集模型评估结果,测试集结果混淆矩阵,模型汇总表和模型代码,如下说明:

上述表格中,基本信息汇总展示出因变量Y(标签项)的分类分布情况,模型评估结果(包括训练集或测试集)用于模型的拟合效果判断,尤其是测试集的拟合效果,以及提供测试集数据的混淆矩阵结果;模型汇总表格将各类参数值进行汇总,并且在最后附录神经网络模型构建的核心代码。

5文字分析

接下来针对最重要的模型拟合情况进行说明,如下表格:

上表格中分别针对训练集和测试集,提供四个评估指标,分别是精确率、召回率、f1-scrore、准确率,以及平均指标和样本量指标等,训练数据时f1-score值为0.97,并且测试集数据也保持着0.94高分,二者比较接近,因而意味着应该不存在'过拟合'现象,而且模型良好。

接着进一步查看测试数据的'混淆矩阵',即模型预测和事实情况的交叉集合,如下图:

'混淆矩阵'时,右下三角对角线的值越大越好,其表示预测值和真实值完全一致。上图中仅B类中2个样本被判断成C类,其余全部正确,意味着本次神经网络在测试数据上表现良好。最后SPSSAU输出模型参数信息值,如下表格:

模型汇总表展示模型各项参数设置情况,最后SPSSAU输出使用python中slearn包构建本次神经网络的核心代码如下:

model = MLPClassifier(activation='relu', alpha=1.0E-4, hidden_layer_sizes=(100,100,100), learning_rate='constant', learning_rate_init=1.0E-4, batch_size=20, max_iter=200, solver='adam', tol=0.001)

model.fit(x_train, y_train)

6 剖析

涉及以下几个关键点,分别如下:

  • 神经网络时是否需要标准化处理?
    一般建议是进行标准化处理,因为神经网络中可能涉及距离计算,需要量纲化数据处理,通常使用正态标准化处理方式即可。
  • 保存预测值
    保存预测值时,SPSSAU会新生成一个标题用于存储模型预测的类别信息,其数字的意义与模型中标签项(因变量Y)的数字保持一致意义。
  • SPSSAU进行神经网络构建时,自变量X(特征项)中包括定类数据如何处理?
    神经网络时通常不会关注于数据类型本身,因为其原理上是对特征项进行非线性转换神经元,进而优先各类特征权重值,且其中间隐藏层变换过程后已经失去原始特征的实际意义,因而神经网络通常不关注数据类型。如果一定要处理,建议可对定类数据进行哑变量转化后放入,关于哑变量可点击查看。

SPSS在线_SPSSAU_哑变量_虚拟变量​spssau.com/front/spssau/helps/otherdocuments/dummy.html​编辑

  • SPSSAU中神经网络合格的判断标准是什么?
    机器学习模型中,通常均为先使用训练数据训练模型,然后使用测试数据测试模型效果。通常判断标准为训练模型具有良好的拟合效果,同时测试模型也有良好的拟合效果。机器学习模型中很容易出现'过拟合'现象即假的好结果,因而一定需要重点关注测试数据的拟合效果。针对单一模型,可通过变换参数调优,与此同时,可使用多种机器学习模型,比如使用决策树、随机森林、支持向量机、神经网络等,综合对比选择最优模型。
  • 神经网络更多参考资料?
    更多关于神经网络的资料,可通过sklearn官方手册查看,点击查看。

1.17. Neural network models (supervised)​scikit-learn.org/stable/modules/neural_networks_supervised.html​编辑

  • 神经网络模型参数设置?

神经网络模型时,参数设置非常重要,建议对batch size进行自定义(当权重优化方法为sgd或adam时,且选择batch size为custom,自定义batch size),并且设置隐层神经元层数及每层神经元个数(隐层神经元层数加大,每层神经元个数加大时均对模型有着拟合帮助,但会带来计算时间更长且模型更复杂带来'过拟合'现象,正常情况下建议隐层神经元层数小于等于3)。如果出现'过拟合'现象,可对L2正则化惩罚系数值进行设置(设置更大)。另外可对初始学习率参数值设置更多,以加快计算速度。

相关推荐
新智元几秒前
Meta没做的,英伟达做了!全新架构吞吐量狂飙6倍,20万亿Token训练
人工智能·openai
新智元几秒前
Hinton 预言成真!AI 接管美国一半白领,牛津哈佛扎堆转行做技工
人工智能·openai
aneasystone本尊12 分钟前
学习 Coze Studio 的知识库入库逻辑
人工智能
然我13 分钟前
从 “只会聊天” 到 “能办实事”:OpenAI Function Call 彻底重构 AI 交互逻辑(附完整接入指南)
前端·javascript·人工智能
岁月宁静20 分钟前
软件开发核心流程全景解析 —— 基于 AI 多模态项目实践
前端·人工智能·后端
wangjiaocheng21 分钟前
软件功能分解输入处理输出递归嵌套模型
人工智能
G等你下课22 分钟前
Function call
前端·人工智能
岁月宁静22 分钟前
MCP 协议应用场景 —— Cursor 连接 Master Go AI
前端·vue.js·人工智能
柠檬味拥抱25 分钟前
融合NLU与NLG的AI Agent语言交互机制研究
人工智能
wydaicls28 分钟前
用函数实现方程函数解题
人工智能·算法·机器学习