我“更新”了插入符号中的twoClassSummary 函数,以使用插入符号函数包含阴性和阳性预测值:
testfun <- function (data, lev = NULL, model = NULL)
{
lvls <- levels(data$obs)
if (length(lvls) > 2)
stop(paste("Your outcome has", length(lvls), "levels. The
twoClassSummary() function isn't appropriate."))
requireNamespaceQuietStop("ModelMetrics")
if (!all(levels(data[, "pred"]) == lvls))
stop("levels of observed and predicted data do not match")
data$y = as.numeric(data$obs == lvls[2])
rocAUC <- ModelMetrics::auc(ifelse(data$obs == lev[2], 0,
1), data[, lvls[1]])
out <- c(rocAUC, sensitivity(data[, "pred"], data[, "obs"], lev[1]),
specificity(data[, "pred"], data[, "obs"], lev[2]),
# next 3 lines are my additions and …Run Code Online (Sandbox Code Playgroud) 我有一些r / caret代码可以将多个交叉验证的模型拟合到某些数据,但是我收到一条警告消息,提示我找不到任何信息。这是我应该关注的事情吗?
library(datasets)
library(caret)
library(caretEnsemble)
# load data
data("iris")
# establish cross-validation structure
set.seed(32)
trainControl <- trainControl(method="repeatedcv", number=5, repeats=3, savePredictions=TRUE, search="random")
# fit several (cross-validated) models
algorithmList <- c('lda', # Linear Discriminant Analysis
'rpart' , # Classification and Regression Trees
'svmRadial') # SVM with RBF Kernel
models <- caretList(Species~., data=iris, trControl=trainControl, methodList=algorithmList)
Run Code Online (Sandbox Code Playgroud)
日志输出:
Warning messages:
1: In trControlCheck(x = trControl, y = target) :
x$savePredictions == TRUE is depreciated. Setting to 'final' instead.
2: In trControlCheck(x = trControl, y …Run Code Online (Sandbox Code Playgroud) 我想导出以下模型,以便其他用户可以打开它并使用predict函数来预测新观察的类。这是它唯一的用途。我可以保存 mod_fit,但它会占用大量空间,最终用户可以访问我不想要的信息。有什么简便的方法吗?
library(caret)
library(dplyr)
iris2 <- iris %>% filter(Species != "setosa") %>% mutate(Species = as.character(Species))
mod_fit <- train(Species ~., data = iris2, method = "glm")
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用来拟合R中的逻辑回归模型caret package。我已经完成以下工作:
model <- train(dec_var ~., data=vars, method="glm", family="binomial",
trControl = ctrl, tuneGrid=expand.grid(C=c(0.001, 0.01, 0.1, 1,10,100, 1000)))
Run Code Online (Sandbox Code Playgroud)
但是,我不确定该模型的调整参数应该是什么,并且我很难找到它。我假设它是C,因为C是中使用的参数sklearn。目前,我收到以下错误-
错误:调整参数网格应具有列参数
您对如何解决此问题有任何建议吗?
我正在处理涉及100多个特征的大型数据集(这些特征都是相关的,因为它们已被过滤;原始数据集具有500多个特征).我通过插入符包中的train()函数并使用"ranger"方法创建了一个随机森林模型.
这是一个问题:如何按重要性提取所有变量,而不是仅排在前20个最重要的变量?varImp()函数默认只生成前20个变量.
这是一些示例代码(减去训练集,非常大):
library(caret)
rforest_model <- train(target_variable ~ .,
data = train_data_set,
method = "ranger",
importance = "impurity)
Run Code Online (Sandbox Code Playgroud)
这是提取变量重要性的代码:
varImp(rforest_model)
Run Code Online (Sandbox Code Playgroud) 有没有办法从 auto-sklearn 的独立 python 脚本中提取自动生成的机器学习管道?
以下是使用 auto-sklearn 的示例代码:
import autosklearn.classification
import sklearn.cross_validation
import sklearn.datasets
import sklearn.metrics
digits = sklearn.datasets.load_digits()
X = digits.data
y = digits.target
X_train, X_test, y_train, y_test = sklearn.cross_validation.train_test_split(X, y, random_state=1)
automl = autosklearn.classification.AutoSklearnClassifier()
automl.fit(X_train, y_train)
y_hat = automl.predict(X_test)
print("Accuracy score", sklearn.metrics.accuracy_score(y_test, y_hat))
Run Code Online (Sandbox Code Playgroud)
以某种方式自动生成等效的 python 代码会很好。
相比之下,当使用 TPOT 时,我们可以获得如下的独立管道:
from tpot import TPOTClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, train_size=0.75, test_size=0.25)
tpot = TPOTClassifier(generations=5, population_size=20, verbosity=2) …Run Code Online (Sandbox Code Playgroud) 如果我运行此代码来使用 Knit 训练 GBM 模型,我会收到几页 Iter 输出,如下所示。有没有办法抑制这个输出?
mod_gbm <- train(classe ~ ., data = TrainSet, method = "gbm")
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.6094 nan 0.1000 0.1322
## 2 1.5210 nan 0.1000 0.0936
## 3 1.4608 nan 0.1000 0.0672
## 4 1.4165 nan 0.1000 0.0561
## 5 1.3793 nan 0.1000 0.0441
Run Code Online (Sandbox Code Playgroud)
谢谢你!
不确定这是否更多是一个统计问题,但我能找到的最接近的类似问题就在这里,尽管我无法让它适用于我的案例。
我正在尝试开发一个汇总的惩罚逻辑回归模型。我使用鼠标创建一个 mids 对象,然后使用插入符号重复交叉验证和弹性网络回归 ( glmnet ) 将模型拟合到每个数据集来调整参数。拟合的对象不属于“mira”类,但我想我通过使用正确的列表项更改对象类来解决这个问题。主要问题是glmnet没有关联的vcov方法,而pool()需要该方法。
我想根据变量的数量和哪些变量是最佳预测变量的不确定性来使用惩罚回归。我的数据由 4 个数值变量和 9 个不同级别的分类变量组成,我预计包括交互作用。
有谁知道我如何创建自己的 vcov 方法或以其他方式解决此问题?我不确定这是否可能。
随附示例数据和代码,请注意我无法共享实际数据。
library(mice)
library(caret)
dat <- as.data.frame(list(time=c(4,3,1,1,2,2,3,5,2,4,5,1,4,3,1,1,2,2,3,5,2,4,5,1),
status=c(1,1,1,0,2,2,0,0,NA,1,2,0,1,1,1,NA,2,2,0,0,1,NA,2,0),
x=c(0,2,1,1,NA,NA,0,1,1,2,0,1,0,2,1,1,NA,NA,0,1,1,2,0,1),
sex=c("M","M","M","M","F","F","F","F","M","F","F","M","F","M","M","M","F","F","M","F","M","F","M","F")))
imp <- mice(dat,m=5, seed=192)
control = trainControl(method = "repeatedcv",
number = 10,
repeats=3,
verboseIter = FALSE)
mod <- list(analyses=vector("list", imp$m))
for(i in 1:imp$m){
mod$analyses[[i]] <- train(sex ~ .,
data = complete(imp, i),
method = "glmnet",
family="binomial",
trControl = control,
tuneLength = 10,
metric="Kappa")
} …Run Code Online (Sandbox Code Playgroud) 数据:我正在使用rsample包中的" attrition "数据集.
问题:使用磨损数据集和rpart库,我可以使用公式"Attrition~OverTime + JobRole"生成树,其中选择OverTime作为第一个分割.但是当我尝试在没有JobRole变量的情况下生长树(即"Attrition~OverTime")时,树不会分裂并仅返回根节点.使用rpart函数以及使用method ="rpart"的插入符号列函数都会发生这种情况.
我对此感到困惑,因为我认为在rpart中实现的CART算法选择了最佳变量以迭代贪婪的方式进行分割,并且没有"向前看"以查看其他变量的存在如何影响其对最佳选择的选择分裂.如果在具有两个解释变量的情况下算法选择OverTime作为值得的第一次拆分,为什么在删除JobRole变量后它不选择OverTime作为值得的第一次拆分?
我在Windows 7中使用R版本3.4.2和RStudio版本1.1.442.
研究:我在这里和这里找到了类似的Stack Overflow问题,但都没有完整的答案.
我可以说,rpart文档似乎在第5页说rpart算法不使用"向前看"规则:
解决这两个问题的一种方法是使用预见规则; 但这些在计算上非常昂贵.相反,rpart使用节点的几种杂质或多样性度量之一.
代码:这是一个代表.任何见解都会很棒 - 谢谢!
suppressPackageStartupMessages(library(rsample))
#> Warning: package 'rsample' was built under R version 3.4.4
suppressPackageStartupMessages(library(rpart))
suppressPackageStartupMessages(library(caret))
suppressPackageStartupMessages(library(dplyr))
#> Warning: package 'dplyr' was built under R version 3.4.3
suppressPackageStartupMessages(library(purrr))
#################################################
# look at data
data(attrition)
attrition_subset <- attrition %>% select(Attrition, OverTime, JobRole)
attrition_subset %>% glimpse()
#> Observations: 1,470
#> …Run Code Online (Sandbox Code Playgroud) 我正在使用R的插入符号包,并且在训练函数(训练)中我使用了allowParallel参数,它可以工作.但是,它使用了所有核心,并且由于培训在我的本地PC上运行,我宁愿为自己留下一个核心,以便能够在训练模型时工作.有没有办法做到这一点?
根据我的收集,似乎不同的模型类型可能使用不同的并行化包.我在windows上工作,所以我猜它不是在使用doMC(我知道如何设置内核的数量......)