我一直在使用GBM通过插入符号没有问题,但是从我的数据框中删除一些变量,当它开始失败.我已经尝试了所提到的包的github和cran版本.
这是错误:
> fitRF = train(my_data[trainIndex,vars_for_clust], clusterAssignment[trainIndex], method = "gbm", verbose=T)
Something is wrong; all the Accuracy metric values are missing:
Accuracy Kappa
Min. : NA Min. : NA
1st Qu.: NA 1st Qu.: NA
Median : NA Median : NA
Mean :NaN Mean :NaN
3rd Qu.: NA 3rd Qu.: NA
Max. : NA Max. : NA
NA's :9 NA's :9
Error in train.default(my_data[trainIndex, vars_for_clust], clusterAssignment[trainIndex], :
Stopping
In addition: There were 50 or more warnings …Run Code Online (Sandbox Code Playgroud) 我正在构建一个预测模型,并且正在使用该mice程序包来训练我的训练集中的NA.由于我需要为我的测试集重复使用相同的插补方案,如何将其重新应用于我的测试数据?
# generate example data
set.seed(333)
mydata <- data.frame(a = as.logical(rbinom(100, 1, 0.5)),
b = as.logical(rbinom(100, 1, 0.2)),
c = as.logical(rbinom(100, 1, 0.8)),
y = as.logical(rbinom(100, 1, 0.6)))
na_a <- as.logical(rbinom(100, 1, 0.3))
na_b <- as.logical(rbinom(100, 1, 0.3))
na_c <- as.logical(rbinom(100, 1, 0.3))
mydata$a[na_a] <- NA
mydata$b[na_b] <- NA
mydata$c[na_c] <- NA
# create train/test sets
library(caret)
inTrain <- createDataPartition(mydata$y, p = .8, list = FALSE)
train <- mydata[ inTrain, ]
test <- mydata[-inTrain, ]
# impute NAs …Run Code Online (Sandbox Code Playgroud) 你好我的findCorrelation()函数有问题,这是我的输入和输出:
findCorrelation(train, cutoff = .50, verbose = FALSE)
Run Code Online (Sandbox Code Playgroud)
findCorrelation_exact出错(x = x,cutoff = cutoff,verbose = verbose):相关矩阵不对称
有谁知道为什么会这样?
从文档:
对于自举样本,使用简单的随机采样.
对于其他数据分割,当y是试图平衡分裂内的类分布的因素时,随机采样在y的水平内完成.
对于数字y,样本基于百分位数分组为组,并且在这些子组内进行采样.
对于createDataPartition,百分位数通过groups参数设置.
我不明白为什么需要这种"平衡"的东西.我认为我从表面上理解它,但任何额外的见解都会非常有用.
我正在尝试将该glm方法caret::train用于广义线性混合效应模型。我使用以下代码来设置该功能:
`GLMERmod <- list(type="Classification", library="lme4", loop=NULL)
parameters <- data.frame(parameter="parameter", class="character",
label="parameter")
GLMERmod$parameters <- parameters
grid <- function (x, y, len = NULL, search = "grid"){
data.frame(parameter = "none")
}
GLMERmod$grid <- grid
fit <-
function (x, y, wts, param, lev, last, classProbs, ...)
{
dat <- if (is.data.frame(x))
x
else as.data.frame(x)
dat$.outcome <- y
if (length(levels(y)) > 2)
stop("glm models can only use 2-class outcomes")
theDots <- list(...)
if (!any(names(theDots) == "family")) {
theDots$family <- if …Run Code Online (Sandbox Code Playgroud) 我正在从事 Coursera 机器学习项目。目标是对以下数据集执行预测建模。
> summary(training)
roll_belt pitch_belt yaw_belt total_accel_belt gyros_belt_x
Min. :-28.90 Min. :-55.8000 Min. :-180.00 Min. : 0.00 Min. :-1.040000
1st Qu.: 1.10 1st Qu.: 1.7600 1st Qu.: -88.30 1st Qu.: 3.00 1st Qu.:-0.030000
Median :113.00 Median : 5.2800 Median : -13.00 Median :17.00 Median : 0.030000
Mean : 64.41 Mean : 0.3053 Mean : -11.21 Mean :11.31 Mean :-0.005592
3rd Qu.:123.00 3rd Qu.: 14.9000 3rd Qu.: 12.90 3rd Qu.:18.00 3rd Qu.: 0.110000
Max. :162.00 Max. : 60.3000 Max. …Run Code Online (Sandbox Code Playgroud) 考虑 3 个数据集训练/验证/测试。sklearnGridSearchCV()默认情况下选择具有最高交叉验证分数的最佳模型。在预测需要准确的现实环境中,这是选择最佳模型的可怕方法。原因是它应该如何使用:
模型的训练集以学习数据集
Val 设置用于验证模型在训练集中学到的内容并更新参数/超参数以最大化验证分数。
测试集 - 在未见过的数据上测试您的数据。
最后,在实时环境中使用模型并记录结果,看看结果是否足以做出决策。令人惊讶的是,许多数据科学家仅仅选择验证分数最高的模型,就冲动地在生产中使用他们训练过的模型。我发现gridsearch选择的模型严重过度拟合,并且在预测看不见的数据方面比默认参数做得更差。
我的做法:
手动训练模型并查看每个模型的结果(以某种循环方式,但效率不高)。这是非常手动且耗时的,但我得到的结果比gridsearch好得多。我希望这是完全自动化的。
为我想要选择的每个超参数绘制验证曲线,然后选择显示训练集和验证集之间差异最小的超参数,同时最大化两者(即训练= 98%,验证= 78%确实很糟糕,但训练= 72% ,val=70% 是可以接受的)。
正如我所说,我想要一种更好的(自动化)方法来选择最佳模型。
我正在寻找什么样的答案:
我想最大化训练集和验证集中的分数,同时最小化训练集和验证集之间的分数差异。考虑以下网格搜索算法的示例:有两种模型:
Model A: train score = 99%, val score = 89%
Model B: train score = 80%, val score = 79%
Run Code Online (Sandbox Code Playgroud)
B 型是一个更可靠的模型,我随时都会选择 B 型而不是 A 型。它不太适合,并且预测是一致的。我们知道会发生什么。然而,gridsearch将选择模型 A,因为 val 分数更高。我发现这是一个常见问题,并且在互联网上没有找到任何解决方案。人们往往过于关注在学校学到的东西,而没有真正考虑选择过度拟合模型的后果。我看到了关于如何使用sklearn和caret包中的gridsearch并让他们为您选择模型的冗余帖子,但没有看到如何实际选择最佳模型。
到目前为止,我的方法非常手动。我想要一种自动化的方式来做到这一点。
我目前所做的是这样的:
gs = GridSearchCV(model, params, cv=3).fit(X_train, y_train) # X_train and y_train consists …Run Code Online (Sandbox Code Playgroud) 我正在训练一个基于Kaggle心脏病数据的决策树模型。
由于我也在使用 10 倍 CV 构建其他模型,因此我尝试使用带有 rpart 方法的 caret 包来构建树。然而,情节结果很奇怪,因为“铊”应该是一个因素。为什么显示“thaliumnormal <0.5”?这是否意味着如果“铊”==正常“然后走左边的路线“是”,否则走右边的路线“否”?
非常感谢!
编辑:我很抱歉没有提供足够的背景信息,这似乎引起了一些混乱。“铊”是一个变量,代表一种用于检测冠状动脉狭窄(又名狭窄)的技术。它是一个具有三个级别(正常、固定缺陷、可逆缺陷)的因素。
此外,我想让图表更具可读性,例如代替“thliumnormal < 0.5”,它应该类似于“thlium = normal”。我可以通过直接使用 rpart 来实现这个目标(见下文)。
但是,您可能已经注意到树是不同的,尽管我使用了带有 caret rpart CV 10 折的推荐 cp 值(请参阅下面的代码)。
我了解这两个包可能会导致一些差异。理想情况下,我可以使用插入符号和方法 rpart 来构建树,以便它与插入符号中构建的其他模型对齐。有谁知道我如何使用 caret rpart 构建的树模型的绘图标签更容易理解?
假设我将caret在 R 中进行培训,但我想将此培训分为两个运行会话。
library(mlbench)
data(Sonar)
library(caret)
set.seed(998)
inTraining <- createDataPartition(Sonar$Class, p = .75, list = FALSE)
training <- Sonar[ inTraining,]
testing <- Sonar[-inTraining,]
# First run session
nn.partial <- train(Class ~ ., data = training,
method = "nnet",
max.turns.of.iteration=5) # Non-existent parameter. But represents my goal
Run Code Online (Sandbox Code Playgroud)
让我们假设nn整个对象我只有一个部分对象,它在第 5 回合(即nn.partial)之前具有训练信息。因此,将来我可以运行以下代码来完成训练工作:
library(mlbench)
data(Sonar)
library(caret)
set.seed(998)
inTraining <- createDataPartition(Sonar$Class, p = .75, list = FALSE)
training <- Sonar[ inTraining,]
testing <- Sonar[-inTraining,]
nn <- train(Class ~ ., …Run Code Online (Sandbox Code Playgroud) parallel-processing r machine-learning neural-network r-caret
我有相当大的数据集,我想在其中排除方差相当低的列,这就是为什么我想使用短语 NearZeroVar。但是,我确实很难理解 freqCut 和 uniqueCut 的作用以及它们如何相互影响。我已经阅读了 R 中的解释,但这并没有真正帮助我解决这个问题。如果有人能给我解释一下,我将非常感激!
r ×10
r-caret ×10
correlation ×1
gbm ×1
glm ×1
gridsearchcv ×1
mixed-models ×1
python ×1
r-mice ×1
rpart ×1
scikit-learn ×1
statistics ×1
subset ×1
variance ×1