数据分享|用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化...

news2024/11/14 10:57:10

原文链接:http://tecdat.cn/?p=24127

鲍鱼是一种贝类,在世界许多地方都被视为美味佳肴点击文末“阅读原文”获取完整代码数据)。

介绍

相关视频

养殖者通常会切开贝壳并通过显微镜计算环数来估计鲍鱼的年龄。因此,判断鲍鱼的年龄很困难,主要是因为它们的大小不仅取决于它们的年龄,还取决于食物的供应情况。而且,鲍鱼有时会形成所谓的“发育不良”种群,其生长特征与其他鲍鱼种群非常不同。这种复杂的方法增加了成本并限制了其普及。我们在这份报告中的目标是找出最好的指标来预测鲍鱼的环,然后是鲍鱼的年龄。

数据集

背景介绍

这个数据集查看文末了解数据获取方式来自一项原始(非机器学习)研究。

从原始数据中删除了有缺失值的例子(大多数预测值缺失),连续值的范围被缩放用于NA(通过除以200)。在本分析中,我们将通过乘以200的方式将这些变量恢复到其原始形式。

数据集中的观测值总数:4176

数据集中的变量总数:8个

变量列表

下面是分析

“使用回归预测鲍鱼的年龄”

数据汇总与统计

balne$Sx <- s.acor(aalne$Sex)

edad214363c9495555f0a504b074c165.png

kale(abaoe\[1:10,\],fomt 'madw')

8a0482ceab26d39c769edfbd48076833.png

分类变量

8cf2c08ef2aea15cf1af07f575f9d07f.png

数值变量

6c2cb2150318d96a4e2febc3735280de.png

看一下数据集的摘要,我们可以看到,数据在雄性、雌性和婴儿这三个因素水平之间的分布是相当均匀的。

因变量

因果变量Rings包含在数据集中。它被测量为切割和检查鲍鱼后观察到的环的数量。虽然它不能直接表示一个给定的鲍鱼的年龄,但它可以或多或少完美地确定它。一个鲍鱼的年龄等于环数+1.5。由于这种关系是可靠的,环数将被视为因变量。数据中测量的环数从1到29不等,大多数鲍鱼的环数在5到15之间。分布也有轻微的正偏斜,但没有问题。(见下面的图)

配对图

pairs(aalone, es(colour =Sex, aph = 0.)

1ddf5b884a1bee737c8332aac79437e7.png

从配对图中观察到的情况。

首先要注意的是数据的高度相关性。例如,直径和长度之间的相关性非常高(约98.7)。


点击标题查阅往期内容

c6e69f42d0591096bffd71629e7a2e43.jpeg

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现

outside_default.png

左右滑动查看更多

outside_default.png

01

5dc9e28f348cd6ec4ccc7b92a4d9bdc3.png

02

6723e57412ce6f7f44a51f603381bb77.png

03

1fba6d5041d56ebe772085342420fc9f.png

04

649ff01fa1b249c02cd1c0f585900851.png

同样,Whole\_weight似乎与其他重量预测因子高度相关,是Shucked\_weight、Viscera\_weight和Shell\_weight之和。

其次,预测因子Sex的分布与所有其他预测因子的因子水平值雌性和雄性非常相似。

对于雌性和雄性的因子水平,分布的形状也是非常相似的。

我们可以考虑重新定义这一特征,将性别定义为婴儿与非婴儿(其中非婴儿=雌性和雄性都是)。

大多数的abalones环都在5到15之间。

数据质量

增加变量。我们将更新鲍鱼数据集,创建名为 "婴儿 "的新变量,它的值将基于性别变量的原始值。当性别变量为I时,它的值为I,否则为NI。
我们还观察到,预测高度的最小值是0,实际上这是不可能的,我们将调查这些观察结果,仔细研究。

##高度为0的数据质量检查
kable(abloe\[aban$Height == 0,\])

907eb80b0f8343b22c432f28be127278.png

我们看到,有两个观测值的高度可能没有被正确记录,因为其他预测因子似乎都有有效的值。另外,如果我们看一下预测因子Whole_weight,我们会发现这些值与其他观察值相比真的很小,而且低于第一个四分法。这告诉我们,这可能不是一个数据错误,因此我们不能将这些数据从我们的数据集中排除。

我们还将添加一个名为weight.diff的新变量。我们可以在摘要中看到有四种不同的重量测量方法,即Whole\_weight、Shucked\_weight、Viscera\_weight和Shell.weight。Whole\_weight是其他重量预测因子的线性函数,在剥壳过程中损失的水/血的质量未知。

str(aane, give.attr= FASE)

3e868ad7177fc421964ab8b88e57c86f.png

我们看到变量Whole\_weight应该是Shucked\_weight、Viscersa\_weight和Shell\_weight的线性函数,我们可以写成Whole\_weight = Shucked\_weight + Viscera\_weight + Shell\_weight + 剥壳过程中损失的未知水/血质量。

然而,当我们计算Whole_weight和其他重量变量之间的差异时,我们发现有153个观测值违反了这一规定,也就是说,这似乎不符合逻辑,可能是记录数据时的错误。

如果我们绘制新添加的weight.diff变量的直方图,我们可以看到,当weight.diff为负数时,有一些观察结果。

#确定没有正确记录的观察结果
#不符合逻辑的观察结果的柱状图
ggplt(aalone, as(x=weight.diff)) +,ill=rb(1,.4,0,.7), bins = 30)

