Как извлечь элементы из списков двух элементов, используя purrr? - PullRequest
0 голосов
/ 16 мая 2018

Я использую наивную байесовскую модель quanteda (textmodel_nb), чтобы выполнить некоторую классификацию текста.

Одним из выходных данных модели является список, содержащий вероятности каждого класса.То есть, если nb является моей моделью, я вижу, что

 > str(nb$PcGw)
 num [1:2, 1:462] 0.9446 0.0554 0.9259 0.0741 0.2932 ...
 - attr(*, "dimnames")=List of 2
  ..$ classes : chr [1:2] "FALSE" "TRUE"
  ..$ features: chr [1:462] "hello" "john" "jan" "index" ..

и вывод списка дает что-то вроде

 nb$PcGw
       features
classes         ny        john
  FALSE 0.94457605 0.92594799
  TRUE  0.05542395 0.07405201

Я хотел использовать purrr для извлечения этой информациии придумал data_frame как

variable    P_TRUE     P_FALSE
'ny'        0.05542395 0.94457605
'john'      0.07405201 0.92594799

Однако я не смог этого сделать.Кто-нибудь может мне помочь?

Вот рабочий пример, использующий собственный пример Quanteda:

txt <- c(d1 = "Chinese Beijing Chinese",
         d2 = "Chinese Chinese Shanghai",
         d3 = "Chinese Macao",
         d4 = "Tokyo Japan Chinese",
         d5 = "Chinese Chinese Chinese Tokyo Japan")
trainingset <- dfm(txt, tolower = FALSE)
trainingclass <- factor(c("Y", "Y", "Y", "N", NA), ordered = TRUE)

## replicate IIR p261 prediction for test set (document 5)
nb_test <- textmodel_nb(trainingset, trainingclass)

str(nb_test$PcGw)

 num [1:2, 1:6] 0.659 0.341 0.562 0.438 0.562 ...
 - attr(*, "dimnames")=List of 2
  ..$ classes : chr [1:2] "Y" "N"
  ..$ features: chr [1:6] "Chinese" "Beijing" "Shanghai" "Macao"

Спасибо !!

1 Ответ

0 голосов
/ 16 мая 2018

Если нам нужно получить транспонирование и отформатировать столбцы, используя %>%, транспонировать матрицу, преобразовать в data.frame, добавить столбец имен строк (rownames_to_column) и переименовать при необходимости

library(tidyverse)
nb_test$PwGc %>% 
     t %>% 
     as.data.frame %>% 
     rownames_to_column('variable') %>% 
     rename_at(2:3, ~ paste0("P_", c(TRUE, FALSE)))

На основе связи с OP, если нам нужно вложить некоторые операторы в %>%, оберните его {}

nb_test$PcGw %>% 
      t %>%
      as.data.frame() %>% 
      {as_tibble(rownames_to_column(., 'variable'))}

Или просто используйте

nb_test$PcGw %>%
    t %>% 
    as.data.frame() %>% 
    rownames_to_column(., 'variable') %>% 
    as_tibble() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...