- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简而言之:有没有办法循环遍历下面描述的 lapply 对象的每个元素 allModelsResults
?
意思是,allModelsResults$'1'
例如给我对象的第一个元素。接下来的 allModelsResults$'2'
将是第二个元素。我想创建一个 for
循环来提取每个元素,运行一些命令并存储结果。
详细说明如下...
我有以下代码,其中我使用“knn”跨多个模型规范运行一个简单的 ML 模型。模型规范存储在allModelList
中,所有结果存储在allModelsResults
中。
所有模型列表中的单个模型如下所示:
y ~ x1 + x2 + x3
或
y ~ x1 + x5 + x4
等等……总之就是一系列型号规范的组合
allModelsResults <- lapply(allModelsList, function(x) train(x, data=All_categories_merged_done,method = "knn"))
我现在想一一提取每个元素(每个模型的结果)以进行分析。例如我可以手动获取:
allModelsResults$'1'
从第一个模型获取结果,或 allModelsResults$'5'
从第五个模型获取结果,依此类推。
理想情况下,我会在 for 循环中循环遍历这些元素,每次选择其中一个元素时都会运行一系列命令。
有关如何从 allModelsResults 对象中提取元素的任何帮助都会非常有帮助!我有大约 50 个模型规范,因此我需要创建一个循环或类似的东西来自动一一提取。
特别是为了与社区分享,对于每个元素,我想为每个模型一一进行此操作。
作为示例,我在这里提取模型 1(这显然不起作用):
aggregate_results <- NULL
for(z in 1:length(categories)){
element_number_ID <- (element_number[z])
element_number_ID
应等于 '1'
以提取正确的模型
model_1_result <- allModelsResults$'1'
ResultsTestPred <- predict(model_1_result, testing_data)
results_to_store <- confusionMatrix(ResultsTestPred, testing_data $outcome)
aggregate_results <- rbind(aggregate_results, results_to_store)
}
一个元素的
results_to_store
输出如下所示:
混淆矩阵和统计
Reference
预测 0 1 0 14 2 1 4 19
Accuracy : 0.8462
95% CI : (0.6947, 0.9414)
No Information Rate : 0.5385
P-Value [Acc > NIR] : 0.00005274
Kappa : 0.688
麦克尼马尔测试 P 值:0.6831
Sensitivity : 0.7778
Specificity : 0.9048
Pos Pred Value : 0.8750
Neg Pred Value : 0.8261
Prevalence : 0.4615
Detection Rate : 0.3590
检测率:0.4103
平衡精度:0.8413
'Positive' Class : 0
我想要保存每个元素/模型的准确度
值。这样我就可以比较每个模型规范的准确性。
任何见解将不胜感激!
最佳答案
您似乎想要获得每个模型的预测和混淆矩阵。没有可重复的示例并且存在一些令人困惑的术语,我正在做很多猜测,但我认为我理解你想要什么(或足够接近)。我将向您展示如何使用 lapply
和 Map
来完成此操作,然后我们也可以使用 for
循环来完成此操作。
首先,对测试数据进行预测。所有这些方法都是完全相同的:
# lapply way
predictions = lapply(allModelsList, predict, newdata = testingdata)
# for loop way
predictions = list()
for (i in 1:length(allModelsList)) {
predictions[[i]] = predict(allModelsList[[i]], newdata = testingdata)
}
# manual way - just so you understand exactly what's going on
predictions = list(
predict(allModelsList[[1]], newdata = testingdata),
predict(allModelsList[[2]], newdata = testingdata),
predict(allModelsList[[3]], newdata = testingdata),
...
)
现在,predictions
是一个 list
,因此我们使用 [[
访问每个元素。第一个是 predictions[[1]]
,如果我们想定义某个变量,则第一个 k
是 predictions[[k]]
k
(就像在循环中使用)。我们还可以添加描述性名称并使用名称而不是索引。
类似地,我们可以计算所有的混淆矩阵:
# lapply way
conf_matrices = lapply(predictions, confusionMatrix, reference = testingdata$outcome)
# for loop way
conf_matrices = list()
for (p in 1:length(predictions)) {
conf_matrices[[p]] = confusionMatrix(p, reference = testingdata$outcome)
}
# manual way (for illustration)
conf_matrices = list(
confusionMatrix(predictions[[1]], reference = testingdata$outcome),
confusionMatrix(predictions[[2]], reference = testingdata$outcome),
...
)
同样,我们有一个列表
。第一个混淆矩阵是 conf_matrices[[1]]
,与上面相同。
希望这可以帮助我们了解如何使用 lapply
或 for
循环来创建列表。
现在,在问题的底部,您似乎暗示了混淆矩阵的“准确性”部分。我运行了帮助页面 ?confusionMatrix
底部的示例并查看了结果。对结果运行 str(conf_mat)
表明它是一个 list
,并且列表的 "overall"
元素是一个命名的向量,包括“准确性”
。因此,对于单个混淆矩阵 cm
,我们可以使用 cm[["overall"]]["Accuracy"]
提取准确度。我们使用 [[
作为 list
部分,使用 [
作为常规向量部分。 (我们也可以使用 cm$overall["Accuracy"]
。当我们给它确切的名称、没有引号、没有变量时,$
就可以工作。你的很多问题似乎与尝试将 $
与引号或变量一起使用有关。您就是不能这样做。请参阅 fortunes::fortune(312)
)。
因此,我们可以从混淆矩阵列表中提取准确性:
# I use *s*apply here so the result will be *s*implified into a vector
acc = sapply(conf_matrices, function(cm) cm[["overall"]]["Accuracy"])
acc = numeric(length(conf_matrices))
for (i in 1:length(conf_matrices)) {
acc[i] = conf_matrices[[i]][["overall"]]["Accuracy"]
}
或者,如果您从一开始就知道您只想要准确性,我们可以直接到达那里,而无需保存中间步骤:
# apply
acc = sapply(allModelsList, function(x) {
pred = predict(x, newdata = testingdata)
cm = confusionMatrix(pred, reference = testingdata$outcome
return(cm[["overall"]]["Accuracy"]
}
)
# for 循环 acc = 数字(长度(allModelsList)) for (i in 1:length(allModelsList)) { pred = 预测(allModelsList[[i]], newdata = 测试数据) cm = 混淆矩阵(pred, 引用 = 测试数据$结果 acc[i] = (cm[["总体"]]["准确度"] }
<小时/>注释:如上所述,如果没有可重现的示例,我会猜测很多,并且这些都没有经过测试,因为我没有任何输入可以测试。我假设我在您的问题中看到的各个步骤(例如我们想要预测 allModelResults
的每个元素)是正确的。 (如果是这样,那么,fittedModels
似乎是一个比 allModelResults
更好的名称。)我不知道“模型规范”是什么意思,并且我不知道 allModelList
中有什么,但希望这为您提供了足够的使用列表的示例,以便您可以解决任何问题。 (也可能存在括号不匹配或括号缺失的情况。)
lapply
和 sapply
比 for
循环更方便,可以减少输入次数,但它们实际上并没有什么不同。他们设置一个对象来保存结果,然后填充它。如果您想同时创建多个结果,您可能只想使用 for
循环。随着内部步骤数变长,无论如何调试 for 循环都会变得更容易。使用您喜欢且对您有意义的内容。
关于R:从 lapply 对象中提取循环元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242723/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!