神经网络(neural network)是一种模拟人脑神经思维方式的数据模型,神经网络有多种,包括BP神经网络、卷积神经网络,多层感知器MLP等,最为经典为神经网络为多层感知器MLP(Multi-Layer Perception),SPSSAU默认使用该模型。类似其它的机器学习模型(比如决策树、随机森林、支持向量机SVM等),神经网络模型构建时首先将数据分为训练集和测试集,训练集用于训练模型,测试集用于测试模型的优劣,并且神经网络模型可用于特征重要性识别、数据预测使用,也或者训练好模型用于部署工程使用等。
本部分神经网络使用的‘鸢尾花分类数据集’进行案例演示,其共为150个样本,包括4个特征属性(4个自变量X),以及标签(因变量Y)为鸢尾花卉类别,共包括3个类别分别是刚毛鸢尾花、变色鸢尾花和弗吉尼亚鸢尾花(下称A、B、C三类)。
神经网络的原理上,其可见下图。
原理上,首先输入特征项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值进行对比选择使用。
本例子操作如下:
训练集比例默认选择为:0.8即80%(150*0.8=120个样本)进行训练神经网络,余下20%即30个样本(测试数据)用于模型的验证。为保持数据量纲统一,选择‘正态标准化’方式。但需要注意的是,本案例数据仅150个,用于训练的数据仅120个非常少,因而需要特别设置某些参数值。
首先是batch size值,由于仅120个数据用于训练模型太少,因此batch size设置为10个(或者20个对比等)较好。其它参数暂默认,但第一次出来的模型非常糟糕,训练集数据f1-score仅为0.58,意味着该模型不可行。接着考虑隐层神经元这个重要的参数值,由于当前数据样本非常少,并且特征项很低,可以考虑‘让模型更复杂些’,即加大神经元层数,本次设置为3层,每层为100个神经元。最终训练数据评估效果良好,并且测试数据评估效果良好,意味着模型不存在‘过拟合’现象,模型可用。
本案例设置参数如下:
SPSSAU共输出5项结果,依次为基本信息汇总,训练集或测试集模型评估结果,测试集结果混淆矩阵,模型汇总表和模型代码,如下说明:
上述表格中,基本信息汇总展示出因变量Y(标签项)的分类分布情况,模型评估结果(包括训练集或测试集)用于模型的拟合效果判断,尤其是测试集的拟合效果,以及提供测试集数据的混淆矩阵结果;模型汇总表格将各类参数值进行汇总,并且在最后附录神经网络模型构建的核心代码。
接下来针对最重要的模型拟合情况进行说明,如下表格:
上表格中分别针对训练集和测试集,提供四个评估指标,分别是精确率、召回率、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)
涉及以下几个关键点,分别如下:
SPSS在线_SPSSAU_哑变量_虚拟变量spssau.com/front/spssau/helps/otherdocuments/dummy.html编辑
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正则化惩罚系数值进行设置(设置更大)。另外可对初始学习率参数值设置更多,以加快计算速度。