标签: r-caret

使用e1071和插入符号的SVM模型的结果差异很大

我正在训练两个SVM模型,在我的数据上使用两个不同的包,并得到截然不同的结果.这是预期的吗?

model1使用e1071

library('e1071')
model1 <- svm(myFormula, data=trainset,type='C',kernel='linear',probability = TRUE)
outTrain <- predict(model1, trainset, probability = TRUE)
outTest <- predict(model1, testset, probability = TRUE)
train_pred <- attr(outTrain, "probabilities")[,2]
test_pred <- attr(outTest, "probabilities")[,2]
calculateAUC(train_pred,trainTarget)
calculateAUC(test_pred,testTarget)
Run Code Online (Sandbox Code Playgroud)

model2使用插入符号

model2 <- train(myFormula,data=trainset,method='svmLinear')
train_pred <- predict(model2, trainset)
test_pred  <- predict(model2, testset)
calculateAUC(train_pred,trainTarget)
calculateAUC(test_pred,testTarget)
Run Code Online (Sandbox Code Playgroud)

calculateAUC()是给定目标的预测值和实际值,我定义的函数来计算AUC值.我认为价值观为:

model1(e1071)

1
0.8567979

model2(插入符号)

0.9910193
0.758201

这是可能的吗?或者我做错了吗?

我可以提供样本数据,如果这将有所帮助

r machine-learning svm kernlab r-caret

8
推荐指数
2
解决办法
6201
查看次数

R包插入符号混乱矩阵缺少类别

