【发布时间】: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