9ad312379fb46ea1256e37acf503a902.png

我们来看看其中的一些记录。

nrow(ablon\[abaoneweihtdff < 0,\])

a46ef29796dabced90b638f9a00e7ac7.png

3772ab30a4431a4976ea806cf815faf3.png

请注意,总共有153个观测值的综合权重超过了Whole_weight。当我们看了10个这样的观测值时,似乎其他的值都是正确的,没有任何相似之处,所以我们确信这可能是一个数据输入错误。因此,我们将保留这些观察结果,以便进一步分析。

我们将首先在训练和测试中潜入我们的数据集。数据集将以70/30的比例在训练和测试之间进行分割,并随机选择观测值。

训练和测试拆分

set.ee(4)
#使用70/30方法在训练和测试中分割数据
ndxes <-spl(1:owabaone, size= 0.3  nrw(bone))
aboetrai <- ablon\[-indxs,\]
abetest <- abloneindxe,\]

我们已经开始用所有的变量拟合一个加法模型,并将研究参数的重要性。在此基础上,我们将修改我们的模型。现在我们将使用变量Sex的原始值,它的因子水平为F、I和M。

加性多元线性回归模型

summary(abneadd)

caaae57acaec188eb9c780fc4a05c730.png

在第一个加性模型中,注意因子水平雌性是性别变量的参考水平。

在用所有预测因子拟合加性模型后,我们可以看到,除了长度之外,测试统计显示所有变量都是显著的。正如我们之前从配对图中看到的那样,长度和直径的预测因子是高度相关的。我们还看到,不同重量的预测因子也是显著的,尽管它们应该是彼此的线性函数。

RMSE 分数

kable(rmse(aaloe_ad,"Aditve odel"))

b9659e5d4f2412bf3520a84df2504787.png

我们将计算方差膨胀因子,以发现数据集存在的多重共线性问题。

多重共线性

vif

8ac9cdec886307c594796f85737f9c59.png

我们看了所有变量的变量膨胀系数,似乎所有的预测因子都有多重共线性问题,除了我们之前在配对图中看到的性别和身高。预测因子Whole_weight的VIF值最高,因为它是其他体重的线性函数。
Whole_weight & Rings 之间的偏相关系数:我们将首先计算Whole_weight 变量和因变量(Rings)的偏相关系数 。

#检查高共线性关系变量的异方差性
wole\_wigt\_it <- lm(holweight ~Sx LnhDametr + eit +Sucked\_ght + Visrwght Shl\_wegh data=alotrin)

变量添加图

同样地,变量添加图将这些残差相互之间的关系可视化。将因变量的残差与预测的残差进行回归,并将回归线添加到图中,也是有帮助的。

cor(resid(whole_weight),resid(addwtouwolwigh))

45dc6d2562a7588bd3fcb23e1abd6489.png

cre\_plot(baead\_itht\_whe\_eght,wleeghtfit)

5de216cb5a69f84ceab86cc857c1f216.png

没有Whole_weight的加法模型的方差膨胀因子

但直径和长度的VIF还是很高。

vif(abaln\_ddithu\_whoeeiht)

49eae457afb0311a279820ac567b52e1.png

直径和环之间的偏相关系数

我们现在将 在模型中Diameter 没有Whole_weight变量的情况下计算变量和因变量(环) 的偏相关系数 。

mete\_i <- lm(Diameter ~ Sex + Length + Height + Shucked\_weight + Viscera\_weight + Shell\_weight)
 
abaoned\_sal <- lm(Rings ~ Sex + Length + Height + Shucked\_weight + Viscera\_weight + Shell\_weight)

这两个残差的相关性接近于零,这意味着未被性别、长度、高度、去壳重量、内脏重量和贝壳重量解释的环的变化与未被性别、长度、高度、去壳重量、内脏重量和贝壳重量解释的直径的变化的相关性很小。因此,在模型中加入直径可能没有什么好处。

cor(resid(damer\_it),resid(abonead\_mll))

b32bbc2cd1a0ae553fd6e3512230fd22.png

creaevarlt(ablone\_d\_smaldiaete_fi)

50a5d8fe0a0075c83526408e7ea9b540.png

没有 Whole_weight & Diameter 的加法模型的方差膨胀因子

vif(ablonadd_mll)

44b9d052381ba59edebb8fa1aaf386ff.png

现在的VIF要低得多。我们将同时使用abalone\_add和abalone\_add_small进行分析。

abalone\_add\_small 的 RMSE 分数

