我刚刚开始与Mahout合作,有一件让我困惑的事情是缺乏线性回归.即使是更加困难的逻辑回归,在某种程度上也会受到研究的支持,但它在线性回归方面都是无声的!
据我所知,OLS是最容易解决的问题之一 -
Y = Xb + e
具有b =(X ^ TX)^( - 1)X ^ TY的线性回归解,其中X ^ T是X的转置,并且如果矩阵(X ^ TX)变为奇异(即不可逆)那么它是即使使用广义逆的解决方案存在,也可以完美地显示错误消息.
X ^ TX和X ^ Y的计算只是元素乘积和和的计算,这可能是我理解的最简单的MapReduce.
(这让我觉得......是否有任何模块支持计算回归系数所需的原生矩阵运算?这会使回归模块确实不必要......)
我错过了一些让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,值是向量?如果没有,有什么方法我可以设置它,所以它是?
我们使用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));
是一个可接受的修复?
我有一个非常标准的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?如何在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) 谁能告诉我mahout的RecommenderIRStatsEvaluator是如何工作的?更具体地说,它是如何随机分割训练和测试数据以及比较结果的数据?根据我的不足,您需要某种理想/预期的结果,您需要将其与推荐算法的实际结果进行比较,以找出TP或FP,从而计算精度或召回率.但看起来mahout提供的精确/召回得分没有理想/结果.
给定以下格式的数据(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包含在序列文件的某处)吗?
我找到的一些参考文献,但不确定它们是否相关:
我正在使用Mahout和Pearson Correlation算法根据他们对几个项目的偏好来比较和查找类似的用户.我遇到的问题是Mahout和/或Pearson忽略了为每个项目选择相同偏好的用户.有没有人知道是否有办法配置Mahout,不要忽略为每个项目选择相同偏好值的人.
我已完成以下步骤:
mvn --version正确显示已安装的maven.http://svn.apache.org/repos/asf/mahout/trunk现在,我进入mahout/trunk并尝试做mvn clean install或mvn 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) 请考虑以下代码段:
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不在这里工作.我能做什么?