资源描述
关于该公司同工同酬模型的探讨
摘要
本文在“统计回归”的基础上,给出了两种模型,通过对已有的90组数据测试检验,实现了对该公司的工资计算,并将计算方法应用到8组数据中去,得到了非常准确的结果。
考虑到运算量的大小,我们采用了较为科学的逐步分析法,提取了对结果影响较大的两个因素,分别是学历和工龄,再次使用BP神经网络重新建立模型四,达到了很高的识别率。
在模型检验方面,对于“多元线性回归方法”以及“多元非线性回归方法”,本文采用了“ F检验法”和“相关系数检验法”进行检验,最终确定诊断值与检测结果是非线性关系。对于“BP神经网络”,本文选取90组已知数据中的60组数据作为训练样本,以此建立BP神经网络,之后,依次选取不同的30组数据重复上述过程,准确率非常高,极好的证明了模型的科学合理性。
通过比较可知,采用BP神经网络的模型识别率较高,但相应处理时间较长。多元线性回归模型思想清晰,虽然可以通过优化得到最小二范数,但其数据之间的关系只停留在线性阶层,与含有隐层的神经网络模型相比,对事物的抽象和预测不够准确。
关键词:多元线性回归 多元非线性回归 BP神经网络 逐步分析法 F检验
一、 问题重述:
1.1 问题描述:
职工工资可以说是人们最为关切、议论最多的部分,因此也常常是最受重视的部分。一般说来,现代企业的工资具有补偿职能、激励职能、调节职能、效益职能。科学合理的工资制度,是激励职工的劳动积极性,提高劳动效率的重要手段,正确运用工资的杠杆作用在调动员工积极性方面会起到事半功倍的效果。此外,对于企业中的各种不同的“特殊职务族”,是否要制定和执行专门的倾斜与优惠政策,如对管理干部、高级专家、女工等,也是需要重点考虑的问题。
1.2 问题提出
如表所示,随机抽取了某企业若干职工的相关数据。请建立适当的数学模型研究下列问题:
(1)分析平均日工资与其他因素之间的关系,尤其需要说明与哪些因素关系密切;
(2)考察女工是否受到不公正待遇,以及她们的婚姻状况是否影响其收入;
(3)继续改进你的模型,并给出模型误差分析。
二、 问题分析:
题目要求根据所提供确定平均日工资与其他因素之间的关系,并且分析出哪些因素影响较大。这就需要把表中的数据转化为一种数学关系。首先我们分析平均日工资与其他因素之间成什么关系,是否是多元线性关系,或是多元非线性,或是呈网络关系,并对结果进行分析比较;其次,作者在分析数据中发现存在个别工资属于模型中的奇异点,会在很大程度上影响模型的准确性,应在建立模型中把它删除以提高模型的拟合度;最后分析是否每一个因素都会在影响很大程度上影响诊断工资额,删去影响小的测量指标,保留特征值,以减少计算工资时的运算量,本文采用逐步判别法解决此问题。最后本文应用F检验与相关系数检验等方法来检验模型,以判别模型优劣。
三、 模型假设
1. 本题所给的数据具有代表性,能确实反映该公司的工资构成;
2. 所给的数据认为是准确可靠的,给的工资具有显著的统计特征;
3. 计算工资的全部标准都已被题目所给的几个参量所包含;
4. 认为样本容量足够大,可认为判别准则有较高的可靠性和准确性;
5. 男性和女性的工资数据都是在同等条件下获得的;
6. 在没有足够经验的情况下,我们假定女性和男性在同等条件下工资额是一样的。
四、 符号说明:
:平均日工资
:工龄(日)
(一线工作)=
(培训)=
(岗位)=
(性别)=
(婚姻)=
表示学历为本科
表示学历为硕士
表示为博士
表示为博士后
五、 模式的建立与问题求解
对于问题1的第一小问,本文将在模型一、二中一起给予求解;对于问题1的第二小问以及问题2,本文在模型三中给予解答;对于问题3,本文在模型四中给予解答。
5.1 模型一:多元线性回归模型
5.1.1 模型假设:
1. 平均日工资与其他因素都是服从多元线性可分关系的。
2. 假设非表中因素可忽略不计。
3. 根据数据表,假设工龄增长一个月,月工资增长可认为是常数。
4. 对于拟合多项式,对自变量为负的部分也是正确的。
5. 其他因素相互之间无影响。
5.1.2 模型建立及算法
平均日工资是一个正态随机变量,即Y服从正态分布,故本文假设的模型形式为:
~
是待估计回归系数,是随机误差。
记Y = , x = , = , =
, 使用MATLAB软件代入数据, 可得到的参数估计和置信区间见表
5.1.3 模型结果:
变量
参数估量
置信区间
37.2894
[ 32.6269, 41.9520 ]
0.0881
[ 0.0747, 0.1015 ]
-0.3000
[ -4.7744, 4.1743 ]
-5.0121
[ -18.1137, 8.0894 ]
0.3306
[ -3.6418, 4.3030 ]
1.8996
[-3.3284, 7.0816 ]
1.1707
[ -4.1646, 6.5090]
17.6054
[ 4.2835, 31.0074]
25.0976
[ 13.5342, 36.6609]
所得的拟合表达式:
5.1.4 模型分析:
在该模型中,本文建立了多元线性回归模型,利用最小二乘法算出待定回归系数,而后简单的确定了平均日工资与其他因素之间的关系。由后面的模型检验部分看出,~的置信区间均过零点,故不可靠,同时拟合度不高,只有0.7929。故而对该模型进行改进,增加交互项,即非线性回归模型。
5.2 模型二:非线性回归模型
5.2.1 模型假设:
1. 假设非表中因素可忽略不计。
2. 对于拟合多项式,对自变量为负的部分也是正确的。
5.2.2 模型建立及算法
根据数据表,假设工龄增长到一定数值后,月工资不再增长。
设平均日工资与其他因素之间满足
~
是待估计回归系数,是随机误差。
算法同模型一, 可得到的参数估计见表
5.2.3 模型结果
变量
参数估量
29.823
0.22777
-2.414
-2.4943
0.61541
1.5788
0.51496
17.574
19.281
-0.00033287
所得参数表达式:
5.2.4 模型分析:
在该模型中,本文建立了多元非线性回归模型。算法同模型一,得出平均日工资与其他因素之间的函数关系。由后面的模型检验部分看出,拟合度提高到0.87774。 说明平均日工资与其他因素之间呈非线性关系。
5.3 模型三:待检验参数经过筛选的多元线性回归模型
我们知道影响平均日工资的因素越多,平均日工资的构成就越复杂,计算工资就会相当耗费资源,同时某些因素也会对计算结果造成一些负面影响。因此我们需要找到一种只用一部分因素又能有很高精度的模型,在模型三中,本文通过逐步判别法,得出工龄及学历是影响平均日工资的关键或主要因素,这样可以大大减少计算工资所花费的时间,修改后的模型更具有实际意义和应用价值。
5.3.1逐步判别法来筛选特征因素
这里本文使用逐步判别法来筛选特征因素。
逐步判别法的主要思想是:在建立多元回归方程的过程中,按偏相关系数的大小次序将自变量逐个引入方程,对引入方程中的每个自变量偏相关系数进行统计检验,效应显著的自变量留在回归方程内,循此继续遴选下一个自变量。如果效应不显著,停止引入新自变量。由于新自变量的引入,原已引入方程中的自变量由于变量之间的相互作用其效应有可能变得不显著者,经统计检验确证后要随时从方程中剔除,只保留效应显著的自变量。直至不再引入和剔除自变量为止,从而得到最优的回归方程。
5.3.2逐步判别法的建立及算法:
Step1. 确定F检验值
确定F检验水平, 以作为引人或剔除变量的标准。
Step2. 逐步计算
(a)计算全部自变量的偏回归平方和V’。
(b)在已引入的自变量中, 检查是否有需要剔除的不显著变量。在已引入的变量中选取具有最小V’值的一个并计算其F值, 如果F< F2, 表示该变量不显著, 应将其从回归方程中剔除, 计算转至(c)。如F>F2则不需要剔除变量, 这时则考虑从未引入的变量中选出具有最大值的一个并计算F值, 如果F> F2, 则表示该变量显著, 应将其引人回归方程, 计算转至(c)。如果F< F2, 表示已无变量可选入方程, 则逐步计算阶段结束, 计算转入(c)。
(c)剔除或引人一个变量后, 相关系数矩阵进行消去变换, 第t+1步计算结束。其后重复(a)~(c)再进行下步计算。
Step3. 其他计算
计算回归方程入选变量的系数、复相关系数及残差等统计量。
分析后得具体筛选过程如下:
1) 准备工作
计算总体的组内离差阵和组间离差阵,确定引入变量和剔除变量的临界值和,虽然临界值是随着引入变量和剔除变量的个数的变化而变化的,但当样本容量有一定大小后,他们的变化甚微,本文取。
2) 逐步计算
本题已经引入了8个变量,本文设为,则计算内容如下
i)计算全部变量的“判别能力”
对未选入变量计算。
对已选入的变量,计算
对已入选的变量中考虑剔除可能存在的最不显著变量,取最大的(即最小的)。
ii)假设,这里表示属于已入选的变量。做F检
验,剔除变量是统计量为:
若,则剔除,然后对E和T作消去变换。
若,则从未入选变量中选出最显著的变量,即要找出最小的(即最大的),假设,这里表示属于未入选变量,做F检验,引入变量是统计量为:
若,则引入,然后对E和T作消去变换。
重复上面操作i),ii),直至不能剔除又不能引入新的变量时,逐步计算结束。
5.3.3 模型结果
1. 方差分析如下:
Anovaf
模型
平方和
df
均方
F
Sig.
1
回归
13244.961
1
13244.961
114.092
.000a
残差
10215.939
88
116.090
总计
23460.900
89
2
回归
17277.513
2
8638.757
121.547
.000b
残差
6183.387
87
71.073
总计
23460.900
89
3
回归
18197.025
3
6065.675
99.100
.000c
残差
5263.875
86
61.208
总计
23460.900
89
4
回归
18610.131
4
4652.533
81.526
.000d
残差
4850.769
85
57.068
总计
23460.900
89
5
回归
18588.014
3
6196.005
109.351
.000e
残差
4872.886
86
56.661
总计
23460.900
89
a. 计算变量: (常量), x1。
b. 计算变量: (常量), x1, x3。
c. 计算变量: (常量), x1, x3, x8。
d. 计算变量: (常量), x1, x3, x8, x7。
e. 计算变量: (常量), x1, x8, x7。
f. 因变量: y
2. 残差分析表如下:
残差统计量a
极小值
极大值
均值
标准 偏差
N
计算值
39.01
92.69
57.63
14.452
90
残差
-25.685
19.888
.000
7.399
90
标准 计算值
-1.288
2.425
.000
1.000
90
标准 残差
-3.412
2.642
.000
.983
90
a. 因变量: y
基于此模型,工龄和学历逐步被判别是与平均日工资关系密切的因素。由方差分析表可以看到,性别以及女性婚姻情况在计算model1至model5均被剔除,对因变量影响并不大,可近似认为,在该公司女性并没有受到不公平待遇,且她们的婚姻状况对她们的工资影响不大。
5.3.4根据筛选结果利用多元线性回归模型判断影响密切
我们知道影响平均日工资的因素越多,平均日工资的构成就越复杂,同时某些因素也会对计算结果造成一些负面影响。因此我们需要找到一种只用一部分其他因素又能有很高精度的模型,在该模型中,本文通过逐步判别法,得出工龄及学历是影响平均日工资的关键或主要因素,这样可以大大减少计算工资构成所花费的资源,修改后的模型更具有实际意义和应用价值。
根据以上两项因素,重复之前的多元线性回归模型,可以得到新的回归方程为:
其中:表示工龄,和联合表示学历。
测试90组数据,置信度为95%,拟合度是0.79,平均误差比模型一小,我们认为该方法是正确可行的。
选取一组数据,相近,代表性别婚姻的取不同值,检验输出值,与期望值的误差在可接受范围内。比较可知,性别对工资影响小,可以认为女性并未受到不公平待遇。而女性的婚姻对工资虽有一定的影响,但在误差允许范围内,可以忽略不计。
X1
X2
X3
X4
X5
X6
X7
X8
37
38
0
0
0
0
1
0
0
41.7565
37
41
0
0
0
1
0
0
0
42.022
38
42
0
0
0
0
1
0
0
42.1105
42
42
0
0
1
1
0
0
0
42.1105
38
42
0
0
0
1
0
0
0
42.1105
38
42
0
0
1
0
1
0
0
42.1105
40
30
0
0
0
0
0
0
0
41.0485
5.3.5模型分析:
在模型三中,本文采用了逐步判别法来筛选主要因素。并再次使用多元线性回归测试了建模效果。应当指出,这种给予逐步判别法的选取关系密切因素的方法,虽然会导致结果的准确性下降,但是在实际应用中,特别是当计算的工资个数非常多,耗费资源较多时,有着很大的实际意义。
5.4 模型四:基于BP算法的神经网络
在模型一、二中,本文采用了回归分析法建立模型,但是由结果可以看出,输出结果和期望值还是存在很大的误差,因此本文采用模型四,即BP神经网络模型。
BP神经网络是一种进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。人工神经网络具有自学习和自适应的能力,可以通过预先提供的一批相互对应的输入-输出数据,分析掌握两者之间潜在的规律,最终根据这些规律,用新的输入数据来推算输出结果,这种学习分析的过程被称为“训练”。
自学习过程是一个反复迭代的过程,首先给网络一个初始权值,然后输入一个样本计算并输出,通过实际输出与期望输出之间的差值来修改网络的权值以达到减少这个网络差值的目的。反复执行该过程直到这个差值小于预定值为止。对足够样本进行这样训练后,网络所得的那组权值便是网络通过自学习得到的正确的内部表示。因为本题选用多层网络(MSP)。
5.4.1前馈神经网络
本文采用前馈神经网络。既是构成网络的神经元只接受前一层的输入,只输出给后一层的神经元,无反馈网络,因此可用一单向无环网络来描述。在网络中结点可以分为两类,既是输入输出结点与计算结点。输入输出接点直接与外界相联,直接受外界影响,因此为可见层,而其他结点所在的中间层为隐藏层。若一个神经网络有多层,则第k层的输出与第k+1层的输入相连。输出可耦合到任意多个输入。
5.4.2三层前馈神经网络
本文构建一个三层前馈神经网络,如下图所示:
基于实际问题的分析,可知网络只有一个输出y,既员工的日工资。而有输入变量有8个,分别为。以此确定了输入层与输出层的节点数分别为7个和1个。另外,而中间隐藏层节点数的选取我们采用动态构造法:即输入输出节点数不变,而隐层节点数可变,初始时放入足够多的隐藏层节点,然后逐渐删掉那些不起作用的节点,直到节点不可收缩为止。使用MATLAB神经网络工具箱进行迭代,为使结果更加直观,收敛速度加快,不妨将y和规格化,即按照公式 (其中和分别为对应变量的最小值和最大值),使y和都落在区间[0,1]之内。最终得网络模型的最佳隐藏层节点数为5。据此可知,基于BP神经网络分类模型的最佳网络拓扑结构为:7×5×1。
5.4.3反向传播网络(BP神经网络)
下面本文将给出计算出各层权值和偏执量的方法。其主要思想是从后向前逐步传播输出层的误差,以间接的算出隐藏层的误差,进而得到各层权值和偏执量。
定义
其中为第组数据输入时,网络的实际输出。当第组数据显示患病时=1
反之= 0,即为我们的理想输出,训练的目标就是使上式尽量的小。
因此,训练一个神经网络就可以看成一个求函数最小值的过程,最方便的办法就是最速下降法,求得公式如下:
对于隐藏层的第j个神经元到输出层的第i个神经元的权的修正量为:
其中和分别表示第组样本输入时,输出层第i个神经元的状态和隐藏层第j个神经元的输出。
输出层的第i个神经元的阀值的修正量为:
对于输入层的第L个神经元的隐藏层的第k个神经元的权的修正量为
5.4.4 BP神经网络模型的构建与训练
本文将采用MATLAB工具箱中的神经网络工具箱进行神经网络模型的训练。自学习的过程是一个反复迭代的过程,首先给网络一个初始权值,然后输入一个样本计算并输出,通过实际输出与期望输出之间的差值来修改网络的权值以达到减少这个网络差值的目的。反复执行该过程直到这个差值小于预定值为止。对足够样本进行这样训练后,网络所得的那组权值便是网络通过自学习得到的正确的内部表示。
5.4.4.1网络建立:
在MATLAB中调用下列函数:
net=newff(PR,[5,1],{'tansig','purelin'},'trainscg','learngdm');
各项参数的意义与选取根据:
(1)PR是一个由每个输入向量的最大最小值构成的2×R的矩阵;R为输入神经元数目;
(2)[5,1]是隐层网络的神经元个数和输出层的神经元个数;
(3){'tansig','purelin'},选取每一层的变换函数。根据本文所使用数据的类型特点,在隐藏层采用双曲线正切S型变换函数“tansig”;在输出层采用线性变换函数“purelin”;
(4)'trainscg'是BP神经网络的训练算法函数。
(5)'learngdm'是学习函数。
5.4.4.2 设置训练参数
设置每50次迭代显示一次,学习速率设置为0.05,迭代上限设为2000次,训练目标设为0.0012。
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=3000;
net.trainParam.goal=0.002;
调用trainscg训练BP网络,调用下列函数,其中P为输入矩阵,T为输出矩阵。
[net,tr]=train(net,P,T);
得到下列训练图形
5.4.4.3网络仿真
通过函数sim(net,q)函数实现,其中参数net为该神经网络,q为待检测的输入矩阵。网络训练完成以后,使用该函数根据已训练好的网络,对测试数据进行仿真计算。同时也可以进行模型的检验。
5.4.4.4 模型分析:
在模型四中,本为采用了BP神经网络进行了建模。虽然模型的建立较为复杂,但是可以从测试数据的输出值与原期望值的比较中得出,该模型能很好的计算出员工的工资。剔除异常数据后,所得的输出值与原期望值非常接近。而且可以肯定,如果学习的数据不只是60组,而是更大的数据量,则所得到的神经网络将更加准确。因此模型四适用于大量数据,大量计算问题的处理。
六、 模型检验
6.1 检验模型一 : 多元线性回归模型的检验
回归模型的检验,回归模型是否为线性函数形式,条件可化为
1. F检验法:有平方和分解公式:
简记为: 其中 被称为残差平方和, 被称为回归平方和。
通过F检验法容易得到:统计量值F = 38.7600。
统计量对应的概率p = 0。
可以观察到p < F
2、相关系数检验法:
在概率中,复相关系数的计算公式:
它是反映X与Y成线性度的一个度量指标,r的取值范围为(0,1),r越接近1,X与Y的线性度就越高。
由相关系数检验法计算得:R=0.7929
可见R不够接近1 ,线性相关度不理想,不满足线性关系。
6.2 检验模型二: 多元非线性回归模型的检验
检验方法同模型一。
1. F检验法:
通过F检验法容易得到:统计量值F = 63.816。
统计量对应的概率p = 0。
可以观察到p < F
2、相关系数检验法:
由相关系数检验法计算得:R=0.87774
可以观察到R接近1,非线性相关度良好,满足非线性关系。
6 .3 检验模型四:基于BP算法的神经网络模型检验
为了检验神经网络的准确度,本文随机选取了60组数据作为训练数据,而对30组数据作检验,得到下表:
x1
x10
x2
x3
x4
x5
x6
x7
x8
y
y0
y'
y0'
52
0.098468271
0
1
0
0
0
1
0
49
0.238806
48.58085
0.23255
337
0.722100656
0
0
0
0
1
0
0
68
0.5223881
61.89375
0.43125
227
0.481400438
0
0
1
0
1
0
0
62
0.4328358
59.5253
0.3959
30
0.050328228
0
0
0
1
0
0
0
43
0.1492537
37.860046
0.072538
114
0.234135667
0
1
1
1
0
0
1
65
0.4776119
69.44599
0.54397
260
0.553610503
0
0
0
0
1
0
0
68
0.5223881
61.12392
0.41976
111
0.227571116
0
0
1
1
0
0
0
48
0.2238806
51.49535
0.27605
257
0.547045952
1
0
0
0
1
0
0
62
0.4328358
63.6793
0.4579
253
0.538293217
0
0
1
1
0
0
0
77
0.6567164
75.92757
0.64071
54
0.102844639
0
0
1
0
1
0
0
47
0.2089552
43.17194
0.15182
54
0.102844639
0
0
0
0
1
0
0
39
0.0895522
39.86817
0.10251
199
0.420131291
0
0
0
0
0
0
0
57
0.358209
58.66837
0.38311
167
0.350109409
0
0
1
1
0
0
0
60
0.4029851
64.71713
0.47339
245
0.520787746
0
1
1
1
0
0
1
87
0.8059701
77.24747
0.66041
42
0.076586433
0
0
1
1
0
0
0
42
0.1343284
39.174184
0.092152
103
0.210065646
0
0
0
1
0
0
0
48
0.2238806
49.66156
0.24868
75
0.148796499
0
0
0
0
0
0
0
50
0.2537313
47.31321
0.21363
172
0.361050328
1
0
0
0
1
0
0
56
0.3432836
57.77727
0.36981
19
0.026258206
0
0
0
0
1
0
0
34
0.0149254
34.4606
0.0218
319
0.682713348
0
0
1
0
1
0
0
65
0.4776119
61.72826
0.42878
326
0.698030635
0
0
1
1
0
0
0
65
0.4776119
78.76569
0.68307
154
0.32166302
1
1
1
0
1
1
0
75
0.6268657
74.69276
0.62228
406
0.873085339
0
0
1
1
0
0
0
65
0.4776119
79.43301
0.69303
18
0.024070022
0
0
1
1
0
0
0
34
0.0149254
37.172894
0.062282
209
0.442013129
0
0
1
0
0
0
1
72
0.5820896
72.07172
0.58316
308
0.658643326
0
1
1
1
0
1
0
87
0.8059701
99.05195
0.98585
162
0.33916849
0
0
0
0
0
0
0
57
0.358209
56.53107
0.35121
158
0.330415755
1
1
0
1
0
0
1
73
0.5970149
72.98962
0.59686
213
0.450765864
0
0
1
1
0
0
0
70
0.5522388
72.21711
0.58533
222
0.470459519
0
0
0
1
0
0
0
74
0.6119403
72.41208
0.58824
其中,将仿真输出结果按逆规格化公式 还原, 并与期望值比较。
数据结果显示,用所构建的神经网络算法,检测剩余的30组数据,得到了与预期相近的结果。因此,上述检验验证了所建的BP神经网络的正确性。
七、 误差分析
7.1 灵敏度分析:
对模型二进行灵敏度分析:
选取一组数据(,)= ( 27, 1, 0, 0, 0, 1, 0, 0, 34), 用上述多元非线性模型
可得,y = 33.591088,与期望值相当接近。
每次只改变一个变量值,输出结果如下表:
X1
X2
X3
X4
X5
X6
X7
X8
Yo
Y’
27
1
0
0
0
1
0
0
34
33.591088
28
1
0
0
0
1
0
0
33.80055
27
0
0
0
0
1
0
0
36.005088
27
1
1
0
0
1
0
0
31.096788
27
1
0
1
0
1
0
0
34.206498
27
1
0
0
1
1
0
0
35.169888
27
1
0
0
0
0
0
0
33.076128
27
1
0
0
0
1
1
0
51.165088
27
1
0
0
0
1
0
1
52.872088
27
1
0
0
0
1
1
1
70.446088
的改变对的影响不大,说明该模型稳定性好。
~的0-1值改变对的影响不大,而、的改变对的影响,这与模型三相吻合,进一步说明了该模型的准确性。
7.2 各模型误差分析
各模型的误差如表:
模型
平均误差
模型一
7.74
模型二
5.99
模型三
7.52
模型四
0.41
我们利用逐步求解的方法求出了对预测结果影响相对较大的因素。舍弃对平均日工资影响较弱的因素,以达到减少计算量的目的。根据模型三,只需考虑工龄和学历即可。测试结果如前所示,对比用非线性回归方法测试的结果,其平均误差为5.99,而神经网络的平均误差为0.41。这说明神经网络受参数的影响比非线性回归方法小。这点差别是两种模型的本质所决定。神经网络通过大量数据的学习训练并且反馈而确定其内部参数权值。大大增加了模型的准确性。非线性模型是多项式,系数较大的参数对结果的影响较大,所以参数改变会引起较大误差。当然,我们应该看到,由于减少运算量和耗时所造成的正面影响对比其准确率稍微下降的负面影响。这是相当积极的。
八、 模型优缺点分析
本文就问题分别建立了多元线性回归模型、多元非线性回归模型和神经网络模型。多元线性回归模型思想清晰,计算简便,易于实现。针对问题而言,线性模型的拟合度不如非线性模型高;而且其数据之间的关系只停留在线性阶层,与含有隐层的神经网络模型相比,对事物的抽象和计算不够准确。从上面的计算结果也可以反映出这一点,两种模型的计算存在偏差。其本质是因为神经网络的训练准则是使误差达到最小或者使误差在可接受的范围内,而回归分析的结果并不一定是误差最小。需要指出的是,神经网络由于加入了隐层,其权重系数的意义有待进一步研究。
九、 模型的推广
本模型可推广到各类工资的计算,分析个人因素对工资的影响。但由于本模型是根据7个指标以及已知的90个数据来计算工资值,具有一定的局限性,但将上述方法与实际情况起来,一定会有更广阔的应用价值。
参考文献
[1] 董霖 MATLAB 使用详解 北京 科学出版社 2008年8月
[2] Fredric M.Ham Ivica Kostanic著 叶世伟等译 神经计算原理
北京 机械工业出版社 2007年5月
[3] 曹振华 随机数学基础 北京 高等教育出版社 2009年8月
[4] 姜启源 数学模型 北京 高等教育出版社 2001年2月
[5]袁慰平等 计算方法与实习 南京 东南大学出版社 2006年10月
[6] 巨军让,卓戎 BP神经网络在MATLAB上的方便实现[J] 新疆石油学院报 1999,(2):42-45.
[7] 罗成汉. 基于MATLAB神经网络工具箱的BP网络实现[J] 计算机仿真
2004,21(5):109-111.
附录:
程序代码:
学习算法:
private void train_network(double[] outputs)
{
//get momentum values (delta values from last pass)
double[] delta_hidden = new double[_nn.NumberOfHidden + 1];
double[] delta_outputs = new double[_nn.NumberOfOutputs];
// Get the delta value for the output layer
for (int i = 0; i < _nn.NumberOfOutputs; i++)
{
delta_outputs[i] =
_nn.Outputs[i] * (1.0 - _nn.Outputs[i]) * (outputs[i] - _nn.Outputs[i]);
}
// Get the delta value for the hidden layer
for (int i = 0; i < _nn.NumberOfHidden + 1; i++)
{
double error = 0.0;
for (int j = 0; j < _nn.NumberOfOutputs; j++)
{
error += _nn.HiddenToOutputWeights[i, j] * delta_outputs[j];
}
delta_hidden[i] = _nn.Hidden[i] * (1.0 - _nn.Hidden[i]) * error;
}
// Now update the weights between hidden & output layer
for (int i = 0; i < _nn.NumberOfOutputs; i++)
{
for (int j = 0; j < _nn.NumberOfHidden + 1; j++)
{
//use momentum (delta values from last pass),
//to ensure moved in correct direction
_nn.HiddenToOutputWeights[j, i] += _nn.LearningRate * delta_outputs[i] * _nn.Hidden[j];
}
展开阅读全文