标签: mahout

为什么Mahout还没有线性回归

我刚刚开始与Mahout合作,有一件让我困惑的事情是缺乏线性回归.即使是更加困难的逻辑回归,在某种程度上也会受到研究的支持,但它在线性回归方面都是无声的!

据我所知,OLS是最容易解决的问题之一 -

Y = Xb + e

具有b =(X ^ TX)^( - 1)X ^ TY的线性回归解,其中X ^ T是X的转置,并且如果矩阵(X ^ TX)变为奇异(即不可逆)那么它是即使使用广义逆的解决方案存在,也可以完美地显示错误消息.

X ^ TX和X ^ Y的计算只是元素乘积和和的计算,这可能是我理解的最简单的MapReduce.

(这让我觉得......是否有任何模块支持计算回归系数所需的原生矩阵运算?这会使回归模块确实不必要......)

我错过了一些让Mahout难以计算回归的东西吗?

hadoop mapreduce mahout

4
推荐指数
1
解决办法
2129
查看次数

如何阅读Mahout群集输出

我已经在Mahout教程的合成控制数据上运行了k-Means聚类算法,并且想知道是否有人可以解释如何解释输出.我运行了clusterdump并收到了类似这样的输出(截断以节省空间):

CL-592{n=57 c=30.726, 29.813...] r=[3.528, 3.597...]}
Weight : [props - optional]: Point:
1.0 : [distance=27.453962995925863]: [24.672, 35.261, 30.486...]
1.0 : [distance=27.675053294846002]: [25.592, 29.951, 34.188...]
1.0 : [distance=28.97727289419493]: [30.696, 32.667, 34.223...]
1.0 : [distance=21.999685652862784]: [32.702, 35.219, 30.143...]
...
CL-598{n=50 c=[29.611, 29.769...] r=[3.166, 3.561...]}
Weight : [props - optional]:  Point:
1.0 : [distance=27.266203490250472]: [27.679, 33.506, 23.594...]
1.0 : [distance=28.749781351838173]: [34.727, 28.325, 30.331...]
1.0 : [distance=32.635136046420186]: [27.758, 33.859, 29.879...]
1.0 : [distance=29.328974057024624]: [29.356, 26.793, 25.575...]
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释如何阅读这个吗?据我所知,CL -__是一个聚类ID,其次是n =聚类中的点数,c =作为向量的质心,r =作为向量的半径,然后是聚类中的每个点.它是否正确?此外,我如何知道哪个聚簇点与哪个输入点匹配?即被描述为键值对的点,其中键是点的某种ID,值是向量?如果没有,有什么方法我可以设置它,所以它是?

mahout

4
推荐指数
1
解决办法
5592
查看次数

Mahout Euclidean实施中的NaN距离

我们使用EuclideanDistanceSimilarity类来计算使用Hadoop的一堆项目的相似性.

不幸的是,尽管与物品非常相似,但是有些物品得到零或很少,导致类似的物品.

我想我已经在EuclideanDistanceSimilarity类中跟踪到了这一行:

double euclideanDistance = Math.sqrt(normA - 2 * dots + normB);

传递给sqrt的值有时是负数,在这种情况下返回NaN.我想也许在那里应该有一个Math.abs,但是我的数学不够强大,无法理解欧几里德计算是如何重新排列的,所以不确定效果会是什么.

任何人都可以更好地解释数学并确认是否

double euclideanDistance = Math.sqrt(Math.abs(normA - 2 * dots + normB));

是一个可接受的修复?

hadoop euclidean-distance mahout

4
推荐指数
1
解决办法
352
查看次数

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个相似度.

所以,对于一对给定的文章,我有:

  • 项目相似度(Tanimoto)0 <= s1 <= 1
  • 内容相似度(余弦值)0 <= s2 <= 1(可能为空)

在内容相似性不为空的情况下,我想使用其值来加权项目相似性,以便增强具有类似内容的文章.

我的问题是:

  • 尝试结合这些措施是合理的,还是我尝试疯狂的事情?
  • 将这两个值组合成一个相似度得分的合理公式是什么?
  • 这最好是作为一个习惯ItemSimilarity或作为一个Rescorer

recommendation-engine mahout mahout-recommender

4
推荐指数
1
解决办法
3351
查看次数

在ubuntu 12.04上安装mahout - E:无法找到包mahout

如何在ubuntu 12.04上安装mahout?

sudo apt-get install mahout
Reading package lists... Done
Building dependency tree        
Reading state information... Done
E: Unable to locate package mahout


https://ccp.cloudera.com/display/CDHDOC/Mahout+Installation
To install Mahout on an Ubuntu or other Debian system:
$ sudo apt-get install mahout
Run Code Online (Sandbox Code Playgroud)

ubuntu hadoop mahout hadoop-plugins

4
推荐指数
1
解决办法
3562
查看次数

