【问题标题】:"Class variable needs to be a factor" error for csv-read datasetscsv 读取数据集的“类变量需要成为一个因素”错误
【发布时间】:2020-07-12 21:14:03
【问题描述】:

我希望离散化 数据集中的连续特征,特别是使用有监督的 。原来 [有一个包/方法]1,太棒了!但由于我不精通 R,我遇到了一些问题,如果您能提供帮助,我将不胜感激。

我收到一个错误

类变量需要是一个因素。

我在网上看了一个例子,他们似乎没有这个问题,但我有。注意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(formula, data) 中的错误:需要为类变量 一个因素!

您可以在这里找到数据集 wine.data:https://pastebin.com/hvDbEtMN discretizeDF.supervised 的第一个参数是一个公式,这似乎是问题所在。

请帮忙!提前谢谢你。

【问题讨论】:

  • 尝试数据$V2
  • 感谢您的澄清!这有帮助。顺便说一句,将列设置为一个因子而不是整数解决了这个问题。

标签: machine-learning discretisation r syntax r syntax discretization


【解决方案1】:

正如小插图中所写,这是为了实现:

几种将连续变量转换为 适用于关联规则挖掘的分类变量(因子) 并构建关联分类器。

如果您查看您的 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 ...

您需要的是一个分类目标,以便算法可以找到合适的方法来离散化它以找到关联。例如:

#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切好。如果您需要将目标用作连续,那么您可以使用 arules 中的discretizeDF,而且我还看到您的第一列仅是 1,2,3:

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

【讨论】:

  • 感谢您的回答!事实上,我需要一个分类目标,但是当我使用适当的列时,我得到了同样的错误。但是,正如您所指出的,主要问题是目标列未指定为因子,这应该/可以通过切割连续数据或使用已经整数列并将其转换为因子来完成。我解决了这个问题,它奏效了!
  • 哦,太好了。很高兴你找到了让它工作的方法:)
猜你喜欢
  • 2019-07-19
  • 2022-11-15
  • 2011-07-08
  • 2022-12-09
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
相关资源
最近更新 更多