#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
набором данных я не получаю никаких ошибок, используя код (и рекомендуемое исправление) в моем ответе четырехлетней давности.