我是R的新手,我想使用插入包实现随机森林算法.
是否有任何有用的教程,一步一步?
我正在尝试使用该caret包来处理模型的alpha级别glmnet。问题是我使用的数据都是虚拟变量,我不想glmnet标准化它们。通常,如果我只是使用glmnet或单独使用cv.glmnet,我会添加
standardize = FALSE
Run Code Online (Sandbox Code Playgroud)
是否有caret关闭标准化的设置?
以下代码:
require(caret)
require(plyr)
portuguese_scores = read.table("https://raw.githubusercontent.com/JimGorman17/Datasets/master/student-por.csv",sep=";",header=TRUE, stringsAsFactors = FALSE)
portuguese_scores <- portuguese_scores[,!names(portuguese_scores) %in% c("school", "age", "G1", "G2")]
median_score <- summary(portuguese_scores$G3)['Median']
portuguese_scores$score_gte_than_median <- as.factor(median_score<=portuguese_scores$G3)
portuguese_scores <- portuguese_scores[,!names(portuguese_scores) %in% c("G3")]
portuguese_scores$sex <- as.numeric(mapvalues(portuguese_scores$sex, from = c("M", "F"), to = c(0, 1)))
portuguese_scores$address <- as.numeric(mapvalues(portuguese_scores$address, from = c("U", "R"), to = c(0, 1)))
portuguese_scores$famsize <- as.numeric(mapvalues(portuguese_scores$famsize, from = c("LE3", "GT3"), to = c(0, 1)))
portuguese_scores$Pstatus <- as.numeric(mapvalues(portuguese_scores$Pstatus, from = c("T", "A"), to = c(0, 1)))
portuguese_scores$Mjob <- as.numeric(mapvalues(portuguese_scores$Mjob, from = c("at_home","health","other","services","teacher"), to = …Run Code Online (Sandbox Code Playgroud) 我正在使用 R(和 Rstudio)rf从caret包中训练模型。训练数据集是一个包含 76k 行和 291 列的数据框。我的代码如下:
library(caret)
myTrControl <- trainControl(method = "repeatedcv",
number = 5,
repeats = 3,
p = 0.75,
classProbs = TRUE,
summaryFunction = twoClassSummary)
set.seed(64)
myRF <- train(x = myTrain[ , -c(1, 291)],
y = myTrain$TARGET,
data = myTrain,
method = "rf",
metric = "ROC",
maximize = TRUE,
trControl = myTrControl)
Run Code Online (Sandbox Code Playgroud)
它已经运行了 24 小时。有什么方法可以估计需要多长时间?
我读的caret文件,我应该可能已经设置verboseIter = TRUE在trainControl拿到发生了什么事情,而其计算的一些信息。我想没有“同时计算”的方式来请求进度信息,对吗?
而第三个问题:是否有内的任何其他参数trainControl和train我应该经常使用来获取计算的信息,而这是在进步吗?
谢谢!
我有以下 data.table,其中每个唯一x值都与一个唯一y值相关联。然后我强制一个x值作为NAk 最近邻练习的目的:
dt <- data.table(x = rep(c(1:4), 3),
y = rep(c("Brandon", "Erica", "Karyna", "Alex"), 3))
dt[3, 1] <- NA
print(dt)
# x y
#1: 1 Brandon
#2: 2 Erica
#3: NA Karyna
#4: 4 Alex
#5: 1 Brandon
#6: 2 Erica
#7: 3 Karyna
#8: 4 Alex
#9: 1 Brandon
#10: 2 Erica
#11: 3 Karyna
#12: 4 Alex
Run Code Online (Sandbox Code Playgroud)
参考这个问题的第一个答案,我创建了一个二进制矩阵,dt$y如下所示:
dt.a <- model.matrix(~ y -1 , data …Run Code Online (Sandbox Code Playgroud) 我正在通过 caret::train 函数使用 rpart 构建决策树。我想要做的是将 rpart 的 minsplit 参数设置为等于 1,以便之后用 cp 修剪它。我从这里得到的是参数应该在 train 函数的 ... 中传递。但这不起作用。一个最小的可重现示例:
mod1 <- train(Species ~ ., iris, method = "rpart", tuneGrid = expand.grid(cp = 0), minsplit=1)
mod2 <- rpart(Species ~ ., iris, cp=0, minsplit=1)
Run Code Online (Sandbox Code Playgroud)
我得到的是 mod1$finalModel 和 mod2 完全不同。我希望 mod1$finalModel 就像 mod2(即完全过拟合)。我不能在 tuneGrid 上传递参数,因为它只接受一个 cp 列。
所以我的问题是:是否有插入符号在 train 函数中传递参数 minsplit=1 然后交叉验证 cp 参数?
我的问题与插入符号中提出的问题非常相似 :结合 createResample 和 groupKFold
唯一的区别:我需要在分组后创建分层折叠(也重复 10 次)而不是自举重采样(据我所知没有分层),以便将它与插入符号的 trainControl 一起使用。以下代码使用 10 倍重复的 CV,但我无法包含基于“ID” ( df$ID)的数据分组。
# creating indices
cv.10.folds <- createMultiFolds(rf_label, k = 10, times = 10)
# creating folds
ctrl.10fold <- trainControl(method = "repeatedcv", number = 10, repeats = 10, index = cv.10.folds)
# train
rf.ctrl10 <- train(rf_train, y = rf_label, method = "rf", tuneLength = 6,
ntree = 1000, trControl = ctrl.10fold, importance = TRUE)
Run Code Online (Sandbox Code Playgroud)
这是我的实际问题:我的数据包含许多组,每个组由 20 个实例组成,具有相同的“ID”。因此,当使用 10 倍 CV 重复 10 次时,我在训练中得到了一组实例,在验证集中得到了一些实例。我想避免这种情况,但总的来说,我需要对预测值 ( …
我使用 Caret 包中的随机森林方法对我的数据进行了交叉验证,R 表示最终模型是使用 mtry=34 构建的,这是否意味着在最终随机森林(由交叉验证产生)中只有 34 个参数变量在我的数据集中用于在树中分裂?
> output
Random Forest
375 samples
592 predictors
2 classes: 'alzheimer', 'control'
No pre-processing
Resampling: Cross-Validated (3 fold)
Summary of sample sizes: 250, 250, 250
Resampling results across tuning parameters:
mtry Accuracy Kappa
2 0.6826667 0.3565541
34 0.7600000 0.5194246
591 0.7173333 0.4343563
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mtry = 34.
Run Code Online (Sandbox Code Playgroud) 我的目标是使用 R 执行交叉验证。第 1-31 列是特征,第 32 列是输出类。
我从 .xls 文件加载数据。但是我对 rfeControl 功能有严重的问题。请看我的代码:
install.packages('e1071')
library(e1071)
install.packages('readxl')
library(readxl)
library(rpart)
install.packages('randomForest')
library(randomForest)
install.packages('party')
library(party)
install.packages('mlbench')
library(mlbench)
install.packages('caret')
library(caret)
#----------------------------------------------------------
# Import Data
getwd()
setwd("working_directory_name")
df <- read_excel('test_data.xls')
#----------------------------------------------------------
# Get Information on your data (optional)
str(df)
table(df$F32)
#----------------------------------------------------------
install.packages('XLConnect')
library(XLConnect)
# Recursive Feature Selection Approach
control <- rfeControl(functions=rfFuncs, method="cv", number=5)
#x = as.vector(unlist(df[, 2:29]))
#y = as.vector(unlist(df[, 32]))
# Run the algorithm (Features, Ground Truth, Testes SetSizes)
#results <- rfe(x, y, sizes=c(1:28), rfeControl=control) …Run Code Online (Sandbox Code Playgroud) 在 R 包 caret 中,我们是否可以使用函数 createDataPartition()(或 createFolds() 进行交叉验证)基于多个变量创建分层训练和测试集?
以下是一个变量的示例:
#2/3rds for training
library(caret)
inTrain = createDataPartition(df$yourFactor, p = 2/3, list = FALSE)
dfTrain=df[inTrain,]
dfTest=df[-inTrain,]
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,训练集和测试集按“df$yourFactor”分层。但是是否可以使用多个变量(例如“df$yourFactor”和“df$yourFactor2”)进行分层?以下代码似乎有效,但我不知道它是否正确:
inTrain = createDataPartition(df$yourFactor, df$yourFactor2, p = 2/3, list = FALSE)
Run Code Online (Sandbox Code Playgroud)