gpt4 book ai didi

r - 测试模型参数的整洁方法

转载 作者:行者123 更新时间:2023-12-04 11:18:06 30 4
gpt4 key购买 nike

我想比较使用相同预测变量但模型参数不同的一堆模型的模型性能。这似乎是使用的地方 broom创建一个整洁的输出,但我无法弄清楚。
下面是一些非工作代码,可以帮助表明我在想什么:

seq(1:10) %>%
do(fit = knn(train_Market, test_Market, train_Direction, k=.), score = mean(fit==test_Direction)) %>%
tidy()

有关更多上下文,这是我们正在尝试整理的 ISLR 实验室之一的一部分。您可以在此处查看整个实验室: https://github.com/AmeliaMN/tidy-islr/blob/master/lab3/lab3.Rmd

[更新:可重现的示例] 由于在模型拟合之前需要进行数据整理,因此很难在这里制作一个最小的示例,但这应该是可重现的:
library(ISLR)
library(dplyr)

train = Smarket %>%
filter(Year < 2005)
test = Smarket %>%
filter(Year >= 2005)

train_Market = train %>%
select(Lag1, Lag2)
test_Market = test %>%
select(Lag1, Lag2)

train_Direction = train %>%
select(Direction) %>%
.$Direction

set.seed(1)
knn_pred = knn(train_Market, test_Market, train_Direction, k=1)
mean(knn_pred==test_Direction)

knn_pred = knn(train_Market, test_Market, train_Direction, k=3)
mean(knn_pred==test_Direction)

knn_pred = knn(train_Market, test_Market, train_Direction, k=4)
mean(knn_pred==test_Direction)

等等。

最佳答案

由于您的每个 knn(和 oracle)的输出是一个向量,因此这对于 tidyr 的 unnest 来说是一个很好的例子。 (结合 purrr 的 maprep_along :

library(class)
library(purrr)
library(tidyr)
set.seed(1)

predictions <- data_frame(k = 1:5) %>%
unnest(prediction = map(k, ~ knn(train_Market, test_Market, train_Direction, k = .))) %>%
mutate(oracle = rep_along(prediction, test_Direction))
predictions然后将变量组织为:
# A tibble: 1,260 x 3
k prediction oracle
<int> <fctr> <fctr>
1 1 Up Up
2 1 Down Up
3 1 Up Down
4 1 Up Up
5 1 Up Up
6 1 Down Up
7 1 Down Down
8 1 Down Up
9 1 Down Up
10 1 Up Up
# ... with 1,250 more rows

可以很容易地总结:
predictions %>%
group_by(k) %>%
summarize(accuracy = mean(prediction == oracle))

同样,你不需要扫帚,因为每个输出都是一个因子,但如果它是一个模型,你可以使用扫帚的 tidyaugment然后以类似的方式取消嵌套。

这种方法的一个重要方面是,通过将它们与 tidyr 的 crossing 相结合,它可以灵活地处理多种参数组合。 (或 expand.grid)并使用 invoke_rows将该函数应用于每一行。例如,您可以尝试 l 的变体旁边 k :
crossing(k = 2:5, l = 0:1) %>%
invoke_rows(knn, ., train = train_Market, test = test_Market, cl = train_Direction) %>%
unnest(prediction = .out) %>%
mutate(oracle = rep_along(prediction, test_Direction)) %>%
group_by(k, l) %>%
summarize(accuracy = mean(prediction == oracle))

这将返回:
Source: local data frame [8 x 3]
Groups: k [?]

k l accuracy
<int> <int> <dbl>
1 2 0 0.5396825
2 2 1 0.5277778
3 3 0 0.5317460
4 3 1 0.5317460
5 4 0 0.5277778
6 4 1 0.5357143
7 5 0 0.4841270
8 5 1 0.4841270

关于r - 测试模型参数的整洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536056/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com