使用R语言模拟数据集进行模型选择

我编写了一个代码,用于在R中模拟数据集,以观察机器学习中后向选择的工作原理。我生成了poly()函数来编写多项式函数,然后希望使用Cp、BIC和调整后的R^2来选择合适的多项式。

代码如下:

 ###生成数据集 set.seed(1) X = rnorm(100) eps = rnorm(100) beta0 = 3 beta1 = 2 beta2 = -3 beta3 = 0.3 Y = beta0 + beta1 * X + beta2 * X^2 + beta3 * X^3 + eps library(leaps)data.full = data.frame(y = Y, x = X)mod.full = regsubsets(y ~ poly(x, 10, raw = T), data = data.full, nvmax = 10)mod.summary = summary(mod.full)### 查找最佳Cp、BIC和调整后R^2的模型大小which.min(mod.summary$cp)

对于Cp、BIC和调整后的R^2,我得到了应有的三次多项式模型

然而,现在我想模拟100个数据集,并查看在多少个数据集中我得到了正确的模型。我模拟了100个数据集,但现在对于每个度量标准,我都没有得到三次多项式。我不太明白我做错了什么。我的模拟代码是:

###生成100个数据集data <- replicate(100, rnorm(n=100))epsilon <- replicate(100,rnorm(n=100))###公式(与之前相同) Y = beta0 + beta1 * data + beta2 * data^2 + beta3 * data^3 + epsilon data.full = data.frame(y = Y, x = data) ###使用多项式项 mod.bwd = regsubsets(data.full$y.1 ~ poly(data.full$x.1, 10, raw = T), data = data.full, nvmax = 10, method = "backward")bwd.summary = summary(mod.bwd)which.min(bwd.summary$cp)which.min(bwd.summary$bic)which.max(bwd.summary$adjr2)

对于给定的子集,Cp、BIC和调整后的R^2给出了不同的结果。例如,使用y.1和x.1(模拟中的第一个数据集)得到以下结果:

which.min(bwd.summary$cp): 7

which.min(bwd.summary$bic): 4

which.max(bwd.summary$adjr2): 9

有人能帮我指出我在模拟这100个数据集时做错了什么吗?


回答:

如果我正确地阅读了你的代码,你在同一个模拟数据集上运行了100次模型,而不是所有100个模拟数据集,以下方法应该可以解决这个问题:

set.seed(42)###生成100个数据集data <- replicate(100, rnorm(n=100))epsilon <- replicate(100,rnorm(n=100))###公式(与之前相同) Y = beta0 + beta1 * data + beta2 * data^2 + beta3 * data^3 + epsilon data.full = data.frame(y = Y, x = data)res <- lapply(1:100, function(i){ ###使用多项式项 mod.bwd = regsubsets(data.full[[i]] ~ poly(data.full[[100+i]], 10, raw = T), data = data.full, nvmax = 10, method = "backward")bwd.summary = summary(mod.bwd)c(which.min(bwd.summary$cp),which.min(bwd.summary$bic),which.max(bwd.summary$adjr2))})res <- do.call(rbind, res)

使用这个随机数种子,可以得到一些行,其中所有标准都选择了正确的模型。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注