r语言 - 撤消创建数据分区排序



我是数据科学的新手,正在尝试完成这个项目。我有一个数据框(从这里 https://www.kaggle.com/c/house-prices-advanced-regression-techniques(与分配的训练集和测试集(1:1460,1461:2919(,由于我在尝试预测时遇到的错误,我被建议使用createDataPartition((

> predSale <- as.data.frame(predict(model, newdata = test))
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = 
object$xlevels) : factor MSSubClass has new levels 150

但是现在使用 createDataPartition 时,它会混合我的原始训练集和测试集,我需要按照特定的顺序提交 Kaggle 提交。我已经在小插曲中阅读过,看起来有一个关于 returnTrain 的论据。我不确定这是否可以使用(我不完全理解它(,但最终我想知道是否有办法撤消排序,以便我可以使用原始排序集提交我的项目。

test$SalePrice <- NA
combined <- rbind(train, test)
train <- combined[1:1460, ]
test <- combined[1461:2919, ]
#____________Models____________
set.seed(666)
index <- createDataPartition(paste(combined$MSSubClass,combined$Neighborhood,
combined$Condition2,combined$LotConfig,
combined$Exterior1st,combined$Exterior2nd,
combined$RoofMatl,combined$MiscFeature,combined$SaleType))$Resample
train <- combined[index,]
test <- combined[-index,]

model <- lm(SalePrice ~., train)
predSale <- as.data.frame(predict(model, newdata = test))
SampleSubmission <- round(predSale, digits = 1)
write.csv(SampleSubmission, "SampleSubmission.csv")

谢谢!!如果您有任何需要回答的问题,请告诉我,我想我已经提供了所有内容(我不确定您是否需要完整的代码还是什么,我很乐意编辑更多需要的东西(?

您不会在组合的 kaggle 数据集上使用createDataPartition。您需要将这些数据集分开。这就是 kaggle 提供它们的原因。如果要合并它们,则必须在完成数据清理后再次拆分它们。

但您遇到的问题是,模型看不到检验数据集中的因子水平。kaggle上有多篇关于这个问题的帖子。但我必须说kaggle的搜索引擎很糟糕。

在 kaggle 比赛中,有些人在字符列上使用以下代码将它们转换为数字(例如,将数据与 xgboost 一起使用(。此代码假定您使用 stringAsFactors = False 加载了数据集。

for (f in feature.names) {
if (class(train[[f]])=="character") {
levels <- unique(c(train[[f]], test[[f]]))
test[[f]]  <- as.integer(factor(test[[f]],  levels=levels))
train[[f]] <- as.integer(factor(train[[f]], levels=levels))
}
}

其他人使用以下版本来创建训练数据集中的所有级别名称。

levels(xtrain[,x]) <- union(levels(xtest[,x]),levels(xtrain[,x]))

还有更多方法可以解决这个问题。

当然,这些解决方案对Kaggle来说很好,因为这可能会给你更好的分数。但从严格意义上讲,这是一种数据泄漏。在生产环境中使用它,是自找麻烦。在许多情况下,您可能事先不知道所有可能的值,当遇到返回缺失值而不是预测的新值时,这是一个更明智的选择。但这种讨论充满了完整的研究文章。

相关内容

  • 没有找到相关文章

最新更新