我很困惑基于项目的推荐是什么,正如" Mahout in Action " 一书中所描述的那样.书中有算法:
for every item i that u has no preference for yet
for every item j that u has a preference for
compute a similarity s between i and j
add u's preference for j, weighted by s, to a running average
return the top items, ranked by weighted average
Run Code Online (Sandbox Code Playgroud)
如何计算项目之间的相似度?如果使用内容,是不是基于内容的推荐?
我正在使用Spark来构建推荐系统原型.经过一些教程后,我能够MatrixFactorizationModel从我的数据中训练出来.
然而,Spark mllib训练的模型只是一个Serializable.如何使用此模型为真实用户推荐?我的意思是,如果用户数据增加,我怎样才能将模型保存到某种数据库中或更新它?
例如,由Mahout推荐库训练的模型可以存储到像Redis这样的数据库中,然后我们可以稍后查询推荐的项目列表.但是我们如何才能在Spark中做类似的事情呢?有什么建议吗?
recommendation-engine mahout mahout-recommender apache-spark
有没有办法在使用Spark Mllib ALS时使用从用户点击流派生的次要用户操作来改进建议?
我已经完成了这里提到的显式和隐式反馈示例:https://spark.apache.org/docs/latest/mllib-collaborative-filtering.html对train()和trainImplicit()使用相同的评级RDD方法.
这是否意味着我需要在每个次要用户操作的RDD(用户,项目,操作)的同一模型对象上调用trainImplicit()?或者训练多个模型,根据每个动作检索推荐,然后线性组合它们?
对于其他背景,问题的关键是Spark ALS是否可以模拟像Mahout的火花项目相似性工作这样的辅助操作.任何指针都会有所帮助.
我有一个非常标准的Mahout基于项目的新闻文章推荐器(使用点击数据,因此首选项是布尔值):
DataModel dataModel = new ReloadFromJDBCDataModel(
new PostgreSQLBooleanPrefJDBCDataModel(localDB, ...)
);
ItemSimilarity itemSimilarity = new TanimotoCoefficientSimilarity(dataModel);
ItemBasedRecommender recommender = new GenericBooleanPrefItemBasedRecommender(dataModel, itemSimilarity);
Run Code Online (Sandbox Code Playgroud)
我正在尝试将基于内容的知识注入到推荐器中,因此我最强烈推荐的文章不仅在正常的协同过滤意义上是相似的,而且在他们共享许多常用术语的意义上也是相似的.
文章内容相似性(TF-IDF向量的余弦相似性)使用Mahout批次预先计算并从DB读取.但是,会有很多对没有相似性数据的文章.这有两个原因:
文章内容相似性数据将比用户项目偏好的数据模型更新更少,因此在新文章计算其内容相似性之前将存在滞后.
理想情况下,我想将所有内容相似性数据加载到内存中,因此我只会为每篇文章存储前20个相似度.
所以,对于一对给定的文章,我有:
在内容相似性不为空的情况下,我想使用其值来加权项目相似性,以便增强具有类似内容的文章.
我的问题是:
ItemSimilarity或作为一个Rescorer?谁能告诉我mahout的RecommenderIRStatsEvaluator是如何工作的?更具体地说,它是如何随机分割训练和测试数据以及比较结果的数据?根据我的不足,您需要某种理想/预期的结果,您需要将其与推荐算法的实际结果进行比较,以找出TP或FP,从而计算精度或召回率.但看起来mahout提供的精确/召回得分没有理想/结果.
我是Mahout的新手,我正在尝试通过'Mahout in Action',它使用0.5版本.早期的一个例子要求使用斜率一推荐器.这个推荐者仍然包含在Mahout 0.9中吗?我查看了文档,但找不到它.也许它改变了名字?
谢谢你的帮助!
我想知道分布式mahout推荐器作业如何org.apache.mahout.cf.taste.hadoop.item.RecommenderJob处理csv文件,其中存在重复和三重用户,项目条目但具有不同的首选项值.例如,如果我有一个包含类似条目的.csv文件
1,1,0.7
1,2,0.7
1,2,0.3
1,3,0.7
1,3,-0.7
Mahout的数据模型将如何处理这个问题?它会为给定用户,项目条目(例如,对于用户项目1,2,偏好将是(0.7 + 0.3))总结偏好值,或者是否对值进行平均(例如,对于用户项目1,2,偏好是(0.7 + 0.3)/ 2)或者它是否默认为最后一个用户,它检测到的项目条目(例如,对于用户1,2,优先级值设置为0.3).
我问这个问题是因为我正在考虑基于多个偏好指标的推荐(项目视图,喜欢,不喜欢,保存到购物车等).如果数据模型将偏好值视为线性权重(例如,项目视图加上保存到愿望列表具有比项目视图更高的偏好分数)将是有帮助的.如果datamodel已经通过求和来处理这个问题,它将为我节省额外map-reduce的杂项,以根据多个指标对总分进行排序和计算.任何人都可以在mahout上提供任何澄清.csv datamodel在这方面的工作org.apache.mahout.cf.taste.hadoop.item.RecommenderJob将非常感激.谢谢.
我有一个这样的CSV文件:
typeA,typeB typeA,typeC typeA,typeC typeA,typeB
这里,typeA,typeB和typeC是3种不同类型的实体.将类型B和C视为两种不同类型的项,并将类型A视为用户.
我可以通过将此CSV文件提供给Myrrix来构建模型.这个文件只有两种类型,B(以前的CSV文件中的"B"项目在这里作为用户)和D.现在,假设我有另一个这样的CSV文件:
typeB,typeD typeB,typeD typeB,typeD typeB,typeD
在这里,我想获得typeB for typeB的建议.我必须有一个单独的Myrrix实例吗?是否可以有两个型号并选择推荐哪个?使用Apache Mahout这样做很容易,但是我觉得我不能像Myrrix那样获得实时setPreference和模型刷新的乐趣吗?
我很感激任何想法来解决这个问题.
Mahout是否提供了确定内容之间相似性的方法?
我想将基于内容的推荐作为Web应用程序的一部分.我知道Mahout善于利用用户评级矩阵并根据它们提出建议,但我对协作(基于评级)的建议不感兴趣.我想评分两段文本的匹配程度,然后推荐与我在用户个人资料中为用户存储的文本最匹配的项目...
我已经阅读了Mahout的文档,看起来它主要促进了协作(基于评级)的建议,但不是基于内容的建议......这是真的吗?
recommendation-engine mahout content-based-retrieval mahout-recommender