mahout的推荐评估器如何工作

谁能告诉我mahout的RecommenderIRStatsEvaluator是如何工作的?更具体地说,它是如何随机分割训练和测试数据以及比较结果的数据?根据我的不足,您需要某种理想/预期的结果,您需要将其与推荐算法的实际结果进行比较,以找出TP或FP,从而计算精度或召回率.但看起来mahout提供的精确/召回得分没有理想/结果.

mahout mahout-recommender

4
推荐指数
1
解决办法
2524
查看次数

生成SequenceFile

给定以下格式的数据(tag_uri image_uri image_uri image_uri ...),我需要将它们转换为Hadoop SequenceFile格式,以便Mahout进一步处理(例如聚类)

http://flickr.com/photos/tags/100commentgroup http://flickr.com/photos/34254318@N06/4019040356 http://flickr.com/photos/46857830@N03/5651576112
http://flickr.com/photos/tags/100faves http://flickr.com/photos/21207178@N07/5441742937
...
Run Code Online (Sandbox Code Playgroud)

在此之前,我将输入转换为csv(或arff),如下所示

http://flickr.com/photos/tags/100commentgroup,http://flickr.com/photos/tags/100faves,...
0,1,...
1,1,...
...
Run Code Online (Sandbox Code Playgroud)

每行描述一个标签.然后将arff文件转换为mahout使用的矢量文件以供进一步处理.我试图跳过arff生成部分,然后生成sequenceFile.如果我没有弄错,要将我的数据表示为sequenceFile,我需要将$ tag_uri作为键存储每行数据,然后将$ image_vector作为值存储.这样做的正确方法是什么(如果可能的话,我可以将每行的tag_url包含在序列文件的某处)吗?

我找到的一些参考文献,但不确定它们是否相关:

  1. 编写SequenceFile
  2. 格式化svd矩阵分解的输入矩阵(我可以将矩阵存储在这种形式中吗?)
  3. RandomAccessSparseVector(考虑到我只列出分配给定标签的图像而不是一行中的所有图像,是否可以使用此向量表示它?)
  4. SequenceFile写
  5. SequenceFile解释

hadoop vector mahout

3
推荐指数
1
解决办法
1720
查看次数

Apache Mahout + Pearson Correlation忽略每个项目具有相同首选项的用户

我正在使用Mahout和Pearson Correlation算法根据他们对几个项目的偏好来比较和查找类似的用户.我遇到的问题是Mahout和/或Pearson忽略了为每个项目选择相同偏好的用户.有没有人知道是否有办法配置Mahout,不要忽略为每个项目选择相同偏好值的人.

pearson mahout

3
推荐指数
1
解决办法
881
查看次数

尝试编译mahout但收到错误 - 无法执行mojo:resources.Build不使用pom.xml

我已完成以下步骤:

  1. 安装Java 1.6
  2. 我正在使用Ubuntu 11.10.在/etc/bash.bachrc中添加了$ JAVA_HOME路径
  3. 已安装的maven.mvn --version正确显示已安装的maven.
  4. 下载了Mahout http://svn.apache.org/repos/asf/mahout/trunk

现在,我进入mahout/trunk并尝试做mvn clean installmvn clean install -X -e,然后它给出了以下错误 -

无法执行mojo:资源.它需要一个具有现有pom.xml的项目,但构建不使用它.

我只想尝试mahout/examples中的示例.如何解决这个错误?

目录中有一个pom.xml.

全终端输出在这里:

+ Error stacktraces are turned on.
Apache Maven 2.2.1 (rdebian-6)
Java version: 1.6.0_23
Java home: /usr/lib/jvm/java-6-openjdk/jre
Default locale: en_IN, platform encoding: UTF-8
OS name: "linux" version: "3.0.0-16-generic" arch: "i386" Family: "unix"
[DEBUG] Building Maven user-level plugin registry from: '/home/kartikeya/.m2/plugin-registry.xml'
[DEBUG] Building Maven global-level plugin registry from: '/usr/share/maven2/conf/plugin-registry.xml'
[INFO] Scanning for projects...
[DEBUG] …
Run Code Online (Sandbox Code Playgroud)

maven mahout

3
推荐指数
1
解决办法
1万
查看次数

使用Java8中断/停止forEachRemaning

请考虑以下代码段:

private List<User> getUsers() throws TasteException {
        final int MAX_USERS = 100;
        List<User> userList = new ArrayList<>(MAX_USERS);
        dataModel.getUserIDs().forEachRemaining(userId -> {
            if (userList.size() == 100) {
                // stop
            }
            userList.add(new User(userId));
        });
        return userList;
    }
Run Code Online (Sandbox Code Playgroud)

break或者return不在这里工作.我能做什么?

java iterator mahout java-8

3
推荐指数
1
解决办法
3212
查看次数