【问题标题】:Error in t(as(from, “ngCMatrix)): error in evaluating the argument ‘x’ in selecting a method for function ‘t’: Error in asMt(as(from, “ngCMatrix)) 中的错误:在为函数“t”选择方法时评估参数“x”时出错:asM 中的错误
【发布时间】:2016-01-04 11:08:17
【问题描述】:

我在 Knime 中使用 R 代码,这是一个数据分析平台。我从一个块中获取一个矩阵,该块从 xls 文件中读取一个表。该矩阵称为“my_matrix”。然后我想将先验算法应用于该矩阵的三列,但出现上述错误。有任何想法吗? 请注意“sum(is.na(my_matrix))”有输出[1] 0

require(arules)
#require(arulesViz)

#some code to retreive the my_matrix

#my_matrix
my_rows= nrow(my_matrix);
my_cols= ncol(my_matrix);
matrix_temp = my_matrix[,4:5];
matrix_temp = array(c(matrix_temp, my_matrix[,20]), dim=c(my_rows,3))
#matrix_temp
my_matrix = matrix_temp

sum(is.na(my_matrix)) #output: [1] 0

my_transactions = as(my_matrix, "transactions");
summary(my_transactions)

my_matrix 是一个表,其中的列是这种类型: (String, Integer, Integer, String, String, Integer, Double, Integer, Double, Double, Integer, Double, Double, Integer, Double, Double, Integer, Double ,整数,字符串)。表中有 3300 行。

> my_matrix = as(knime.in, "matrix")
> dput(head(my_matrix, 5))
structure(c("KS", "OH", "NJ", "OH", "OK", "128", "107", "137", 
" 84", " 75", "415", "415", "415", "408", "415", "noIP", "noIP", 
"noIP", "IP", "IP", "Vmail", "Vmail", "noVmail", "noVmail", "noVmail", 
"25", "26", " 0", " 0", " 0", "265.1", "161.6", "243.4", "299.4", 
"166.7", "110", "123", "114", " 71", "113", "45.07", "27.47", 
"41.38", "50.90", "28.34", "197.4", "195.5", "121.2", " 61.9", 
"148.3", " 99", "103", "110", " 88", "122", "16.78", "16.62", 
"10.30", " 5.26", "12.61", "244.7", "254.4", "162.6", "196.9", 
"186.9", " 91", "103", "104", " 89", "121", "11.01", "11.45", 
" 7.32", " 8.86", " 8.41", "10.0", "13.7", "12.2", " 6.6", "10.1", 
" 3", " 3", " 5", " 7", " 3", "2.70", "3.70", "3.29", "1.78", 
"2.73", "1", "1", "0", "2", "3", "notChurning", "notChurning", 
"notChurning", "notChurning", "notChurning"), .Dim = c(5L, 20L
), .Dimnames = list(c("Row0", "Row1", "Row2", "Row3", "Row4"), 
    c("State", "Account length", "Area code", "International plan", 
    "Voice mail plan", "Number vmail messages", "Total day minutes", 
    "Total day calls", "Total day charge", "Total eve minutes", 
    "Total eve calls", "Total eve charge", "Total night minutes", 
    "Total night calls", "Total night charge", "Total intl minutes", 
    "Total intl calls", "Total intl charge", "Customer service calls", 
    "Churn")))

我修改了我的代码如下。我现在没有错误,但是先验算法找不到规则:

    require(arules)
    #require(arulesViz)
    my_matrix= as(knime.in,"matrix");
    my_rows= nrow(my_matrix);
    my_cols= ncol(my_matrix);
    my_matrix = append(my_matrix[,4:5], my_matrix[,20])
    my_matrix <- array(my_matrix, dim=c(my_rows, 3))
    head(my_matrix, 2)
    my_cols = 3
    my_dedup_matrix= matrix(nrow=my_rows, ncol=my_cols);
    for (i in 1:my_rows) {
        m = my_matrix[i,];
        my_unique= unique(m);
        for (j in 1:my_cols) {
            my_dedup_matrix[i,j] = my_unique[j];
        }
    }
    my_new_data= apply(my_dedup_matrix, 1, function(x) x[!is.na(x)]);
    my_transactions = as(as.list(my_new_data), "transactions");
    summary(my_transactions)



## Mine association rules.
rules = apriori(my_transactions, parameter = list(supp= 0.1, conf= 0.8, target = "rules"));
summary(rules); # no rules found
inspect(rules); # no rules found
#inspect(rules[1:10])

【问题讨论】:

  • 这里出了点问题。您声明某些列是 Double 的。你能在 R 节点之前转到 Knime 节点,然后截取第二个选项卡(显示域的那个)
  • 您的信心相当高。将其设置为零并缓慢增加,直到找到一组合理的规则。
  • 我设置了置信度 = 0.1,但我获得了如下规则:{} => {noVmail}
  • 这基本上意味着在 10% 的情况下没有 Vmail。这是一个非常有效的规则。我认为这不再是技术问题,而仅仅是如何使用先验的问题。调整支持和信心确实有点棘手。在这里提供帮助需要您拥有完整的数据集。
  • 是的,你是对的。非常感谢你。谁知道我用其他帐户提交的类似问题会如何结束?

标签: r matrix sparse-matrix knime


【解决方案1】:

您需要先将 my_matrix 转换为列表。 as(as.list(my_matrix),"transactions") 但是,我得到一个不同的错误。

as(as.list(matrix_temp),"transactions")
transactions in sparse format with
 15 transactions (rows) and
 5 items (columns)

【讨论】:

  • 有你的原始代码`my_transactions = as(my_matrix, "transactions");`我得到Error in asMethod(object) : matrix is not logical or a numeric 0-1 matrix!
  • 我现在没有错误。正如您在我编辑的问题中看到的那样,我已经按照您的技巧修改了我的代码。但是,先验算法没有给我任何规则
  • 我认为最好排除答案并提出一个新问题。我的答案现在悬而未决。在上面添加了评论。
  • 有些奇怪:我曾尝试使用 knime box 获取规则,但我得到了更多规则
猜你喜欢
  • 2022-11-28
  • 2020-06-22
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 2023-03-14
相关资源
最近更新 更多