如何创建多个数据模型,然后选择评估为最佳拟合的模型?

2024-09-29 19:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在R中设置了一个训练测试函数,它接受一组数据,排除其中的某一部分(以排除模型对数据的过度拟合),然后在对另一半的模型进行测试之前,在剩余数据的大约一半上训练一个线性模型。在

我应该注意到,数据集是基于PCA得分的,这就是为什么线性模型被设置为包括七个PCA分量。在

splitprob = 0.7
trainindex = createDataPartition(scores$y, p=splitprob, list=F)
trainingset = scores[trainindex,]
testset = scores[-trainindex,]
model = glm(y ~ PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7, data=trainingset)
summary(model)
prediction = predict.lm(model, trainingset, se.fit=T) 

现在,我要做的是运行这个脚本多次,生成多个模型,然后选择一个或多个模型,这些模型将用于将来的预测。虽然我已经将函数设置为要运行一定次数,但我不知道如何设置它以便我可以比较不同的模型(可能是通过使用AIC),也不确定应该如何捕获模型的参数以便将它们导出到文本文件或.csv文件。在

我尝试实现glmulti包,但是由于在使用Java、rJava和Mac OsSX时出现了各种问题,我在正确安装它方面遇到了很多问题。有人能给我推荐其他解决这个问题的方法吗?在


Tags: 数据模型model线性测试函数list分量pca
1条回答
网友
1楼 · 发布于 2024-09-29 19:22:20

我每次都会更新(修改)答案,加入不同的预测因子

# build data

set.seed(1)
y = runif(100)
x = matrix(runif(1000), nrow = 100, ncol = 10)

函数用于重复的列车测试拆分,它返回所有迭代的摘要统计信息(它获取数据、迭代次数、公式和列车测试中的拆分百分比)

^{pr2}$

第一个模型只包含三个预测因子

first_mod = glm_train_test(y, x, num_iters = 100, Formula = "y ~ X1 + X2 + X3", split_percentage = 0.5)

输出示例

^{4}$

第二个模型也包括交互作用

second_model = glm_train_test(y, x, num_iters = 100, Formula = "y ~ X1 * X4 + X2 + X3", split_percentage = 0.5)

第二个模型的输出示例

second_model

$summary_aic
       Min.     1st Qu.      Median        Mean     3rd Qu.        Max.     std.dev 
-0.04232767 13.37572489 16.92720680 16.81206625 20.79921756 29.67830243  5.96477080 

$summary_rmse
      Min.    1st Qu.     Median       Mean    3rd Qu.       Max.    std.dev 
0.23912727 0.27026791 0.28117878 0.28177088 0.29526944 0.32674985 0.01819308

您可以使用适合您的数据的求值度量,还可以查看another stackoverflow question中“aic”和“bic”之间的差异。在

相关问题 更多 >

    热门问题