Ошибка «переменная класса должна быть фактором» для наборов данных csv-read - PullRequest
1 голос
/ 01 апреля 2020

Я ищу дискретные непрерывные функции в наборов данных, в частности, с использованием контролируемой . Оказывается, у [есть пакет / метод для этого] 1 , отлично! Но поскольку у меня нет опыта работы с RI, у меня есть некоторые проблемы, и я был бы очень признателен, если бы вы могли помочь.

Я получаю сообщение об ошибке

переменная класса должна быть фактором.

Я посмотрел пример онлайн, и у них, похоже, нет этой проблемы, но у меня есть. Обратите внимание, что я не совсем понимаю синтаксис V2 ~ ., за исключением того, что V2 должно быть именем столбца.

library(caret)
library(Rcpp)
library(arulesCBA)

filename <- "wine.data"
dataset <- read.csv(filename, header=FALSE)
dataset2 <- discretizeDF.supervised(V2 ~ ., dataset, method = "mdlp")

R сообщает о следующей ошибке:

Ошибка в .parseformula (формула, данные): переменная класса должна быть фактором!

Вы можете найти набор данных wine.data здесь: https://pastebin.com/hvDbEtMN Первый параметр discretizeDF.supervised является формулой, и это, похоже, проблема.

Пожалуйста, помогите! Заранее спасибо.

1 Ответ

1 голос
/ 01 апреля 2020

Как написано в виньетке, это предназначено для реализации:

нескольких контролируемых методов для преобразования непрерывных переменных в категориальные переменные (фактор), подходящие для анализа правил ассоциации и построения ассоциативных классификаторов.

Если вы посмотрите на столбец V2, он будет непрерывным:

test = read.csv("wine_dataset.txt",header=FALSE)
str(test)
'data.frame':   178 obs. of  14 variables:
 $ V1 : int  1 1 1 1 1 1 1 1 1 1 ...
 $ V2 : num  14.2 13.2 13.2 14.4 13.2 ...
 $ V3 : num  1.71 1.78 2.36 1.95 2.59 1.76 1.87 2.15 1.64 1.35 ...

Вам нужна цель, которая является категоричной, чтобы al go мог найти подходящие методы для дискретизации. это для нахождения ассоциаций. Например:

#this cuts V2 into 4 categories according to where they fall in the range
test$V2 = factor(cut(test$V2,4,labels=1:4))
dataset2 <- discretizeDF.supervised(V2 ~ ., dataset, method = "mdlp")

Выше приведен один из способов обойти это, но вам нужно найти способы хорошо разрезать V2. Если вам нужно использовать цель как непрерывную, то вы можете использовать discretizeDF от arules, и я также вижу, что ваш первый столбец только 1,2,3:

test = read.csv("wine_dataset.txt",header=FALSE)
test2 = data.frame(test[,1:2],discretizeDF(test[,-c(1:2)]))
...