我已在text classification模板上下载了最新更新。我创建了一个新的应用程序并通过指定app id
导入了stopwords.json和emails.jsonSELECT *
FROM vendors
ORDER BY staffpick ='YES' AND totalfav DESC,
staffpick IS NULL AND totalfav DESC,
staffpick IS NULL AND totalfav IS NULL AND vendorname ASC
然后我更改了engine.json并在其中提供了我的应用名称。
$ pio import --appid <appID> --input data/stopwords.json
$ pio import --appid <appID> --input data/emails.json
但下一步即评估失败,错误为{
"id": "default",
"description": "Default settings",
"engineFactory": "org.template.textclassification.TextClassificationEngine",
"datasource": {
"params": {
"appName": "<myapp>",
"evalK": 3
}
。错误的一部分粘贴在
empty.maxBy
然后我尝试[INFO] [Engine$] Preparator: org.template.textclassification.Preparator@79a13920
[INFO] [Engine$] AlgorithmList: List(org.template.textclassification.LRAlgorithm@420a8042)
[INFO] [Engine$] Serving: org.template.textclassification.Serving@faea4da
Exception in thread "main" java.lang.UnsupportedOperationException: empty.maxBy
at scala.collection.TraversableOnce$class.maxBy(TraversableOnce.scala:223)
at scala.collection.AbstractTraversable.maxBy(Traversable.scala:105)
at org.template.textclassification.PreparedData.<init> (Preparator.scala:160)
at org.template.textclassification.Preparator.prepare(Preparator.scala:39)
at org.template.textclassification.Preparator.prepare(Preparator.scala:35)
at io.prediction.controller.PPreparator.prepareBase(PPreparator.scala:34)
at io.prediction.controller.Engine$$anonfun$25.apply(Engine.scala:758)
at scala.collection.MapLike$MappedValues.get(MapLike.scala:249)
at scala.collection.MapLike$MappedValues.get(MapLike.scala:249)
at scala.collection.MapLike$class.apply(MapLike.scala:140)
at scala.collection.AbstractMap.apply(Map.scala:58)
但是在显示一些观察结果后训练也失败了。显示的错误是pio train
。错误的一部分粘贴在下面。
java.lang.OutOfMemoryError: Java heap space
这是因为内存不足吗?我运行了相同模板的先前版本,文本分类数据大于40mb而没有问题。评估是培训必须的吗?您也可以解释一下评估是如何进行的吗?
答案 0 :(得分:2)
所以我只能在没有前一个问题的情况下运行评估,而后一个问题与内存使用有关。
同样,当您的数据未通过empty.maxBy
读入时,会发生DataSource
错误。我的第一个猜测是,如果您使用appName
以外的其他MyTextApp
,请确保您还在EngineParamsList
脚本中的Evaluation.scala
对象中反映了该更改。您将看到在那里为评估创建DataSourceParams
对象。
对于OutofMemoryError
,您应该在训练/评估之前增加您的驾驶员记忆。这可以通过执行以下操作来完成:
pio train -- --driver-memory xG --executor-memory yG
pio eval org.template.textclassification.AccuracyEvaluation org.template.textclassification.EngineParamsList -- --driver-memory xG --executor-memory yG
设置 - 驱动程序内存到1G或2G就足够了。
至于评估的执行方式,PredictionIO默认执行k次交叉验证。为此,您的数据将分为大致等同大小的k部分。假设k为3用于说明目的。然后,对2/3的数据训练模型,并将另外1/3的数据用作测试集以估计预测性能。对每1/3数据重复此过程,然后将获得的3个性能估计值的平均值用作预测性能的最终估计值(在一般设置中,您必须自己决定什么是衡量此值的适当度量标准) 。对每个参数设置和您指定用于测试的模型重复此过程。
评估不是培训和部署的必要步骤,但是,它是一种选择应该用于培训和部署的参数/算法的方法。它被称为机器学习/统计中的模型选择。
编辑:对于文本向量化,每个文档都按以下方式进行矢量化:
说我的文件是:
“我是马可。”
第一步是对此进行标记化,这将导致以下数组/列表输出:
[“我”,“我”,“马可”]
然后,您将进行一个bigram提取,它存储以下一组令牌数组/列表:
[“我”,“我”],[“我”,“马可”],[“我”],[“我”],[“马可”]
这些中的每一个都用作构建双字母和单词计数向量的功能,然后应用tf-idf变换。请注意,要构建矢量,我们必须从每个文档中提取bigrams,以便这些特征向量可以变得非常大。您可以通过在Preparator阶段增加/减少inverseIdfMin / inverseIdfMax值来减少大量此事。