классификация в R

#r #classification

#r #классификация

Вопрос:

Я пытаюсь выполнить наивную байесовскую классификацию в R. Я видел этот пример по следующей ссылке.

http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Classification/Naïve_Bayes

Там всего 2 строки. Сначала классифицируйте, а затем прогнозируйте.

 > classifier<-naiveBayes(iris[,1:4], iris[,5]) 
> table(predict(classifier, iris[,-5]), iris[,5])
  

Этот же код в «наборе данных iris» работает нормально. Но когда я применил то же самое к своему набору данных, я получаю некоторые ошибки.

Мой набор данных содержит 4 атрибута и 4-й атрибут — атрибут class.

 > str(data1)
'data.frame':   1370 obs. of  4 variables:
 $ TenScore     : num  85 84.2 67.2 91.5 79.3 ...
 $ TwelthScore  : num  69 87.9 67.5 82.7 72.4 ...
 $ GDegreeScore : num  63.3 70.7 61.3 78.2 62.1 ...
 $ Got_Admission: chr  "No" "No" "No" "No" ...
  

Итак, я попробовал это.

 > classifier<-naiveBayes(data1[,1:3], data1[,4]) 
> table(predict(classifier, data1[,-4]), data1[,4])
Error in table(predict(classifier, data1[, -4]), data1[, 4]) : 
  all arguments must have the same length
  

Я получаю вышеуказанную ошибку при выполнении команды. Когда я просто использую predict, он выдает мне следующий вывод.

 > predict(classifier, data1[,-4])
factor(0)
Levels:

str(data1) 'data.frame': 1370 obs. of 4 variables: 
$ TenScore : num 85 84.2 67.2 91.5 79.3 ... 
$ TwelthScore : num 69 87.9 67.5 82.7 72.4 ... 
$ GDegreeScore : num 63.3 70.7 61.3 78.2 62.1 ... 
$ Got_Admission: chr "No" "No" "No" "No" ...
  

Пожалуйста, объясните мне, в чем ошибки и как их устранить?

Комментарии:

1. Вам нужно опубликовать как минимум str(data1).

2. > str(data1) ‘data.frame’: 1370 объектов из 4 переменных: $ TenScore : число 85 84,2 67,2 91,5 79,3 … Двенадцатый балл: 69 87,9 67,5 82,7 72,4 … $ GDegreeScore : число 63.3 70.7 61.3 78.2 62.1 … $ Got_Admission: chr «Нет», «Нет», «Нет», «Нет» …

Ответ №1:

Я могу выдать ту же ошибку, изменив 5-й столбец iris на character:

 > iris[ , 5] <- as.character(iris[ , 5] )
> classifier<-naiveBayes(iris[,1:4], iris[,5]) 
>  table(predict(classifier, iris[,-5]), iris[,5])
Error in table(predict(classifier, iris[, -5]), iris[, 5]) : 
  all arguments must have the same length
#  The fix -------->
 iris[ , 5] <- factor(as.character(iris[ , 5] ))
 classifier<-naiveBayes(iris[,1:4], iris[,5]) 
 table(predict(classifier, iris[,-5]), iris[,5])
#  ---- output--------            
             setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         47         3
  virginica       0          3        47
  

Поэтому вам, вероятно, следует сделать это:

   data1$ Got_Admission <- factor(data1$ Got_Admission)
  

Если ваш столбец ‘Got_Admission’ не в порядке, вы получите запутанные результаты (эффект GIGO). Вы должны сначала взглянуть на содержимое с:

 table(data1$ Got_Admission)
  

Комментарии:

1. Я получаю следующий результат `Нет Да Нет 1320 50 Да 0 0` Не могли бы вы, пожалуйста, объяснить, что это означало?

2. Таблица не поступает должным образом. Результат содержит 3 строки в таблице. первый: *, Нет, Да, второй: Нет, 1320, 50 и третий: да, 0, 0

3. У меня такая же проблема. Я преобразовал значения ответов в значение фактора, но я продолжаю получать ту же ошибку «все аргументы должны иметь одинаковую длину»

4. Что ж, с iris набором данных я не получаю никаких ошибок, используя код (и рекомендуемое исправление) в моем ответе четырехлетней давности.