kable(rmse(abalone\_add\_small

84005da784bdd9cc795bd900b1939d71.png

方差分析 F 检验

anova(small,ablone_add)

1d0d8c0baf2ef7715415652c7aed6449.png

根据Anova检验,我们可以拒绝无效假设。

现在让我们尝试对加性模型进行AIC和BIC的参数选择。

#在加性模型上运行AIC和BIC
step(abae_add, dtonbackward" trace0)

9eaf005ffe8924867d5e85a879e72381.png

step(abalon_ad, direction="backward"

172afa6815d5ae5ef0ba7e5c2da823fb.png

我们使用之前Anova F测试中的最佳模型(abalone_add)运行了AIC和BIC方法,AIC和BIC都选择了没有Length预测器的相同模型。

我们选择了BIC的模型(因为两个模型都是一样的),并将绘制拟合与残差和QQ正态图。

加性模型假设

assumptions(aln\_odad\_bic,"baln_meddbic")

6a3860b1179d876ae6ec8744c1b07344.png

这里我们看到,拟合图与残差图表明,模型违反了恒定方差,似乎有一种模式,即残差随着拟合值的增加而增加。

正态QQ图也有肥尾,表明误差可能不是正态分布。

表明我们可能需要寻找改进这个模型。尽管多重共线性对预测没有影响,但这看起来是一个极端的案例,有一个明显的模式违反了模型的假设。这可以通过几种技术来实现,例如变量选择和转换。让我们来看看变量选择方法,看看哪些变量可以用来创建另一个不违反恒定方差和正态性假设的模型。

穷举搜索

#穷举搜索 
allabaone\_add<- sumr(ruetsings  Sex + Legth  Diamter + Hight + Whole\_eght + Shllweigh + Shucke\_weght + Viscea\_weigh , data=ablontra))

ff44827c2d6e11d7f6cd45547a4eb6b0.png

for(i in c(1:8)){
  vr\_nm\[i\]=sum(all\_abwh\[i,\])-1
}


plot(var\_num,all\_a)

d32b5dfefd1a18208c8910ff9327e5d0.png

(besr <- which.max(adjr2))

3003c1a70ccb1d32dbc0c395a6612586.png

alabaoe_ad$hch\[bsj2,\]

43af13ed9f4080e11b756e81dbcb8ef8.png

#画出模型参数与AIC的关系图

n * log(a\_aln\_dd$rs / n) + 2 * (2:p)

ab6abe7d506b6caaf172df69fcfb49c3.png

plot(aloe\_mo\_ac ~ I(2:), ylab = "AIC"
   ")

0b783b9252ca1fcd2487d34bd7d79113.jpeg

现在我们看到了一些有趣的结果。之前我们看到t检验显示一些预测因子是不显著的,但是当我们进行穷举搜索时,它表明我们确实需要所有的预测因子来创建AIC值最低的模型。从图中可以看出,AIC值随着8个参数的模型大小而下降,并且是最小的。我们将再次使用数据集中的所有预测因子来创建模型,并寻找变量转换技术。

接下来,为了稳定恒定的变化,我们将进行一些因变量和预测变量的转换。

因变量转换

Box-Cox 变换

稳定方差的方法之一是使用对数转换因变量。为了得到正确的顺序,我们使用了boxcox方法,该方法建议使用$0的值。因为在0的值上,对数可能性最大,而且区间非常接近。因此,我们将使用log(Rings)形式的转换,用于我们的加性模型。

boxcox(abloe_ad lambda = seq(-0.1, 0.1, by = 0.1))

df9abf79a0b67112a8720e19ed954f2c.png

Additive 模型与对数因变量转换

summary(abaone\_dd\_log)

5cda9ec147000a10eae0e80db9c933ff.png

将因变量进行对数转换后,我们看到t检验是显著的,它也增加了先前加法模型的调整r平方值。我们还看到,在这个模型中,几乎所有的预测因子都是显著的。让我们检查一下假设。

模型假设

下面的拟合与残差图和Q-Q图显示,对因变量进行对数转换后,结果有了很大的改善。

assumptionsba

38223fe19819c5c83fe1bff08bdbb80d.png

均方根分数

kable(log_rmse(abalo)

c0326f8a272e9ace52bea26ba7423ef9.png

然而,我们没有看到RMSE分数有任何改善。恒定方差问题似乎得到了改善,QQ图也看起来不错。

下一步,我们将对预测器进行一些转换,并评估模型,看看这是否有助于进一步提高预测的准确性。

Predictor 转换

回归分析

为了使我们能够进行任何预测器的转换,首先让我们看看每个预测变量和因变量的关系。转换将取决于数据的形状以及预测因子和因变量之间的关系。

scatter(abale\_tra$Lngt,abaone\_train$Rngs,"Lenth""Rngs"),

4a700216d301c821f72522a9fa20897b.png

我们可以看到环和预测指标长度、直径、高度的关系几乎是线性的。我们还可以看到,重量预测指标之间的关系并不是真正的线性关系,而是可以从多项式转换中受益。因此,让我们使用高阶多项式创建一个模型,即所有重量预测指标Whole\_weight、Viscera\_weight、Shucked\_weight和Shell\_weight。

多项式

在模型中使用二阶项后,模型假设相同。

asumptons(abloe\_dd\_oly2,"Poly2 Log Model")

f80cb53a6cf16bd3f28774e40c96bce5.png

均方根分数

kable(log_rmse(abaoly2,"Poly2 Log Moel)

8fd8bf8e6786fdb629c55ef3f98dee86.png

均方根分数

eff8a7554deddc47b13db149e4f99499.png

在这里,我们进行了一些变量转换。首先,我们按照Boxcox方法的建议对因变量进行了对数转换,并按照对数图的建议对权重预测因子进行了多项式转换。在拟合模型后,我们看到rmse比以前的模型要低,与以前拟合的加性模型相比,它也有更好的恒定方差和Q-Q图。由于我们已经进行了程度为2的多项式转换,让我们尝试拟合程度为3的另一个模型并检查其意义。

方差分析 F 检验

anova(abaloe\_addpoy2,aalon\_add_oy3)

e21339079b8b4011617c5799e67f071a.png

均方根分数

kable(log\_rmse(abaloe\_dd_pol4

1ef44393158b5bc54113b2ed53e43a3a.png

方差分析 F 检验

anova

13794fef872c00640b278dbef86819f8.png

均方根分数

kable(log_rmse(abloneaddpoly5

05368278daedafb4f1c7412a0bf43a33.png

方差分析 F 检验

anova

df9b5cd238b08933670d63a29b46b9cd.png

  • 我们再次看到测试对于较低的 rmse 是显着的。让我们尝试拟合度数为 6 的模型。

均方根分数

kable(log\_rmseaban\_dd_poly6

92ac5ad5c3deb97f5048175546e08329.png

方差分析 F 检验

anova

862c992df7de6ec8d711117a6d2878fb.png

现在在用多项式次数为 6 进行拟合后,我们看到即使 F 检验表明它很重要,但检验的 RMSE 上升了。这表明我们现在可能已经开始过度拟合数据,即我们的模型非常接近地拟合数据,这是我们不希望发生的。

在此之前,我们看到多项式次数为 5 和 4 的测试和训练 RMSE 之间存在非常细微的差异。测试 RMSE 几乎相同。因此,我们愿意牺牲相对于更简单模型的 RMSE 非常微小的改进(第三个小数点)。因此我们选择多项式次数为 4 的模型,即模型 abalone\_add\_poly4。

for(d in um_poly){
  abalone\_add\_polyestmodel(d)  
  rmse=g\_log\_mse(balone\_ad\_poly)
  train_rmse\[d\]rmse$tran
  test_re\[d\]=rse$st
}
plot(train_rmse

69465dc92e7f24f5913e12d5ff9e9f78.jpeg

我们看到多项式次数为 5 和 4 的测试和训练 RMSE 之间存在非常细微的差异。测试 RMSE 几乎相同。因此,我们愿意牺牲相对于更简单模型的 RMSE 非常微小的改进。因此我们选择多项式次数为 4 的模型,即模型 abalone\_add\_poly4。

既然我们已经选择了模型,让运行 AIC 和 BIC 方法进一步选择合适的模型,看看我们是否可以做进一步的改进。

现在让我们计算和比较高阶项的 RMSE,并绘制训练和测试数据的均方根误差。

多加法模型上的 AIC 和 BIC:

  • 既然我们已经选择了模型,让我们运行 AIC 和 BIC 方法来进一步选择合适的模型。

step(abane\_ad\_poy4, directin="backwrd", trac=FALSE)

Compare AIC 与 BIC 模型参数

_aic$call\[2\]

9a3c2c43d64bd8a9951beced8c9c9565.png

add_bic$call\[2\]

192a6f34540435b1905315e7f41f7d6a.png

Anove F 检验

anova(abalone_mode

81e75e3874ace2ed052ecce49e06201c.png

  • 选择的模型 BIC 中没有预测器 Length 。Anova F 检验的 p 值很大,因此我们无法拒绝原假设。abalone_model_add_bic 模型很重要,因此我们将继续推进并检查模型假设。

模型假设(AIC 和 BIC):

model_assumption

35d2f96ca940d256bbc52cc8373e8111.png

  • 在这种情况下,恒定方差和正态性看起来都不错。

RMSE 分数 - AIC

kable(log\_rmse(abaone\_mde_down')

32f142c06c3baf6c822d17561b25a270.png

RMSE 分数 - BIC

kable(log\_rmse(abalone\_model\_add\_bic,paste("Additive Model - Degree 4 - BIC")), digits = 4,format = 'markdown')

aff2aecc2b025f722d76040067c421b9.png

在使用AIC 和 进行变量选择后 BIC,我们从中选择了模型 BIC 并检查了 t 统计量和假设。有趣的是, BIC 模型丢弃了很少的预测变量,但也具有与我们开始使用的原始模型(多项式次数为 4 的模型)相似的测试 RMSE。这表明我们可以删除一些变量并仍然保持较低的 RMSE。这将我们带到下一个修改和引入BIC 上述模型选择的变量之间的交互项 。

来自BIC 模型的模型假设 也看起来更好。

接下来,我们将介绍交互项,并将尝试使用BIC 方法建议的预测变量来拟合模型 。

交互模型

log(Rings) ~  Height + Diameter + poly(Whole_weight, 4) +
  poly(Viscera\_weight, 4) + poly(Shucked\_weight,4) + poly(Shell\_weight, 4) + Sex + Diameter:poly(Shucked\_weight, 4) + poly(Shucked_weight,  4):Sex

RMSE 分数

754cab2c409ce8cf5d9bcfe247733302.png

方差分析 F 检验

anova

6a7e8cbfb29691230b97450fd6ab0bd3.png

在拟合交互模型并使用最佳可加模型执行 F 检验后,我们看到该检验表明交互模型是一个显着模型,具有改进的调整 r 平方值。RMSE 也变低了 因为它更好地解释了可变性,我们现在将选择交互模型并尝试在交互模型上运行 AIC 和 BIC。

同时,我们会比较交互模型的多个度数,以计算和比较高阶项的 RMSE,并绘制训练和测试数据的均方根误差。

for(d in num_poly){
  ablone\_int\_poly=test_itmodel(d)
 
  rmse=et\_lg\_rmseaaloneint_poly)
  trainrse_int\[d\]=rmse$train
  test\_mse\_it\[d\]=rme$tst
}
plot(tran\_rse\_n

82c3a0a42160d531b8833ebc90368478.jpeg

  • 我们可以看到,随着多项式次数的增加,RMSE 越来越低。尽管对于此分析而言,RMSE 的这种改进非常微小,我们可以忽略这种对模型简单性的改进。考虑到这一点,我们可以看到多项式次数为 4 的模型性能更好,因此我们将继续使用该模型。

交互模型上的 AIC 和 BIC

step(aalone_int, diretin="backar", trac=FALSE)
step(aalone_nt, diection="bacward", =loce=ALE)

f1c016375da7359f490218b6d0455983.png

bc2441843c18c83430ae91eb9679632f.png

RMSE 分数 - BIC/AIC

kable(log\_rmse(abalone\_model\_int\_bic,paste("Interaction Model - Degree 4 - BIC")), digits = 4,format = 'markdown')

5b33f340d0b19bfab8b0a0d73eb448c6.png

在我们的交互模型上运行 AIC 和 BIC 后,我们看到该模型选择了相同的模型。由于这是我们迄今为止看到的最好的模型之一,具有合理的复杂性,我们将把它视为我们比较的候选模型之一,作为本分析的最佳拟合模型。

谈到候选模型,在详尽的搜索过程中,我们已经看到,当我们使用所有预测变量时,模型附带了最低的 AIC。我们可以尝试构建一个模型,其中包含所有具有交互作用和多项式次数的预测变量,并与我们选择的第一个候选模型进行比较,看看它的表现如何。因此,让我们拟合一个包含所有预测变量的模型。

在最初的数据分析中,我们发现Sex 因子水平为 female 和 的分类变量的分布 male 极其相似。因此,我们决定将这两个因子水平合并为一个,并且总因子水平为 2 infant 和 non-infant。我们创建了新变量 Infant。这里 non-infant 代表 female 和 male 两者。我们也通过这种方法进行了分析(可以在本报告的附录部分找到)。

让我们看看 Infant 模型分析,看看这个模型如何与我们上面选择的模型相抗衡。

婴儿模型分析

我们讨论过针对此分析采用不同的方法。我们引入了一个新的分类预测变量名称 Infant。我们使用现有的Sex 具有 3 个因子水平的分类预测变量,并创建了一个具有 2 个因子水平的新分类预测变量 。我们这样做是因为我们从原始分类预测变量female 和 中 确定了 2 个因子水平上的相似分布 male。新的因素水平现在是 I (婴儿 = 雌性和雄性组合)和 NI (非婴儿)。

这个新分类的分析与上面的分析完全一样,所以我们将用最少的解释和细节快速进行这个分析。

summary(abae\_d\_nf)

33ed17aa5652af93f6dce20913b1d5dd.png

均方根分数

rmse  <- funcin(atual predicted) {
  sqrt(mean((actual - predicted ^ 2))
}

a928a6ea55e9a1c4c69c0fcc75c4519f.png

加性模型假设

model_assumption

0ac6e61e8328723641df508bdb3d9dbd.png

Box-Cox 变换

boxcox(abon_adinf,lmda  seq(-0.1, 0.1, by = 0.1))

b4d93fecfbebd2813027345946a6ed5c.png

具有对数因变量转换的附加婴儿模型

summary(abaln\_ad\_log)

6179ee09577073d4e49446dbbd6132b5.png

均方根分数

kable(log\_mseabalone\_d\_lo\_f,"")

1dc18dbcf6731de6fce4f27220cb6d13.png

加性模型假设

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

10efd3f73b7c099b8497e68e96c96a31.png

多项式模型假设

model_assumption

方差分析 F 检验

``````
anova

e3bba18707e780df57c1ef79319a945a.png

交互模型

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,"

1da78123347e0a6c07d6ae1a45a54017.png

交互模型假设

model_assumption

方差分析 F 检验

anova

70301ef9641b2ba6f33059ab56d1df21.png

在这里,我们选择性能最佳的交互模型作为我们的候选模型之一。该模型具有较低的复杂性以及最低的 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

f7a4a058b088d4f729a89f3246012d46.png

  • 候选模型2(abalone\_int\_\_candidate_full)

kable(log\_rmse(aalone\_int_l,pte

9c214bccee811b04f89182ef587d334b.png

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")

d572049a23726317199f8ff3788290c9.png

  • 候选模型 2 (abalone\_int\_full)

``````
model_assumption

33b42ec8b540b50b52a5f6fc6a219288.png

  • 候选模型 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

b1c87ce8ff3a5c6bebd84a3930e5afdc.png

我们立即注意到的第一件事是,我们最初在数据集中确定为不合逻辑或数据输入错误的观察结果很少。这些观察结果具有负权重差异,这是不可能的。这是有道理的,因为在记录此数据时可能会出现一些错误。

另一种模式是其中一些观察结果的整体权重与平均整体权重相比超过 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,

d734d27658d494cfdd22e88782c12abe.png

  • 有趣的是,所有在没有异常观察的情况下训练的模型在测试数据上产生了更好的 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 )

94828cceb480ba1e4885773ed11a2c29.png

我们可以从上面的例子中看到,我们从测试和模型中计算了环数和年龄,用于少数观察。我们看到我们的模型正确预测了鲍鱼的年龄,或者非常接近鲍鱼的实际年龄。这些是模型以前从未见过的测试数据中的 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,

d54186c1f9fae9984da1f809eab563ea.png

kable(result, digit

4d61ea988731ffa6119e9f840c2fea4e.png

  • 我们看到训练和测试 rmse 结果都低于我们的候选模型。

随机森林回归

随机森林或随机决策森林是一种用于分类、回归和任务的集成学习方法,它通过在训练时构建大量决策树并输出类别(在分类的情况下)或平均预测来进行操作(在回归的情况下)单个树。随机决策森林纠正了 Doe 决策树过度拟合训练数据集的习惯。

我们在这里实现了随机森林回归模型进行预测,看看我们是否可以进一步改进。随机森林回归模型的 RMSE 结果比候选模型的 RMSE Score 更好。

bm(Rig ~, daa  aloeran stbton = "gausian", ntre =, inrtindeth  3, shrinkage = 0.01)

c41d88b7cecda3f8e071e05f101c7f59.png

以下是随机森林方法的一些优缺点

它不对数据分布做出任何假设。

自动拟合高度非线性的交互。

通过接近度很好地处理缺失值。

即使对于大型数据集也能快速拟合。

已经观察到随机森林对某些具有嘈杂分类/回归任务的数据集过度拟合。

如果树不小就不容易解释

结果

本报告系统地处理了预测鲍鱼年龄的任务。探索了第一个数据集,发现了不寻常的观察结果,并对变量进行了适当的标准化。

我们从一个加法模型开始,该模型包含所有名为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 的快速比较。

2f22d25d300f3b32726df2a5e8290780.png

  • 下图显示了整个分析报告中所选模型的 rmse(以红色标记)、候选模型和模型的其余部分以及它们的测试 rmse 比较。我们可以清楚地看到,我们选择的模型 abalone\_int\_infant 也在int infant 下面的图中重命名 ,其测试 rmse 最低。

4b4a044c72c5e53b6a78971ff00a2381.jpeg

  • 这里一个明确的模式是,当模型更小、更简单时,测试 rmse 很高,但随着我们改进模型并开始变得更加灵活(因此模型长度更大),测试 rmse 下降。

  • 以下是所选模型的正态性假设。我们可以清楚地看到,当我们用对数变换和交互项拟合模型时,常数变化和正态性假设变得越来越好。

这里要注意的一个关键点是,多重共线性的存在并没有真正影响预测(这是我们分析的目标),我们能够将其影响降低到一定程度。我们通过拟合与残差图验证了这一点,可以看出我们选择的模型具有以残差为中心的残差, 0 并且大致是恒定的变化。

如果我们使用平行坐标图绘制异常观测值,我们可以看到 Height 这些观测值与鲍鱼的平均高度相比更短。Whole\_weight 和 Viscera\_weight which as lower也是如此 。此外 weight.diff ,其中一些观察结果是否定的,这是我们在初始数据分析期间发现的。

下面的平行坐标图描绘了这些异常观察的特征,其中婴儿 = 1(橙色线)和非婴儿 [男/女] = 2(蓝线)。
da5726f2a81121c42b191a30459dae85.png

现在,如果我们只是从我们的训练数据中抽取一个样本并使用平行坐标绘图,我们可以看到一般情况下 Height, Whole_weight 并且 Viscera_weight 均匀分布。

781b367a89f94939048a55c621dd3612.png

  • 我们还看到从数据集中删除异常观察进一步降低了测试 rmse,但是我们没有从我们的数据集中删除那些,因为它们似乎是有效的假设而不是极端情况。

  • 我们可以看到的均方根误差得分 Elastic Net 和 Random Forest 比我们的候选模型较低,但差别不是很显著。

3f2eef3a0fa160ac69db36eee74f14dd.png

讨论

让我们从我们正在分析的数据集开始讨论。从最初的汇总统计数据中,我们看到数据中存在非常高的共线性。几乎所有的变量都有很高的 vif 值。

我们所做的另一个重要观察是数据质量。我们发现在某些情况下没有正确记录观察结果。例如,对于 2 个观察,高度为 0,这实际上是不可能的。但是当我们查看整个观察结果和其他变量时,我们没有发现任何异常模式。我们意识到这可能是数据输入错误,因此我们决定将它们保留在我们的数据集中进行分析。以下是这 2 个观察结果。

82c689a08ad1efee2812b11943310e98.png

我们还看到,有些观察结果不符合逻辑。预测器 Whole\_weight 被认为是预测的线性函数 Shucked\_weight,  Viscera\_weight, Shell\_weight 并在去壳过程中损失的血液/水的加成未知质量。换句话说,所有其他权重预测变量的总和应该等于或小于 Whole_weight。但是我们发现 153 这样的观察违反了这个假设。仔细观察后,我们发现观察结果之间没有相似之处或任何模式,因此我们得出结论,这可能只是数据记录错误,因此这些观察结果并未从数据集中删除。以下是这些 153 观察结果。

a2dcd59ddba3fc9d90e0cd1bda1181d7.png

我们在探索性分析中发现的下一个有趣趋势是预测Sex 因子水平的分布 。因子水平female 和 male 所有其他预测因子 都非常相似。此外,整体数据也大致均匀地分布在female、 male 和 的 水平值之间 infant。以下是水平之间的分布及其相对于其他预测变量和响应变量的总体分布。

06edd0895f40192b329d337566bf94e2.png

194422c1319a3c9be33fff5aa2e6feb3.png

  • 在上面的箱线图中,我们可以看到female 和 的分布形状 male 对于所有预测变量都非常相似。

  • 现在让我们来看看它的频率。

f42c038cc4b1c69cae8391ec39cf0c92.png

同样,它非常相似。这些结果为我们指明了另一个方向,通过将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 (即长度越大直径越大),并且由于我们已经将直径带入我们的模型,所以我们不需要鲍鱼数据集中的长度。

预测时另一个非常有趣的事实是,不能单独使用整个体重来预测年龄。我们知道,鲍鱼的去壳过程会使鲍鱼的血液和水分变干,然后再称重,不同阶段(去皮、去壳、干燥)的重量组合也是决定鲍鱼年龄的重要因素。
f17a8d684045a6529a579915fa79ebff.png

我们从测试数据中抽取了 10 个样本观察值,并使用我们选择的模型 (abalone\_int\_infant) 预测了年龄,平均而言,它正确预测了 10 次中的第 3 次。从所选模型 (2.2021) 的测试 rmse 值考虑出响应变量环的范围(1 到 29),我们认为我们的模型非常适合预测鲍鱼的年龄。

数据获取

在下面公众号后台回复“鲍鱼”,可获取完整数据。

4c6142a5c47ea703efc9486686d189d0.jpeg

本文中分析的数据分享到会员群,扫描下面二维码即可加群!

53fbcf83d7b02c17eee508a6919c8621.png

e2dbcb9946ea3bae35b140bde72c1d97.jpeg

本文摘选R语言用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化,点击“阅读原文”获取全文完整资料。

点击标题查阅往期内容

R语言高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据(含练习题)

Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例

R语言Bootstrap的岭回归和自适应LASSO回归可视化

R语言Lasso回归模型变量选择和糖尿病发展预测模型

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

基于R语言实现LASSO回归分析

R语言用LASSO,adaptive LASSO预测通货膨胀时间序列

R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例

Python中的Lasso回归之最小角算法LARS

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现

r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

R语言实现LASSO回归——自己编写LASSO回归算法

R使用LASSO回归预测股票收益

python使用LASSO回归预测股票收益

d4bcd8e0c03bf592ae33af9db48254e2.png

1c4c856b03d956e7fa6c1bae89460e93.jpeg

205d267f94d84de3f7c616d8d0bf072d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.3 初始化数据

本节对应的视频讲解&#xff1a;B_站_视_频 https://www.bilibili.com/video/BV1qd4y1s7xk 布局完成后&#xff0c;就可以修改控件的名称&#xff0c;以及添加初始化数据 1. 变量命名 先修改各控件显示的的名称&#xff0c;做到 “见名知义”&#xff0c;方便写代码 修改完…

C语言开发《推箱子游戏》,亲自手把手教会大家

【C语言经典算法100道实战题】适合具备C语言基础语法的同学学习&#xff0c;提高编写程序的逻辑思维能力和算法设计能力专门精心设计。100个经典的算法供大家练习及配套对应的录播视频。为我们今后学习其它的编程语言和软件开发打下坚实的基础&#xff0c;让你在编码道路上如鱼…

【手把手】教你玩转消息中间件之RabbitMQ

1、微服务下现存的各种问题 服务调用问题 当两个服务调用时&#xff0c;可以通过传统的HTTP方式&#xff0c;让服务A直接去调用服务B的接口&#xff0c;但是这种方式是同步的方式&#xff0c;虽然可以采用SpringBoot提供的Async注解实现异步调用&#xff0c;但是这种方式无法…

gsva gsea ssgsea gaochao 使用GSVA方法计算某基因集在各个样本的表现

傻傻分不清!GSEA & GSVA有啥差别?史上最全教程来了! - 知乎 (zhihu.com) 文章发表于2013年,GSVA: gene set variation analysis for microarray and RNA-Seq data 同样是broad 研究生出品,其在2005年PNAS发表的gsea已经高达1.4万的引用了,不过这个GSVA才不到300。 G…

【边缘检测】基于模糊算法的图像边缘检测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步进步&#xff0c;matlab项目目标合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信息&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算…

实时数仓Flink生产环境部署+提交作业【步骤】

文章目录1、基础环境2、开发环境2.1、pom.xml2.2、log4j.properties2.3、测试用的代码2.3.1、Kafka工具2.3.3、Flink执行环境工具2.3.3、测试Flink读写Kafka2.3.4、测试FlinkSQL读写Kafka2.4、打包后上传到服务器3、生产环境3.1、Flink安装3.2、Flink on YARN下3种模式3.2.1、S…

Linux下POSIX信号量以及基于环形队列的生产消费模型

目录 一、POSIX信号量介绍 1. 信号量原理 2&#xff0c;初始化信号量 3,信号量销毁 4&#xff0c;信号量等待 5,发布信号量 二&#xff0c;基于环形队列的生产消费模型 1.基于单线程 2&#xff0c;测试&#xff1a; 3&#xff0c;基于多线程 4,测试 三&#xff0c;代…

故障转移,服务发现,负载均衡所运用的连接池

没错&#xff0c;说的就是连接池&#xff0c;玩互联网架构&#xff0c;连接池是必须要掌握的。 什么是连接池&#xff1f; 创建与管理连接缓冲池的技术&#xff0c;本质是资源复用&#xff0c;不用频繁创建与销毁连接&#xff0c;能提高性能。 画外音&#xff1a;数据库连接池…

Sentinel-2 L2A数据导入ENVI

Sentinel-2 L2A数据导入ENVI前言0 首先对SNAP进行设置1 用SNAP对Sentinel-2数据重采样2 在ENVI中打开重采样后的Sentinel-2数据3 其实不用重采样也行&#xff0c;ENVI可以直接打开解压后的Ssentinel-2文件&#xff0c;只需要将解压后的MTD_MSIL2A.xml拖进ENVI即可前言 Sentine…

揭秘倚天实例背后的硬核实力

2022云栖大会&#xff0c;阿里巴巴宣布自研CPU倚天710已大规模应用&#xff0c;阿里云未来两年20%的新增算力将使用自研CPU。11月15日&#xff0c;倚天710云实例上线并正式进入大规模应用阶段&#xff0c;现已应用于阿里巴巴集团核心业务&#xff0c;并服务科学研究、智能手机行…

[附源码]JAVA毕业设计天津城建大学校友录管理系统(系统+LW)

[附源码]JAVA毕业设计天津城建大学校友录管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

Nvidia力作:医学图像分割网络

来源&#xff1a;投稿 作者&#xff1a;梦飞翔 编辑&#xff1a;学姐 引自Unetr: Transformers for 3d medical image segmentation 1.序言 本文将以Nvidia团队最近提出的一种新的医学图像分割网络作为切入点&#xff0c;结合所用开源数据集&#xff0c;为各位同学提供一份从…

杨校老师课堂之Spring框架面试题【开发工程师面试前必看】

1.spring 中都用到了哪些设计模式?2.spring 中有哪些核心模块?3.说一下你理解的 IOC 是什么?4.spring 中的 IOC 容器有哪些?有什么区别?5.那 BeanFactory 和 FactoryBean 又有什么区别?6.Repository、Service、Compent、Controller它们有什么区别?7.那么 DI 又是什么?8…

C#学习笔记一 委托、事件

C# 委托、事件 1、Action委托、Func委托 namespace DelegateExample {class Program{static void main(string[] args){Calculator calculatornew Calculator();//Action委托Action Calnew Action(calculator.Report);//直接调用函数Calculator.Report();//通过委托调用函数Ca…

艾美捷RPMI-1640培养基含L-谷氨酰胺的功能和研究

Roswell Park Memorial Institute (RPMI) 1640 培养基起初是为了悬浮培养人白血病单层细胞而开发的。RPMI 1640 培养基被发现适用于多种哺乳动物细胞&#xff0c;包括 HeLa 细胞、Jurkat 细胞、MCF-7 细胞、PC12 细胞、PBMC 细胞、星形胶质细胞和癌细胞。针对广泛的细胞培养应用…

阿里影业的稳健业绩来源:科技+内容塑造韧性,应对市场变化

随着《阿凡达&#xff1a;水之道》&#xff08;简称&#xff1a;《阿凡达2》&#xff09;预售佳绩的显现&#xff0c;电影业的复苏已然箭在弦上。 12月7日&#xff0c;《阿凡达2》正式开启预售&#xff0c;灯塔专业版数据显示&#xff0c;其预售开启4小时后&#xff0c;总票房…

【工作随笔】验证经验、维度

背景&#xff1a;目前负责模块的验证工作基本进展完毕&#xff0c;包括所有功能验证、场景覆盖、用例编写调试和仿真、功能覆盖率收集、sva检测时序等&#xff0c;在当前的进度上和开发、验证同时对我的工作进行了评审。 问题&#xff1a;在评审中间讨论到一个当前tc实现的问题…

五、卷积神经网络CNN7(图像卷积与反卷积)

图像卷积 首先给出一个输入输出结果那他是怎样计算的呢&#xff1f; 卷积的时候需要对卷积核进行 180 的旋转&#xff0c;同时卷积核中心与需计算的图像像素对齐&#xff0c;输出结构为中心对齐像素的一个新的像素值&#xff0c;计算例子如下&#xff1a;这样计算出左上角(即第…

基于Dijkstra和A算法的机器人路径规划附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

JAVA SCRIPT设计模式--行为型--设计模式之Observer观察者模式(19)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…