2016-01-04 8 views
1

Я использую R-код в платформе Knime, платформе для данных аналитика. Я беру матрицу из блока, который читает таблицу из файла xls. Эта матрица называется «my_matrix». Затем я хотел бы применить алгоритм apriori к трем столбцам этой матрицы, но я получаю вышеуказанную ошибку. Есть идеи? Обратите внимание, что "сумма (is.na (my_matrix))" имеет выход [1] 0Ошибка в t (as (from, "ngCMatrix)): ошибка в оценке аргумента 'x' при выборе метода для функции 't': Ошибка в asM

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, Integer, String). В таблице 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]) 
+0

Здесь что-то не так. Вы заявляете, что некоторые столбцы Double. Можете ли вы перейти к Knime Node до узла R и сделать снимок экрана второй вкладки (той, которая показывает домены) – CAFEBABE

+0

Ваша уверенность довольно высока. Установите его на ноль и медленно увеличивайте, пока не найдете разумный набор правил. – CAFEBABE

+0

Я положил доверие = 0,1, но я получаю такие правила, как: {} => {noVmail} – Peter

ответ

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) 
+0

какая ошибка? – Peter

+0

С оригинальным кодом 'my_transactions = as (my_matrix," transaction ");' Я получил 'Ошибка в asMethod (object): матрица не является логической или числовой матрицей 0-1!' – CAFEBABE

+0

Я не получаю эту ошибку , Это странно – Peter

 Смежные вопросы

  • Нет связанных вопросов^_^