问题标签 [mlr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - model.frame.default(Terms, newdata, na.action = na.pass, xlev = object$xlevels) 中的错误:因子有新的水平
我正在尝试使用 mlr 包使用以下用户定义函数进行分类clasFunc
。当我使用调用函数时
我收到一条错误消息说
model.frame.default 中的错误(术语,newdata,na.action = na.pass,xlev = object$xlevels):因子 col1 具有新级别“新级别”
我试图通过使用代码合并训练和测试数据的因素来解决这个问题
但这似乎不起作用。
makeTask(type = type, data = data, weights = weights, blocking = blocking, : col1,col2,col3,col4,col5 列的空因子级别被删除
这是我的完整代码。
这是完整的输出
[1]“折叠1”
makeTask(type = type, data = data, weights = weights, blocking = blocking, : col1,col2,col3,col4,col5 列的空因子级别被删除
[1] “classif.lda 折叠 1 测试 auc:0.673604162894944”
[1]“折叠2”
makeTask(type = type, data = data, weights = weights, blocking = blocking, : col1,col2,col3,col4,col5 列的空因子级别被删除
[1] “classif.lda 折叠 2 测试 auc:0.686717528654292”
[1]“折叠3”
makeTask(type = type, data = data, weights = weights, blocking = blocking, : col1,col2,col3,col4,col5 列的空因子级别被删除
计时停止于:0 0 0
model.frame.default 中的错误(术语,newdata,na.action = na.pass,xlev = object$xlevels):因子 col1 具有新级别“新级别”
我怎样才能解决这个问题?
r - mlr 中的 bagging 包装器可能存在错误
bagging 包装器似乎给出了奇怪的结果。如果我将其应用于简单的逻辑回归,那么 logloss 会放大 10 倍:
给
对于第一个学习者和
运行时间:0.645
对于袋装的。因此,袋装的性能要差得多。是有错误还是我做错了什么?
这是我的sessionInfo()
r - MLR中的重采样错误
我的任务是对回归任务进行分层,数据看起来像
f1,f2,f3,... m1,m2...,p1,p2,p3...
其中 f_i 是数字,其他列是因子和整数。
现在我定义了一个自定义度量 m1,运行以下命令后
我得到错误说
当我将输入数据帧子集以仅包含数值数据时,没有这样的错误,实际上只有数值数据对预测有用,但我需要其他列在训练测试拆分中分层。有谁知道出了什么问题?
r - R mlr 包 - 是否可以从参数调整中保存所有模型?
我想问是否可以保存在参数调整期间创建的所有模型,例如tuneParams
功能。我想从每个超参数集的每个交叉验证中保存模型。
我可以看到和函数都有models
参数,但我找不到一个或类似的函数,我真的无法找到一种使用其他函数来模仿这种行为的方法(我是 mlr 的新手)。resample
benchmark
tuneParams
有没有办法做到这一点?
PS我知道这听起来可能很疯狂,但我需要它来进行一些内部验证。
PS2 不幸的是,似乎还没有“mlr”标签,而且我没有足够的代表来创建一个。
r - 如何在 mlr 包的 makeClassifTask() 中包含阻塞因子?
在一些分类任务中,使用mlr
包,我需要处理一个data.frame
类似于这个的:
我需要交叉验证模型,将值保持在一起ID
,我从教程中知道:
https://mlr-org.github.io/mlr-tutorial/release/html/task/index.html#further-settings
我们可以在任务中包含一个阻塞因素。这将表明某些观察结果“属于一起”,并且在将数据拆分为训练集和测试集以进行重采样时不应分开。
问题是如何将这个阻塞因素包含在makeClassifTask
?
不幸的是,我找不到任何例子。
r - R mlr - 没有嵌套交叉验证的包装器特征选择 + 超参数调整?
在 mlr 中,可以使用嵌套交叉验证进行过滤器特征选择和超参数调整,例如使用以下代码。
但据我所知,使用包装器特征选择是不可能做这样的事情的,例如:
有没有办法实现这样的目标?特别是为了避免嵌套嵌套交叉验证?有什么方法论上的理由不合适吗?因为实际上,使用带有调整参数(特征数量)的过滤器特征选择看起来与包装器方法非常相似,也就是说,您的附加超参数实际上是一组特征,或者来自过滤器(例如“卡方”)+阈值(前 90%、80%、70%)或包装算法的输出(随机、遗传算法、穷举、顺序),并且在这两种情况下,最佳特征集都基于内部 cv 性能。
我相信这两种方法(嵌套了用于过滤的附加参数和嵌套嵌套)在计算复杂性方面是相似的,但是您可能不想使用嵌套嵌套 CV 进一步减少训练数据集,这可以通过第一种方法实现.
这是我正在犯的方法错误还是缺少(可能不是很受欢迎)功能?
r - R mlr - 从训练数据的子集和整个测试数据(不是整个训练数据)创建学习曲线?
假设我正在创建这样的学习曲线(代码中可能存在小错误,这只是一个示例)。我想要的是一条经典的学习曲线,你可以在其中扩大训练集,保持验证/测试集的大小相同。
上面代码的问题在于,学习者确实是在一小部分训练数据上进行训练的,但是该auc.train.mean
度量是在整个训练集上进行评估的。这导致不是我想要的学习曲线。我希望这个度量来评估用于学习的训练集部分的性能,如下所示:
http://www.astroml.org/sklearn_tutorial/practical.html#learning-curves
我相信这句话说明了一切:
请注意,当我们在训练数据的一个小子集上进行训练时,训练误差是使用这个子集计算的,而不是完整的训练集。
如何做到这一点?
r - R - mlr 正类改变
我正在使用 R mlr 包,因为它允许我使用多种分类方法和调整参数,在这个包中使用相同的方法。
但它改变了我的正面课程。
在我的数据集中,我需要预测“HasWriteOff”,它的值为“1”或“2”。“1”是多数类,远多于“2”的数量,这意味着类不平衡。我在函数中将正类设置为“2” makeClassifTask
,但是在预测之后,当我检查混淆矩阵时,它显示正类为“1”。
这是我的代码:
我在这里设置了正类
使用 XGBoost 进行训练和预测
在此处检查混淆矩阵
输出
准确度:0.9954
95% CI:(0.9916, 0.9978) 无信息率:0.9784
P 值 [Acc > NIR]:5.136e-11
Kappa:0.8913
Mcnemar 检验 P 值:1
灵敏度:0.9977
特异性:0.8936
Pos Pred 值: 0.9977
Neg Pred 值:0.8936
流行率:0.9784
检出率:0.9761
检出率:0.9784
平衡准确度:0.9456
“正”等级:1
正如您在此处看到的,“正”类为 1。
我已经检查了我在这里使用的其他方法,它们没有要设置的“正”参数。
你知道我怎样才能真正将正类设置为少数类“2”吗?我想看看是否通过将少数类设置为正类,特异性可以更高?
r - 绘制 R 与导入数据的关键差异
可以使用 mlr 包生成 用于比较多个数据集 ( Demšar2006 ) 上的分类器的关键差异 (CD) 图,如下所示:
这需要评估结果驻留在一个相当复杂的BenchmarkResult
对象中,尽管数据基本上是一个矩阵(其中包含数据集M[i, j]
的分类器分数)。我之前在 Python 工作流程中生成了此类数据并导入到一个(因为似乎没有用于此类绘图的 Python 包)。i
j
R
data.frame
如何从这些数据中生成 CD 图?
我想BenchmarkResult
从 中创建一个data.frame
,但不知道从哪里开始:
r - R 包 mlr:classif.ksvm 中自定义内核的选项
我想svm
用自定义内核构建一个。通常我为此使用 R 包kernlab
。因为,我想尝试不同的内核并调整超参数,所以我想使用 nice 包mlr
。但是,据我所知,它不支持内核类型选项“矩阵”将自定义内核传递给 ksvm 学习器(“classif.ksvm”)。
有人知道是否有计划解决这个问题吗?或者,如果有另一个包允许自定义内核和漂亮的包装器来调整参数和重采样方法。据我所知,插入符号包也没有采用自定义内核。