首页 > 解决方案 > R中的KERAS:Summary.factor中的错误(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,:'min'对因子没有意义

问题描述

我想根据

https://blogs.rstudio.com/tensorflow/posts/2018-01-24-keras-fraud-autoencoder/包含以下数据:

TX_ID          SENDER_ACCOUNT_ID RECEIVER_ACCOUNT_ID     TX_TYPE           TX_AMOUNT          TIMESTAMP     
 Min.   :       1   Min.   :    0     Min.   :    0       TRANSFER:12476012   Min.   :       0   Min.   :  0.00  
 1st Qu.: 3119004   1st Qu.:25007     1st Qu.:23989                           1st Qu.:      21   1st Qu.: 49.00  
 Median : 6238006   Median :49936     Median :48825                           Median :     155   Median : 99.00  
 Mean   : 6238006   Mean   :49542     Mean   :49532                           Mean   :   22643   Mean   : 99.46  
 3rd Qu.: 9357009   3rd Qu.:75006     3rd Qu.:73955                           3rd Qu.:     448   3rd Qu.:149.00  
 Max.   :12476012   Max.   :99999     Max.   :99999                           Max.   :21474836   Max.   :199.00  
  IS_FRAUD           ALERT_ID       
 False:12458960   Min.   :  -1.000  
 True :   17052   1st Qu.:  -1.000  
                  Median :  -1.000  
                  Mean   :   1.894  
                  3rd Qu.:  -1.000  
                  Max.   :3999.000  
> 
> str(df)
'data.frame':   12476012 obs. of  8 variables:
 $ TX_ID              : int  1 2 3 4 5 6 7 8 9 10 ...
 $ SENDER_ACCOUNT_ID  : int  5942 86700 86700 86700 86700 86700 86700 86700 86700 86700 ...
 $ RECEIVER_ACCOUNT_ID: int  92982 43995 95516 83911 82801 10605 88864 25971 74981 42920 ...
 $ TX_TYPE            : Factor w/ 1 level "TRANSFER": 1 1 1 1 1 1 1 1 1 1 ...
 $ TX_AMOUNT          : num  517 198 198 198 198 ...
 $ TIMESTAMP          : int  0 0 0 0 0 0 0 0 0 0 ...
 $ IS_FRAUD           : Factor w/ 2 levels "False","True": 1 1 1 1 1 1 1 1 1 1 ...
 $ ALERT_ID           : int  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ..

我在执行此部分时遇到错误:现在让我们创建数据集的标准化版本。我们还将我们的数据帧转换为矩阵,因为这是 Keras 所期望的格式。

desc <- df_train %>% 
  select(-Class) %>% 
  get_desc()

x_train <- df_train %>%
  select(-Class) %>%
  normalization_minmax(desc) %>%
  as.matrix()

x_test <- df_test %>%
  select(-Class) %>%
  normalization_minmax(desc) %>%
  as.matrix()

我得到错误:

Summary.factor(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, : 'min' 对因子没有意义

我怎么解决这个问题?

标签: rkeras

解决方案


帖子的兴趣功能是:

get_desc <- function(x) {
  map(x, ~list(
    min = min(.x),
    max = max(.x),
    mean = mean(.x),
    sd = sd(.x)
  ))
} 

#' Given a dataset and normalization constants it will create a min-max normalized
#' version of the dataset.
normalization_minmax <- function(x, desc) {
  map2_dfc(x, desc, ~(.x - .y$min)/(.y$max - .y$min))
}

现在您尝试将其应用于包含factor. min并且max由于明显的原因没有定义一个因素。您的因子 ( TX_TYPE) 无论如何都是一个常数,因此最简单的方法是从一开始就将其从数据框中删除。如果您有任何需要包含在模型中的因素,则必须对它们进行编码(即将它们转换为数值),参见。例如一种热编码

df <- df %>% select(-TX_TYPE)

推荐阅读