R中的文本分析:如何在机器学习分类器中除了词元之外添加变量?

如何考虑额外的变量

我在R中使用quanteda进行分类任务,我想在词袋之外加入一些变量供模型考虑。例如,我计算了基于字典的情感指数,我希望将这些变量包括在内,以便模型能够考虑到它们。

这些是我为每个文档创建的指数。

dfneg <-  cbind(negDfm1@docvars$label , negDfm1@x ,posDfm@x ,  angDfm@x , disgDfm1@x)colnames(dfneg) <- c("label","neg" , "pos" , "ang" , "disg")dfneg <- as.data.frame(dfneg)

这是我将要处理的文档特征矩阵:

DFM

newsdfm <- dfm(newscorp, tolower = TRUE , stem = FALSE ,  remove_punct = TRUE, remove = stopwords("english"),verbose=TRUE)newst<- dfm_trim(newsdfm , min_docfreq=2 , verbose=TRUE)id_train <- sample(1:6335, 5384, replace = FALSE)# create docvar with IDdocvars(newst, "id_numeric") <- 1:ndoc(newst)# get training settrain <- dfm_subset(newst, id_numeric %in% id_train)# get test set (documents not in id_train)test <- dfm_subset(newst, !id_numeric %in% id_train) 

最后,我运行了一个分类器,例如朴素贝叶斯分类器或Lasso

朴素贝叶斯分类器或Lasso

NBmodel <- textmodel_nb(train , train@docvars$label)lasso <- cv.glmnet(train, train@docvars$label, family="binomial", alpha=1, nfolds=10,type.measure="class")

这是我在创建dfm之后尝试过的方法,但没有成功

 newsdfm@Dimnames$features$negz <- dfneg$neg newsdfm@Dimnames$features$posz <- dfneg$pos newsdfm@Dimnames$features$angz <- dfneg$ang newsdfm@Dimnames$features$disgz <- dfneg$disg

然后我想在创建newsdfm之前创建文档变量

   docvars(newscorp , "negz") <- dfneg$neg   docvars(newscorp , "posz") <- dfneg$pos   docvars(newscorp , "angz") <- dfneg$ang   docvars(newscorp , "disgz") <- dfneg$disg

但在那个时候,我不知道如何告诉分类器,除了词袋之外,我也希望它考虑这些文档变量。

总之,我希望模型既能考虑每个文档的所有词矩阵,也能考虑我为每个文档创建的指数。

任何建议都将不胜感激

提前感谢,

Carlo


回答:

在内部,dfm是稀疏矩阵,但如果可能的话,最好避免直接操作它们。

对于textmodel_nb()添加新特征,您需要将它们添加到dfm中。正如您可能预期的那样,最简单的方法是使用cbind()将它们添加到dfm中。

在您的例子中,您可以运行如下代码:

additional_features <- dfneg[, c("neg", "pos", "ang", "disg")] %>% as.matrix()newsdfm_added <- cbind(newsdfm, additional_features)

如您所见,我首先创建了一个额外特征的矩阵,然后运行cbind()。当您执行cbind()时,您将得到以下警告:

Warning messages:1: cbinding dfms with different docnames 2: cbinding dfms with overlapping features will result in duplicated features 

这表明您必须确保额外特征的列名不应在原始的dfm中出现。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注