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

标签 java python machine-learning classification regression

<分区>

我有大约 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),则会获得加分。

最佳答案

方法 (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)

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

Xtest = vect.transform(new_documents)
ytest = regr.predict(Xtest)

这是一个简单的线性回归。实际上,我希望利息期限不是文本内容的线性函数,但这可能会让您入门。下一步是选择任何关于机器学习或统计学的教科书,这些教科书处理更高级的回归模型。

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

关于java - 如何从文本文档中预测连续值(时间)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15087322/

相关文章:

java - 使用GGTS从Eclipse到Grails的JAVA BOX SDK

python - Django 按最高点赞数排序

optimization - hogwild 风格的 SGD 在 tensorflow 的 word2vec 中表现不佳

python - Keras Conditional GAN 训练不好

machine-learning - Mahout 基于项目的推荐引擎,没有偏好值

java - AlertDialog 中的 Android TabActivity

java - 配置spring boot embedded tomcat - 更新setenv文件

java - 如何在使用 Java 邮件发送 html 电子邮件时嵌入多个图像

python - 如何改善使用函数时的 eXSLT 性能问题

python - "WARNING conda.gateways.disk:exp_backoff_fn(47): Uncaught backoff with errno 41"期间 "conda install"