【问题标题】:Scaling a continuous feature in the test set according to the train set根据训练集缩放测试集中的连续特征
【发布时间】:2022-11-15 01:08:20
【问题描述】:

我正在构建一个 GBM 分类器来预测某个目标变量。

我的数据包含许多连续变量,我只想使用 scale 函数缩放其中一个 (age)。我应该在训练集中缩放这个变量,然后在测试集中缩放它根据列车组,这样我就不会泄露信息。我的问题是如何在 R 中应用它?

我这样做的方法是分别缩放训练集和不太正确的测试集的年龄特征。这是我的代码(我使用 caret 包):

for (i in (1:10)) {
  print(i)
  set.seed(i)
  
  IND = createDataPartition(y = MYData$Target_feature, p=0.8, list = FALSE)
  TRAIN_set = MYData[IND, ]
  TEST_set = MYData[-IND,]
  
  TRAIN_set$age = scale(TRAIN_set$age)
  TEST_set$age = scale(TEST_set$age)
  
  GBMModel <- train(Target_feature~., data = TRAIN_set,
                    method = "gbm",
                    metric="ROC",
                    trControl = ctrlCV,
                    tuneGrid = gbmGRID,
                    verbose = FALSE
                    
  )
  
  
  AUCs_Trn[i] = auc(roc(TRAIN_set$Target_feature,predict(GBMModel,TRAIN_set, type='prob')[,1]))
  AUCs_Tst[i] = auc(roc(TEST_set$Target_feature,predict(GBMModel,TEST_set, type='prob')[,1]))
  
}

注意:我只想扩展 age 功能。

【问题讨论】:

    标签: r machine-learning scaling r-caret


    【解决方案1】:

    一种方法是通过训练集的均值和标准差手动缩放测试数据(相当于 scale() 所做的)。

    test$age = (test$age - mean(train$age) ) / sd(train$age) 
    
    

    【讨论】:

    • 正在写同样的想法,但太慢了:)
    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 2015-01-17
    • 2013-04-14
    • 2018-08-19
    • 2021-04-19
    • 1970-01-01
    • 2017-04-05
    • 2014-09-10
    相关资源
    最近更新 更多