我使用的功能confusionMatrix[Rcaret来计算一些数据我有一些统计数字.我一直把我的预测以及我的实际值放到函数中,以便tableconfusionMatrix函数中使用表格,如下所示:

table(predicted,actual)
Run Code Online (Sandbox Code Playgroud)

但是,有多种可能的结果(例如A,B,C,D),我的预测并不总是代表所有可能性(例如只有A,B,D).table函数的结果输出不包括缺少的结果,如下所示:

    A    B    C    D
A  n1   n2   n2   n4  
B  n5   n6   n7   n8  
D  n9  n10  n11  n12
# Note how there is no corresponding row for `C`.
Run Code Online (Sandbox Code Playgroud)

confusionMatrix函数无法处理缺失的结果并给出错误:

Error in !all.equal(nrow(data), ncol(data)) : invalid argument type
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使用table不同的函数来获取缺少的零行或使用confusionMatrix不同的函数,以便将缺失的结果视为零?

作为注释:由于我随机选择要测试的数据,有时候实际结果中也没有表示类别,而只是预测.我不相信这会改变解决方案.

r missing-data confusion-matrix r-caret

8
推荐指数
2
解决办法
2万
查看次数

插入符号中列车的并行执行失败,未找到功能

昨天我更新了我的R包,从那以后并列执行列车功能失败了.

似乎从工作者中调用的某些函数不可用.这些函数至少是flatTable和probFunction.

我在生产机器上遇到了这个问题,并且能够在干净的Windows 7 x64 VM上重现它.

我在下面添加了一个最小的工作示例 亲爱的stackoverflow用户:非常感谢!

# R 3.0.2 x64, RStudio Version 0.98.490, Windows 7 x64

data(iris)
library(caret) # 6.0-21
library(doParallel) # 1.0.6

model <- "rf"

# Fail
?probFunction
?flatTable

fitControl <- trainControl(
  method = "repeatedcv"
  , number = 5  ## 5-fold CV
  , repeats = 1   ## repeated one times
  , verboseIter =TRUE
)

#### Sequential Version ####

# Runs
train(Species ~ ., data = iris, method = model, trControl = fitControl)

#### Parallelized version ####

# …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r r-caret

8
推荐指数
1
解决办法
7407
查看次数

R中k-NN回归的问题

我正试图从包中插入knnreg.出于某种原因,这个训练集有效:

> summary(train1)
       V1                V2             V3             
 13     : 10474   1      :  6435   7      :  8929     
 10     : 10315   2      :  6435   6      :  8895     
 4      : 10272   3      :  6435   9      :  8892     
 1      : 10244   4      :  6435   10     :  8892     
 2      : 10238   7      :  6435   15     :  8874     
 24     : 10228   8      :  6435   40     :  8870                        
 (Other):359799   (Other):382960   (Other):368218   
Run Code Online (Sandbox Code Playgroud)

虽然这个不起作用:

> summary(train2)
        V1              V2               V3                   V4      
 13     : 10474   1      :  6436   7      :  8929   Christmas …
Run Code Online (Sandbox Code Playgroud)

regression r knn r-caret

8
推荐指数
1
解决办法
1894
查看次数

使用插入符号进行生存分析(随机生存林)

有没有办法caret用于生存分析.我真的很喜欢它的易用性.我尝试使用party包在插入符号列表中的随机生存林.

这有效:

library(survival)
library(caret)
library(party)


fitcforest <- cforest(Surv(futime, death) ~ sex+age, data=flchain,
                     controls = cforest_classical(ntree = 1000))
Run Code Online (Sandbox Code Playgroud)

但是使用caret我得到一个错误:

fitControl <- trainControl(## 10-fold CV
  method = "repeatedcv",
  number = 10,
  repeats = 2,
)

cforestfit <- train(Surv(futime, death) ~ sex+age,data=flchain, method="cforest",trControl = fitControl)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Error: nrow(x) == length(y) is not TRUE
Run Code Online (Sandbox Code Playgroud)

有没有办法让这些Surv对象与插入符号一起工作?我可以使用其他以生存分析为导向的包装吗?

谢谢

r r-caret

8
推荐指数
1
解决办法
1879
查看次数

Caret包 - 定义阳性结果

使用Caret软件包进行机器学习时,我对Caret默认的"正面"结果选择感到震惊,即二元分类问题中结果因素的第一级.

包裹说它可以设置为替代级别.任何人都能帮助我确定积极的结果吗?

感谢您

r r-caret

8
推荐指数
1
解决办法
9072
查看次数

R插入符号:最大限度地提高手动定义的训练(分类)正类的灵敏度,

精简版:

有没有办法指导插入符号训练回归模型

  1. 使用用户定义的标签作为"正类标签"?
  2. 在训练期间(而不是ROC)优化模型的灵敏度?

长版:

我有一个数据帧

> feature1 <-                 c(1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0)
> feature2 <-                 c(1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1)
> feature3 <-                 c(0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0)
> TARGET <- factor(make.names(c(1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1)))
> df <- data.frame(feature1, feature2, feature3, TARGET)
Run Code Online (Sandbox Code Playgroud)

模型训练就像实施一样

> ctrl <- trainControl(
+     method="repeatedcv",
+     repeats = 2)
> 
> tuneGrid <- expand.grid(k = c(2,5,7))
> 
> tune <- train(
+     TARGET ~ .,
+     metric = '???',
+     maximize = TRUE,
+     data = df,
+     method = "knn", 
+     trControl = ctrl, 
+     preProcess = c("center","scale"), …
Run Code Online (Sandbox Code Playgroud)

r r-caret

8
推荐指数
1
解决办法
2231
查看次数

randomForest()和插入符号randomForest(method ="rf")的结果不同

我是新手,我只是想确保我完全理解它在做什么.为此,我一直在尝试使用caret的train()函数复制我从randomForest()模型得到的结果,方法="rf".不幸的是,我无法得到匹配的结果,我想知道我在忽视什么.

我还要补充一点,鉴于randomForest使用bootstrapping生成样本以适应每个ntree,并根据out-of-bag预测估计错误,我对指定"oob"和"boot"之间的区别有点模糊"在trainControl函数调用中.这些选项生成不同的结果,但都不匹配randomForest()模型.

虽然我已经阅读了插入符号包网站(http://topepo.github.io/caret/index.html),以及看起来可能相关的各种StackOverflow问题,但我还是无法弄清楚为什么caret method ="rf"模型从randomForest()产生不同的结果.非常感谢您提供的任何见解.

这是一个可复制的示例,使用MASS包中的CO2数据集.

library(MASS)
data(CO2)

library(randomForest)
set.seed(1)
rf.model <- randomForest(uptake ~ ., 
                       data = CO2,
                       ntree = 50,
                       nodesize = 5,
                       mtry=2,
                       importance=TRUE, 
                       metric="RMSE")

library(caret)
set.seed(1)
caret.oob.model <- train(uptake ~ ., 
                     data = CO2,
                     method="rf",
                     ntree=50,
                     tuneGrid=data.frame(mtry=2),
                     nodesize = 5,
                     importance=TRUE, 
                     metric="RMSE",
                     trControl = trainControl(method="oob"),
                     allowParallel=FALSE)

set.seed(1)
caret.boot.model <- train(uptake ~ ., 
                     data = CO2,
                     method="rf",
                     ntree=50,
                     tuneGrid=data.frame(mtry=2),
                     nodesize = 5,
                     importance=TRUE, 
                     metric="RMSE",
                     trControl=trainControl(method="boot", number=50),
                     allowParallel=FALSE)

 print(rf.model)
 print(caret.oob.model$finalModel) 
 print(caret.boot.model$finalModel)
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

打印(rf.model)

      Mean of squared residuals: …
Run Code Online (Sandbox Code Playgroud)

r random-forest r-caret

8
推荐指数
1
解决办法
2492
查看次数

插入符号 - 调整参数网格应该有列mtry

我正在使用此代码:

    mtry <- round(sqrt(18), 0)

gbmGrid <- expand.grid(
              interaction.depth = c(1, 2, 3, 4, 5, 6)
            , n.trees = seq(10, 10000, by = 100)
            , shrinkage = 0.01
            , n.minobsinnode = c(5, 10, 20, 30)
            , distribution = 'gaussian'
            , method = 'gbm'
            , mtry = mtry
    )

    fitControl <- trainControl(
                method = "repeatedcv"
                , number = 2
                , repeats = 3
        )

    gbmFit1 <- train(

                     Y ~

                      X1
                    + X2

                    , data = Train

                    , trControl = fitControl
                    , …
Run Code Online (Sandbox Code Playgroud)

r r-caret

8
推荐指数
1
解决办法
2641
查看次数

R公制RMSE不适用于分类模型

我正在尝试使用带有xgboost的R调查我的模型.一般来说训练模型运作良好,但是考虑到它是度量的一些问题.

我试图为类列设置一个因子,但仍然没有结果.

我的数据

ID  var1var2TARGET
1   5   0   1
2   4   3   1
3   4   2   0
4   3   1   0
5   2   4   1
6   1   2   1
7   5   3   1
8   4   1   0
9   4   1   0
10  2   4   1
11  5   5   1
Run Code Online (Sandbox Code Playgroud)

为此我做

train <- read.csv()
train.y <- train$TARGET
train$TARGET <- NULL
train$ID <- NULL
train.y <- lapply(train.y, factor)
Run Code Online (Sandbox Code Playgroud)

然后我准备模型参数

xgb_grid_1 = expand.grid(
  nrounds = 1000,
  eta = c(0.01, 0.001, 0.0001),
  max_depth = …
Run Code Online (Sandbox Code Playgroud)

r r-caret

7
推荐指数
1
解决办法
7483
查看次数