我正在训练两个SVM模型,在我的数据上使用两个不同的包,并得到截然不同的结果.这是预期的吗?
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 <- 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值.我认为价值观为:
1
0.8567979
0.9910193
0.758201
这是可能的吗?或者我做错了吗?
我可以提供样本数据,如果这将有所帮助
我使用的功能confusionMatrix在[R包caret来计算一些数据我有一些统计数字.我一直把我的预测以及我的实际值放到函数中,以便table在confusionMatrix函数中使用表格,如下所示:
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包,从那以后并列执行列车功能失败了.
似乎从工作者中调用的某些函数不可用.这些函数至少是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) 我正试图从包中插入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) 有没有办法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对象与插入符号一起工作?我可以使用其他以生存分析为导向的包装吗?
谢谢
使用Caret软件包进行机器学习时,我对Caret默认的"正面"结果选择感到震惊,即二元分类问题中结果因素的第一级.
包裹说它可以设置为替代级别.任何人都能帮助我确定积极的结果吗?
感谢您
精简版:
有没有办法指导插入符号训练回归模型
长版:
我有一个数据帧
> 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) 我是新手,我只是想确保我完全理解它在做什么.为此,我一直在尝试使用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) 我正在使用此代码:
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) 我正在尝试使用带有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)