Как исправить ошибку «несовместимые размеры» из функции cor () - PullRequest
1 голос
/ 17 мая 2019

Я использую функцию предиката (), чтобы предсказать переменную покупки в blackFriday_test. Когда я использую cor () с этими переменными в качестве аргументов, я получаю сообщение об ошибке «несовместимые измерения».

Я попытался посмотреть на измерение переменной «Покупки» в blackFriday_test, которое равно 107516, но прогнозируемые значения оказались равны только 32955.

Данные были загружены с https://www.kaggle.com/mehdidag/black-friday.

library(caret)

blackFriday <- read.csv("BlackFriday.csv", stringsAsFactors = T)

Здесь я удаляю первые две функции, потому что они являются идентификаторами

nblackFriday <- blackFriday[, 3:12]
set.seed(189)
train <- sample(nrow(nblackFriday), as.integer(0.8 * nrow(nblackFriday)), replace = F)

blackFriday_train <- nblackFriday[train, ]
blackFriday_test <- nblackFriday[-train, ]

Удаление NA из двух переменных, где они присутствуют

nblackFriday$Product_Category_2 <- ifelse(is.na(nblackFriday$Product_Category_2), mean(nblackFriday$Product_Category_2, na.rm = T), nblackFriday$Product_Category_2)
nblackFriday$Product_Category_3 <- ifelse(is.na(nblackFriday$Product_Category_3), mean(nblackFriday$Product_Category_3, na.rm = T), nblackFriday$Product_Category_3)

blackFriday_train$Product_Category_2 <- nblackFriday$Product_Category_2[train]
blackFriday_train$Product_Category_3 <- nblackFriday$Product_Category_3[train]

m <- train(Purchase ~ ., data = blackFriday_train, method = "rpart")

p <- predict(m, blackFriday_test)

cor(p, blackFriday_test$Purchase)
```
#This is where I get the error

I expect the number of predicted values to be the same as the number of rows in blackFriday_test, but they are not.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Вы заменили NA в вашем тренировочном наборе, но не в вашем тестовом наборе, поэтому эти случаи пропускаются.

> head(blackFriday_test)
   Gender   Age Occupation City_Category Stay_In_Current_City_Years Marital_Status Product_Category_1
3       F  0-17         10             A                          2              0                 12
6       M 26-35         15             A                          3              0                  1
15      F 51-55          9             A                          1              0                  5
16      F 51-55          9             A                          1              0                  4
21      M 26-35         12             C                         4+              1                  5
22      M 26-35         12             C                         4+              1                  8
   Product_Category_2 Product_Category_3 Purchase
3                  NA                 NA     1422
6                   2                 NA    15227
15                  8                 14     5378
16                  5                 NA     2079
21                 14                 NA     8584
22                 NA                 NA     9872

Просто вменяйте их, как вы делали для тренировочного комплекта, который работает, как и ожидалось.

blackFriday_test$Product_Category_2 <- nblackFriday$Product_Category_2[-train]
blackFriday_test$Product_Category_3 <- nblackFriday$Product_Category_3[-train]
p <- predict(m, blackFriday_test)
> length(p) == nrow(blackFriday_test)
[1] TRUE
> cor(p, blackFriday_test$Purchase)
[1] 0.7405558

Попробуйте использовать функции разбиения и предварительной обработки каретки. Для меня они помогают избежать таких простых ошибок.

0 голосов
/ 17 мая 2019

Вы заменили пропущенные значения в наборе данных поезда, но не в тестовом.Таким образом, ваш прогноз в тесте меньше, чем число строк в вашем наборе тестовых данных.

Вы должны применить свои операции (например, заменить NA) к полному набору данных и разбить на поезд / тест после.Таким образом, оба набора данных будут схожими, и прогноз будет работать лучше.

...