Я пытаюсь понять результаты объекта предсказания с помощью функции confusionMatrix() функции Caret, которая требует ввода таблицы в соответствии с http://artax.karlin.mff.cuni.cz/r-help/library/caret/html/confusionMatrix.html, моя таблица() создает результаты, которые я понять, но не дружит с функцией confusionMatrix()создание фрейма данных для confusionMatrix (ввод 0, однако получение необычного dataframe
Вот соответствующий фрагмент кода:.
#MODEL CREATION
#convert categorical A to E values , into numeric 1 to 5 in order to be regression friendly
training_data_subset_numeric <- training_data_subset;
testing_data_subset_numeric <- testing_data_subset;
training_data_subset_numeric$classe <- as.numeric(training_data_subset$classe)
testing_data_subset_numeric$classe <- as.numeric(testing_data_subset$classe)
#model
exercise.model <- glm(formula = classe ~ ., data = training_data_subset_numeric)
#MODEL EVALUATION
exercise.prediction <- predict(exercise.model,newdata = testing_data_subset_numeric)
eval_table <- table(exercise.prediction,testing_data_subset$classe)
tail(eval_table)
exercise.prediction A B C D E
4.35504232913594 1 0 0 0 0
4.47219097065568 1 0 0 0 0
4.50838854075835 1 0 0 0 0
4.6173551930011 0 1 0 0 0
4.69261223447305 0 1 0 0 0
4.73297946213265 0 1 0 0 0
в принципе мне нужно преобразовать выше вывод, к кадру данных с 1 цв соответствует pr Значение ediction, что следует за этим правилом:
Если в колонке А 1, чем предсказанное значение равно 1
Если в колонке Б равно 1, чем предсказанное значение равно 2
Если в колонке С 1, чем прогнозировалось значение равно 3
Если в колонке D равен 1, чем предсказанное значение равно 4
Если в колонке Е 1, чем предсказанное значение равно 5
Поэтому я написал эту функцию, чтобы получить работу:
getPredictResults<- function(x)
{
# create 1 column & n row data frame
num <- data.frame(matrix(0, ncol = 1, nrow = nrow(x)));
for (r in 1:nrow(x)) {
for (c in 1:ncol(x)) {
#if column A has value 1 than num[1,r] <- 1
if (x[r,'A']== 1)
{
num[1,r] <- 1;
}
#if column B has value 1 than num[1,r] <- 2
else if (x[r,'B']== 1)
{
num[1,r] <- 2;
}
#if column C has value 1 than num[1,r] <- 3
else if (x[r,'C']== 1)
{
num[1,r] <- 3;
}
#if column D has value 1 than num[1,r] <- 4
else if (x[r,'D']== 1)
{
num[1,r] <- 4;
}
#if column E has value 1 than num[1,r] <- 5
else if (x[r,'E']== 1)
{
num[1,r] <- 5;
}
else
{
}
}#end inner for
}#end outer for
return (num);
}#end function
exercise.prediction_df <- getPredictResults(eval_table)
Однако при вводе:
head(exercise.prediction_df)
Im получая необычный выход, вот нижний фрагмент:
2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
V4840 V4841 V4842 V4843 V4844 V4845 V4846 V4847 V4848 V4849 V4850 V4851 V4852 V4853 V4854 V4855 V4856 V4857
1 5 1 4 5 2 2 5 5 1 2 5 4 5 5 1 5 5 4
2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
V4858 V4859 V4860 V4861 V4862 V4863 V4864 V4865 V4866 V4867 V4868 V4869 V4870 V4871 V4872 V4873 V4874 V4875
1 4 2 1 2 5 1 4 5 2 1 4 5 2 4 2 4 4 2
2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
V4876 V4877 V4878 V4879 V4880 V4881 V4882 V4883 V4884 V4885 V4886 V4887 V4888 V4889 V4890 V4891 V4892 V4893
1 5 1 1 4 1 2 2 1 1 5 1 4 1 1 1 1 1 1
2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
V4894 V4895 V4896 V4897 V4898 V4899 V4900 V4901 V4902 V4903 V4904
1 1 1 1 1 1 1 1 1 2 2 2
2 NA NA NA NA NA NA NA NA NA NA NA
[ reached getOption("max.print") -- omitted 4 rows ]
Дальнейшие исследования показывают:
> ncol(exercise.prediction_df)
[1] 4904
> nrow(exercise.prediction_df)
[1] 4904
Какой Ncol() должен возвращать только 1 & nrow(), очевидно, может быть любое целое число.
Как исправить эту функцию, чтобы создать правильный фрейм данных как входной сигнал для функции confusionMatrix()?
Спасибо.
Я не спросил, был ли этот алгоритм оптимальным? Это даже не было подходящим форумом, пожалуйста, внимательно прочитайте мой вопрос, спасибо. – cyber101