- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 predict.knn3
时,我遇到了一个有趣的数据处理用例。我不知道我可以使用参数 type="class"
调用 predict 来获得预测级别,这正是我需要的。因此,我想出了一个有点复杂的解决方案,从每个 predict()
的结果行中选择具有最大概率的级别。问题是由于 names
函数不能以矩阵的“矢量化”形式工作,而只能使用向量。
为了说明发现type="class"
参数之前和之后的用例:
rm(list = ls())
library(caret)
library(tidyverse)
library(dslabs)
data("tissue_gene_expression")
x <- tissue_gene_expression$x
y <- tissue_gene_expression$y
set.seed(1)
test_index <- createDataPartition(y, times = 1, p = 0.5, list = FALSE)
test_x <- x[test_index,]
test_y <- y[test_index]
train_x <- x[-test_index,]
train_y <- y[-test_index]
# fit the model, predict without type="class" and use sapply to build the y_hat levels
fit <- knn3(train_x, train_y, k = 1)
pred <- predict(fit, test_x)
y_hat <- sapply(1:nrow(pred), function(i) as.factor(names(pred[i,which.max(pred[i,])])))
# compare it to the solution using predict with type="class"
identical(y_hat, as.factor(predict(fit, test_x, type="class")))
[1] TRUE
为了说明这个问题,我可以执行以下操作,看到 names 函数对命名数字元素的向量进行操作会产生所需的结果,而矩阵将失败并输出 NULL:
names(pred[1, which.max(pred[1,])])
[1] "cerebellum"
names(pred[1:2, which.max(pred[1:2,])])
NULL
假设在 predict.knn3
函数中不知道这个方便的 type="class"
;有没有更简单的方法使用 tidyverse 和 dplyr 来替换这个 sapply ?或者任何其他更简单的方法来实现这个用例?
y_hat <- sapply(1:nrow(pred), function(i) as.factor(names(pred[i, which.max(pred[i,])])))
我正在寻找类似以下的东西,但它不起作用:
as_tibble(predict(fit, test_x)) %>% mutate(y_hat=names(which.max(.[row_number(),])))
最佳答案
我发现使用 dplyr
对行进行操作可能有点困惑。这应该工作。猜测一下,这不是计算效率最高的。
solution <- as_tibble(predict(fit, test_x)) %>%
rowwise() %>%
do(as.data.frame(.) %>%
mutate(., y_hat = names(.)[which.max(select(., everything()))])
)
solution %>%
slice(18:22)
# A tibble: 5 x 8
cerebellum colon endometrium hippocampus kidney liver placenta y_hat
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 1 0 0 0 0 0 0 cerebellum
2 1 0 0 0 0 0 0 cerebellum
3 0 1 0 0 0 0 0 colon
4 0 1 0 0 0 0 0 colon
5 0 1 0 0 0 0 0 colon
关于r - 如何将这个 sapply 用例转换为 dplyr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58680388/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!