数据分享|用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化(中):https://developer.aliyun.com/article/1491705
均方根分数
kable(log\_mseabalone\_d\_lo\_f,"")
加性模型假设
model_assumptions
多项式模型
lm(log(Rings) ~ Diameter + Length + Height + poly(Whol\_weiht,3) + poly(Viscra\_weight,3) + polyShuckwegt,3) + poly(Selweight,3) + Infant, data=abaone_rain
均方根分数
kable(log\_rmse(abalnead\_poly
多项式模型假设
model_assumption
方差分析 F 检验
`````` anova
交互模型
lm(log(Rings) ~ Height + Diaeter + poly(Whole_weight, 4) + poly(Viscera\_weght, 4) + poly(Shucke\_weght,4) + poly(Shel\_weight, 4) + Infant + Diameter:poly(Shckedweight, 4) + poly(Shckd\_weight, 4):Infant, data=aboe_tain)
均方根分数
kable(log\_rms(abaoe\_int_infan,"
交互模型假设
model_assumption
方差分析 F 检验
anova
在这里,我们选择性能最佳的交互模型作为我们的候选模型之一。该模型具有较低的复杂性以及最低的 rmse。
我们在这里看到的是,与前两个完整模型相比,该模型在未见数据(测试数据)上的 rmse 最低。除此之外,这个模型也没有前两个复杂,这些特性使得这个模型成为我们选择的候选模型之一。
现在,由于我们有一些我们喜欢的候选模型,让我们将它们相互比较并寻找最佳模型。
候选模型
从上面的分析中,我们选择了多项式次数为 4 的交互模型,因为我们已经看到它具有最低的测试 rmse 之一,并且具有良好的模型假设。我们将把它作为第一选择的候选模型之一。该模型包含一些预测变量,而不是具有高度多重共线性的预测变量。这个模型是 abalone\_model\_int_bic。
另一个选定的模型是所有预测变量都具有相似较低 rmse 的交互模型。虽然这个模型将有更多的参数,因此是一个比早期模型更复杂的模型,但由于我们的目标是预测,我们不关心模型的复杂性。这个型号是 abalone\_int\_full
另一种候选模型将是具有 2 个因子水平的分类变量的交互模型。在开始或我们的分析中,我们看到该预测变量的分布在级别之间相似 male , female 因此我们决定引入一个新变量,该变量基本上有 2 个级别,婴儿和非婴儿,其中非婴儿 = 雄性和雌性。该模型也是多项式次数为4的交互模型 。这个模型是 abalone\_int\_infant。注:(附录部分增加了使用婴儿预测器的加法模型和相关分析)。使用分类预测变量和具有3 值和 2 值的因子水平进行分析的整个过程 是相同的。
候选模型的 RMSE 比较
- 候选模型1(abalone\_model\_int_bic)
`````` kable(log\_rmseabaone\_modlint_bic
- 候选模型2(abalone\_int\_\_candidate_full)
kable(log\_rmse(aalone\_int_l,pte
kable(log\_rmse(abalone\_nt_nan
- 候选模型 3 (abalone\_int\_infant)
- 从上面我们可以看到, 候选模型 3 (abalone\_int\_infant) 在所有三个模型中表现最好。
候选模型的模型假设
- 候选模型1(abalone\_model\_int_bic)
候选模型的模型假设
- 候选模型1(abalone\_model\_int_bic)
model\_assumptions(abalone\_model\_int\_bic,"Candidate model 1")
- 候选模型 2 (abalone\_int\_full)
`````` model_assumption
- 候选模型 3 (abalone\_int\_infant)
model_assumption
- 基于这些图,我们可以看到我们所有的候选模型都很好地满足了恒定方差和正态性假设。
- 接下来,我们将比较所有这些候选模型的预测和置信区间,并观察数据中的任何影响点。让我们看看它。
异常观察样本:高杠杆、离群点和影响点
我们将查看每个候选模型的训练数据集中存在的异常观察结果。首先我们将分别寻找高杠杆点、离群点和影响点,然后通过公共数据点得到具有高杠杆、离群点和影响力的数据点。
候选模型1(abalone\_model\_int_bic)
## \[1\] 16
- 我们看到有 16 个观察值是高杠杆、异常值和影响点。
候选模型2(abalone\_int\_full)
length(comon\_mdel\_2)
## \[1\] 15
- 在这个模型中,我们看到有 15 个观察值是高杠杆、异常值和有影响的点。
候选模型3(abalone\_int\_infant)
length(comon\_odl\_3)
## \[1\] 19
- 这个模型有 19 个这样的观察结果,它们是高杠杆、离群点和有影响力的点。
所有候选模型之间的异常观察
- 我们现在已经编制了候选模型中常见的观察结果列表。让我们来看看这些,看看是否有任何相似之处。
`````` intersect(commodl,intersect(commodel1,omomodl_2)) length(cmmondaa)
## \[1\] 13
我们立即注意到的第一件事是,我们最初在数据集中确定为不合逻辑或数据输入错误的观察结果很少。这些观察结果具有负权重差异,这是不可能的。这是有道理的,因为在记录此数据时可能会出现一些错误。
另一种模式是其中一些观察结果的整体权重与平均整体权重相比超过 2。此外,这些观察结果具有大量环,即这些是较老的鲍鱼。
由于存在其他符合异常观察条件的观察结果,因此总体而言,它们之间没有特定的模式。因此,我们不能从我们正在考虑进行预测的模型和分析中排除这些。
我们将使用平行坐标图来可视化结果部分中的任何明显模式。
让我们看看一旦我们删除这些数据集,我们的候选模型的表现如何。
删除异常观察后的RMSE 分数
接下来,我们将通过从训练数据集中删除异常观察并计算测试数据集的 RMSE 分数来执行快速实验。
obs\_rmse <- get\_log\_rmse\_obs(lmlog(_updated) result <- ata.frae( "Mdel" = modelnames, "RMSE Train" = c( ), "RMSE Test" = c( "RMSE Train all Data" = c( "RMSE Test all data" = c( get\_lo\_ms(aaloe\_modl\_intbic)$test,
- 有趣的是,所有在没有异常观察的情况下训练的模型在测试数据上产生了更好的 rmse。在上表中我们可以看到不同RMSE值的比较。
- 由于这些不寻常的观察没有揭示任何特定的模式或任何不寻常的行为,我们无法从我们的数据集中删除这些,并将使用候选模型继续我们的分析。
预测和置信区间
#model 1 vif(abalone\_mdl\_ntbic) #model 2 #model 3
让我们从置信区间开始。我们所有候选模型的置信区间都在相似的范围内。即平均而言,在任何一点,所有模型的区间范围似乎都相同。请注意,3 个候选模型中有 2 个使用了所有预测变量,因此具有非常高的共线性。由于我们的模型很好地拟合了数据,因此平均减少了任何点的方差范围。这很好。
此外,与置信区间类似,模型之间的预测区间也在相同的范围内。模型拟合再次对这个较窄的区间范围产生影响。请注意,预测区间比我们预期的置信区间宽得多。由于所有模型的预测区间即使在高度共线性之后也处于相似的范围内,我们会说这些是好的。我们使用默认的 95% 公式来计算所有候选模型的置信区间和预测区间。
基于我们对所有这些候选模型的分析,我们认为候选模型 3 abalone\_int\_infant 将是预测鲍鱼年龄的最佳选择。与其他两个候选模型相比,该模型更小,复杂度更低,但 rmse 最低。此外,模型之间的预测和置信区间非常相似。由于这些原因,我们将选择模型 abalone\_int\_infant 作为我们分析的最佳模型。
预测鲍鱼的年龄
- 现在让我们使用我们选择的模型预测鲍鱼的年龄。我们将从测试数据中随机选择 5 个观察值并尝试预测年龄。请注意,该模型实际上预测了鲍鱼中的环数。我们需要在环数中加上 1.5 才能确定鲍鱼的真实年龄。所以本质上,我们将比较模型预测的环数与测试数据集中的实际环数。
`````` #从测试数据中随机抽取5个观察值 sample <- sample\_n(test\_data, 5) exp(predict( ta=sample )
我们可以从上面的例子中看到,我们从测试和模型中计算了环数和年龄,用于少数观察。我们看到我们的模型正确预测了鲍鱼的年龄,或者非常接近鲍鱼的实际年龄。这些是模型以前从未见过的测试数据中的 5 个样本观察值。我们可以多取一些并执行相同的过程,看看我们的模型对鲍鱼年龄的预测效果如何。
在这份分析报告中,我们应用了各种多元回归技术和方法,但这并不意味着这个问题不能使用其他更先进的技术来解决。我们尝试应用一些超出本报告范围的先进方法,只是为了评估这些技术是否可以进一步改进我们的预测。
使用先进技术
- 在本节中,我们超越了传统的常见回归技术,并尝试应用一些先进的技术,看看我们是否可以创建一个具有较低测试 RMSE 的模型。
Elastic Net 弹性网络是一种正则化回归方法,它线性组合了 lasso 和 ridge 方法的 L1 和 L2 惩罚。
- 我们将尝试使用弹性网络来进一步优化我们的预测。
- 与 lasso 和 ridge 一样,截距不会受到惩罚,并且 glment 在内部负责标准化。
- 我们将使用与候选模型 3 (abalone\_int\_infant) 中相同的预测变量。
train( Rings ~ke\_ight, 4) + pol(Shell\_weigh, 4) + Infant + Diameter:poly(Shucked\_weight, 4) poly(Shuckedwight, 4:Infant,daa=abalone\_trai method = "glmnet", trControl = cv_10,
kable(result, digit
- 我们看到训练和测试 rmse 结果都低于我们的候选模型。
随机森林回归
随机森林或随机决策森林是一种用于分类、回归和任务的集成学习方法,它通过在训练时构建大量决策树并输出类别(在分类的情况下)或平均预测来进行操作(在回归的情况下)单个树。随机决策森林纠正了 Doe 决策树过度拟合训练数据集的习惯。
我们在这里实现了随机森林回归模型进行预测,看看我们是否可以进一步改进。随机森林回归模型的 RMSE 结果比候选模型的 RMSE Score 更好。
bm(Rig ~, daa aloeran stbton = "gausian", ntre =, inrtindeth 3, shrinkage = 0.01)
以下是随机森林方法的一些优缺点
它不对数据分布做出任何假设。
自动拟合高度非线性的交互。
通过接近度很好地处理缺失值。
即使对于大型数据集也能快速拟合。
已经观察到随机森林对某些具有嘈杂分类/回归任务的数据集过度拟合。
如果树不小就不容易解释
结果
本报告系统地处理了预测鲍鱼年龄的任务。探索了第一个数据集,发现了不寻常的观察结果,并对变量进行了适当的标准化。
我们从一个加法模型开始,该模型包含所有名为abalone_add的预测变量 。我们继续检查各种假设和测试,以进一步提高模型的准确性并降低 rmse。
然后,我们对因变量和预测变量进行了多次转换。当我们执行各种变量选择程序时,我们看到了 rmse 的改进。
经过我们的分析,我们找到了几个不错的候选模型,我们选择了模型 abalone\_int\_infant 作为我们的最佳模型。
以下是一些重要的关键点,说明了我们对这一结论的选择。
应用上述技术后,我们得出了 3 个可能的候选模型。
候选模型 1 是 abalone\_model\_int_bic ,这是对交互模型的各种选择过程的结果。我们看到这个模型 AIC 得分最低,rmse 排名第二。模型包含一些高共线预测变量,但当检查 rmse、预测和置信区间时,这是一个合适的选择。
候选模型 2 是 abalone\_int\_full。回想一下,详尽的搜索过程表明,当我们所有的预测变量,我们得到最好的模型。所以我们决定添加模型中交互项和多项式次数为 4 的所有预测变量。该模型具有最高的多重共线性,但从 rmse 和预测以及置信区间来看是非常合理的。
候选模型 3 是 abalone\_int\_infant。正如我们最初的数据分析表明分类变量 Sex 有 3 个因子水平。female, male 和 infant。水平 female 和 male 我们在分布方面极其相似,因此我们将这两个水平合二为一,使预测变量的总水平为 Sex 两个。由于这种级别的降低,与前两个模型相比,该模型可能是最简单的模型。我们对此进行了彻底的分析,最终模型具有相似的 rmse、预测和置信区间。这就是我们选择该模型作为候选模型之一的原因。
在以上 3 个候选模型中,候选模型 3 abalone\_int\_infant 稍微好一点,同时也不太复杂,因此它是我们进行此分析的首选模型。这有很多原因。让我们讨论一下。
以下是为此分析选择的模型的公式
lm(log(Rings) ~ Height + Diameter + poly(Whole_weight, 4) + poly(Viscera\_weight, 4) + poly(Shucked\_weight,4) + poly(Shell\_weight, 4) + Infant + Diameter:poly(Shucked\_weight, 4) + poly(Shucked_weight, 4):Infant
- 这是所有 3 个候选模型的测试/训练 RMSE 的快速比较。
- 下图显示了整个分析报告中所选模型的 rmse(以红色标记)、候选模型和模型的其余部分以及它们的测试 rmse 比较。我们可以清楚地看到,我们选择的模型 abalone\_int\_infant 也在
int infant
下面的图中重命名 ,其测试 rmse 最低。
- 这里一个明确的模式是,当模型更小、更简单时,测试 rmse 很高,但随着我们改进模型并开始变得更加灵活(因此模型长度更大),测试 rmse 下降。
- 以下是所选模型的正态性假设。我们可以清楚地看到,当我们用对数变换和交互项拟合模型时,常数变化和正态性假设变得越来越好。
这里要注意的一个关键点是,多重共线性的存在并没有真正影响预测(这是我们分析的目标),我们能够将其影响降低到一定程度。我们通过拟合与残差图验证了这一点,可以看出我们选择的模型具有以残差为中心的残差, 0 并且大致是恒定的变化。
如果我们使用平行坐标图绘制异常观测值,我们可以看到 Height 这些观测值与鲍鱼的平均高度相比更短。Whole\_weight 和 Viscera\_weight which as lower也是如此 。此外 weight.diff ,其中一些观察结果是否定的,这是我们在初始数据分析期间发现的。
下面的平行坐标图描绘了这些异常观察的特征,其中婴儿 = 1(橙色线)和非婴儿 [男/女] = 2(蓝线)。
现在,如果我们只是从我们的训练数据中抽取一个样本并使用平行坐标绘图,我们可以看到一般情况下 Height
, Whole_weight
并且 Viscera_weight
均匀分布。
- 我们还看到从数据集中删除异常观察进一步降低了测试 rmse,但是我们没有从我们的数据集中删除那些,因为它们似乎是有效的假设而不是极端情况。
- 我们可以看到的均方根误差得分
Elastic Net
和Random Forest
比我们的候选模型较低,但差别不是很显著。
讨论
让我们从我们正在分析的数据集开始讨论。从最初的汇总统计数据中,我们看到数据中存在非常高的共线性。几乎所有的变量都有很高的 vif 值。
我们所做的另一个重要观察是数据质量。我们发现在某些情况下没有正确记录观察结果。例如,对于 2 个观察,高度为 0,这实际上是不可能的。但是当我们查看整个观察结果和其他变量时,我们没有发现任何异常模式。我们意识到这可能是数据输入错误,因此我们决定将它们保留在我们的数据集中进行分析。以下是这 2 个观察结果。
我们还看到,有些观察结果不符合逻辑。预测器 Whole\_weight 被认为是预测的线性函数 Shucked\_weight, Viscera\_weight, Shell\_weight 并在去壳过程中损失的血液/水的加成未知质量。换句话说,所有其他权重预测变量的总和应该等于或小于 Whole_weight。但是我们发现 153 这样的观察违反了这个假设。仔细观察后,我们发现观察结果之间没有相似之处或任何模式,因此我们得出结论,这可能只是数据记录错误,因此这些观察结果并未从数据集中删除。以下是这些 153 观察结果。
我们在探索性分析中发现的下一个有趣趋势是预测Sex 因子水平的分布 。因子水平female 和 male 所有其他预测因子 都非常相似。此外,整体数据也大致均匀地分布在female、 male 和 的 水平值之间 infant。以下是水平之间的分布及其相对于其他预测变量和响应变量的总体分布。
- 在上面的箱线图中,我们可以看到
female
和 的分布形状male
对于所有预测变量都非常相似。 - 现在让我们来看看它的频率。
同样,它非常相似。这些结果为我们指明了另一个方向,通过将female 和 组合male 成一个级别名称作为 ,我们在数据集中创建了一个新变量 non-infant。所以现在新的分类变量有两个级别 infant 和 non-infant。在我们的一个候选模型中,我们使用这个新的分类而不是原始的来查看其效果。最后,这是我们选择的模型。
初始数据分析期间的下一个重要发现是预测变量之间存在非常高的多重共线性。这是有道理的,因为我们之前发现 Whole_weight 预测在某种程度上依赖于其他重量预测。Length 鲍鱼的 Diameter. 以下是 来自加法模型的模型系数的 变异膨胀因子值。
## SexI SexM Length Diameter Height ## 1.982824 1.400405 42.874862 44.907429 3.114493 ## Whole\_weight Shucked\_weight Viscera\_weight Shell\_weight ## 118.819537 29.579686 18.591058 22.182789
初始模型违反了恒定方差和正态性假设。使用各种方差稳定技术和转换,我们能够提出一个很好的模型。这些选定的候选模型使用了交互项、预测变量的多项式变换和响应变量的对数变换。
有趣的是,即使存在高度多重共线性,在模型选择过程中,我们最终还是选择了具有所有 8 个参数的模型。即所有的选择程序都表明当使用模型中的所有预测变量时,最低的 AIC 出现。尽管在我们使用各种响应和预测变量转换进行模型选择之后,我们能够在保持相似的测试 rmse 的同时稍微减小模型的大小。
我们看到我们几乎没有对降低测试 rmse 有轻微影响的异常观察,但由于这些观察不代表显着变化或移动模型系数,我们没有将它们从数据集中删除。
在数据的背景下谈论这个分析,我们可以从模型中看到, Length 变量可能不会成为预测鲍鱼年龄的重要因素。我们可以看到我们没有在我们的模型中选择这个。这种情况是有意义的,因为 Length 或多或少地相关 Diameter (即长度越大直径越大),并且由于我们已经将直径带入我们的模型,所以我们不需要鲍鱼数据集中的长度。
预测时另一个非常有趣的事实是,不能单独使用整个体重来预测年龄。我们知道,鲍鱼的去壳过程会使鲍鱼的血液和水分变干,然后再称重,不同阶段(去皮、去壳、干燥)的重量组合也是决定鲍鱼年龄的重要因素。
我们从测试数据中抽取了 10 个样本观察值,并使用我们选择的模型 (abalone\_int\_infant) 预测了年龄,平均而言,它正确预测了 10 次中的第 3 次。从所选模型 (2.2021) 的测试 rmse 值考虑出响应变量环的范围(1 到 29),我们认为我们的模型非常适合预测鲍鱼的年龄。