【问题标题】:randomForest in R object not found errorR 对象中的 randomForest 未找到错误
【发布时间】:2015-12-28 03:12:54
【问题描述】:
# init
libs <- c("tm", "plyr", "class", "RTextTools", "randomForest")
lapply(libs, require, character.only = TRUE)

# set options
options(stringsAsFactors = FALSE)

# set parameters
labels <- read.table('labels.txt')
path <- paste(getwd(), "/data", sep="")

# clean text
cleanCorpus <- function(corpus) {
  corpus.tmp <- tm_map(corpus, removePunctuation)
  corpus.tmp <- tm_map(corpus.tmp, removeNumbers)
  corpus.tmp <- tm_map(corpus.tmp, stripWhitespace)
  corpus.tmp <- tm_map(corpus.tmp, content_transformer(tolower))
  corpus.tmp <- tm_map(corpus.tmp, stemDocument, language = "english")
  corpus.tmp <- tm_map(corpus.tmp, removeWords, stopwords("english"))
  return(corpus.tmp)
}

# build TDM
generateTDM <- function(label, path) {
  s.dir <- sprintf("%s/%s", path, label)
  s.cor <- Corpus(DirSource(directory = s.dir), readerControl = list(language = "en"))
  s.cor.cl <- cleanCorpus(s.cor)
  s.tdm <- TermDocumentMatrix(s.cor.cl)
  s.tdm <- removeSparseTerms(s.tdm, 0.7)
  return(list(name = label, tdm = s.tdm))
}

tdm <- lapply(labels, generateTDM, path = path)

# attach name
bindLabelToTDM <- function(tdm) {
  s.mat <- t(data.matrix(tdm[["tdm"]]))
  s.df <- as.data.frame(s.mat, stringsAsFactors = FALSE)
  s.df <- cbind(s.df, rep(tdm[["name"]], nrow(s.df)), row.names = NULL)
  colnames(s.df)[ncol(s.df)] <- "targetlabel"
  return(s.df) 
}

labelTDM <- lapply(tdm, bindLabelToTDM)

# stack
tdm.stack <- do.call(rbind.fill, labelTDM)
tdm.stack[is.na(tdm.stack)] <- 0

# hold-out
train.idx <- sample(nrow(tdm.stack), ceiling(nrow(tdm.stack) * 0.7))
test.idx <- (1:nrow(tdm.stack)) [- train.idx]

tdm.lab <- tdm.stack[, "targetlabel"]
tdm.stack.nl <- tdm.stack[, !colnames(tdm.stack) %in% "targetlabel"]

train <- tdm.stack[train.idx, ]
test <- tdm.stack[test.idx, ]

train$targetlabel <- as.factor(train$targetlabel)
label.rf <- randomForest(targetlabel ~ ., data = train, ntree = 5000, mtry = 15, importance = TRUE)

我正在尝试使用 randomForest 算法对文本文件进行多类分类。我得到的错误可能是因为最后一行或倒数第二行。

Error in eval(expr, envir, enclos) : object '∗' not found

tdm.stack 包含的列的名称是在文档中找到的单词,它们的单元格值是它们的频率。最后一列包含类值。

我已经尝试了所有我无法解决问题的方法。请帮忙。

【问题讨论】:

  • 我们可以看看你的文本文件吗?
  • 文本文件是来自 arxiv 的研究文章,我使用 xpdf 从 pdf 转换为 txt。我正在尝试将它们分类为特定领域,例如 cs.AI 或 cs.CV 等。我只是将它们归类为一类,所以这不是多标签分类而是多类。并且我的数据集也映射到每个 txt 的一个类。共有29个班级。
  • 在我看来,您正在尝试用英语进行分类,但遇到了一些非标准字符(可能是名称)。如果是这样,也许看看这个? stackoverflow.com/questions/18153504/…
  • 我将这两行添加到我的 cleanCorpus 函数 corpus.tmp
  • 感谢您的帮助。我发布了一个新问题stackoverflow.com/questions/32867905/…

标签: r machine-learning classification text-mining random-forest


【解决方案1】:

该错误是由我的语料库中存在非 ASCII 字符引起的。 我将此行添加到我的 cleanCorpus 函数中以删除非 ASCII 字符

corpus.tmp <- tm_map(corpus.tmp, function(x) iconv(x, "latin1", "ASCII", sub=""))

这解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2017-08-26
    • 2013-11-25
    相关资源
    最近更新 更多