如何从文本文档中预测连续值(时间)?

asm*_*ier 5 python java regression classification machine-learning

我有大约3000个文本文档,这些文档与文档"有趣"的持续时间有关.因此,假设文档1包含300行文本和内容,这导致持续时间为5.5天,而另一个包含40行文本的文档导致6.7天的持续时间为"有趣",依此类推.

现在的任务是根据文本内容预测感兴趣的持续时间(这是一个连续的值).

我有两个想法来解决这个问题:

  1. 使用http://radimrehurek.com/gensim/simserver.html等技术构建类似文档的模型.当新文档到达时,可以尝试找到过去10个最相似的文档,并简单地计算其持续时间的平均值,并将该值作为新文档感兴趣的持续时间的预测.
  2. 将文件分为持续时间类别(例如1天,2天,3-5天,6-10天......).然后训练分类器以基于文本内容预测持续时间的类别.

想法#1的优点是我也可以计算出我的预测的标准偏差,而对于想法#2,我不太清楚,我如何计算我的预测的不确定性的类似度量.另外我不清楚选择哪些类别从分类器中获得最佳结果.

那么,有一条经验法则是如何构建一个系统来最好地预测文本文档中的连续值(如时间)吗?是应该使用分类器还是应该使用类似文档中的平均值?我在该领域没有真正的经验,并且想知道,您认为哪种方法可能会产生最好的结果.如果您了解可用于解决此问题的简单现有技术(基于Java或Python),则会给出奖励积分.

Fre*_*Foo 3

方法(1)称为k-近邻回归。这是完全有效的。还有无数其他回归方法,例如使用文档标记作为特征的简单多元回归。

以下是使用scikit-learn (*)拟合线性回归模型的骨架脚本:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDRegressor

# build a term-document matrix with tf-idf weights for the terms
vect = TfidfVectorizer(input="filename")
Xtrain = vect.fit_transform(documents)         # documents: list of filenames

# now set ytrain to a list of durations, such that ytrain[i] is the duration
# of documents[i]
ytrain = ...

# train a linear regression model using stochastic gradient descent (SGD)
regr = SGDRegressor()
regr.fit(Xtrain, ytrain)
Run Code Online (Sandbox Code Playgroud)

就是这样。如果您现在有新文档想要预测感兴趣的持续时间,请执行以下操作

Xtest = vect.transform(new_documents)
ytest = regr.predict(Xtest)
Run Code Online (Sandbox Code Playgroud)

这是一个简单的线性回归。实际上,我希望兴趣持续时间不是文本内容的线性函数,但这可能会让您开始。下一步是选择任何有关机器学习或统计的教科书来处理更高级的回归模型。

(*) 我是这个项目的贡献者,所以这不是公正的建议。几乎任何半像样的机器学习工具包都有线性回归模型。