我目前正在研究推荐系统,并想知道其他研究人员如何获取或生成测试数据来评估系统的性能?
最近我开始学习Hadoop和Mahout.我想知道Hadoop文件系统目录中的目录路径.
在hadoop-1.2.1/conf/core-site.xml中,我指定了:
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/Li/File/Java/hdfstmp</value>
<description>A base for other temporary directories.</description>
</property>
Run Code Online (Sandbox Code Playgroud)
在Hadoop文件系统中,我有以下目录:
lis-macbook-pro:Java Li$ hadoop fs -ls
Found 4 items
drwxr-xr-x - Li supergroup 0 2013-11-06 17:25 /user/Li/output
drwxr-xr-x - Li supergroup 0 2013-11-06 17:24 /user/Li/temp
drwxr-xr-x - Li supergroup 0 2013-11-06 14:50 /user/Li/tweets-seq
-rw-r--r-- 1 Li supergroup 1979173 2013-11-05 15:50 /user/Li/u.data
Run Code Online (Sandbox Code Playgroud)
现在/ user/Li /输出目录在哪里?
我试过了:
lis-macbook-pro:usr Li$ cd /user/Li/output
-bash: cd: /user/Li/output: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以我认为/ user/Li/output是相对路径而不是绝对路径.
然后我在/ Users/Li/File/Java/hdfstmp中搜索它.有两个文件夹:
DFS
mapred
但我仍然无法在/ Users/Li/File/Java/hdfstmp中找到/ user/Li/output.
我必须在一个非常庞大的矩阵上执行k-means聚类(大约300.000x100.000值超过100Gb).我想知道我是否可以使用R软件来执行此操作或weka.我的计算机是一个多处理器,具有8Gb的RAM和数百Gb的可用空间.
我有足够的空间进行计算,但加载这样的矩阵似乎是R的一个问题(我不认为使用bigmemory包会帮助我和大矩阵自动使用我的所有RAM然后我的交换文件,如果没有足够的空间).
所以我的问题是:我应该使用什么软件(最终与其他一些软件包或自定义设置相关联).
谢谢你的帮助.
注意:我使用linux.
我正在尝试使用Mahout对用户进行聚类和分类.目前我处于规划阶段,我的想法与想法完全混合,因为我对这个领域相对较新,所以我坚持数据格式化.
假设我们有两个数据表(足够大).在第一个表中有用户及其操作.每个用户至少有一个动作,他们也可以有太多的动作.表中有大约10000个不同的user_actions和数百万条记录.
user - user_action
u1 - a
u2 - b
u3 - a
u1 - c
u2 - c
u2 - c
u1 - b
u4 - f
u4 - e
u1 - e
u1 - d
u5 - d
Run Code Online (Sandbox Code Playgroud)
在另一个表中,有行动类别.每个动作可能没有或多个类别.共有60个类别.
user_action - category
a - cat1
b - cat2
c - cat1
d - NULL
e - cat1, cat3
f - cat4
Run Code Online (Sandbox Code Playgroud)
我将尝试使用Mahout构建用户分类模型,但我不知道应该做什么.我应该创建什么类型的用户向量?或者我真的需要用户向量吗?
我想我需要创造类似的东西;
u1 (a, c, b, e, d)
u2 (b, c, c)
u3 …Run Code Online (Sandbox Code Playgroud) 我是一个新手试图了解如何将mahout和hadoop用于协同过滤.我有单节点cassandra设置.我想从cassandra获取数据
我在哪里可以找到hadoop的明确安装步骤,然后mahout与cassandra一起工作?
在过去的几天里,我一直在与Mahout合作,试图创建一个推荐引擎.我正在研究的项目有以下数据:
我现在正在试验我们拥有的全套的1/3(即18M建议中的6M).在我试过的任何配置中,Mahout都提供了相当令人失望的结果.一些建议需要1.5秒,而其他建议需要一分钟.我认为建议的合理时间应该在100毫秒左右.
Mahout为什么这么慢?
我正在使用以下JVM参数在Tomcat上运行应用程序(即使添加它们并没有太大的区别):
-Xms4096M -Xmx4096M -da -dsa -XX:NewRatio=9 -XX:+UseParallelGC -XX:+UseParallelOldGC
Run Code Online (Sandbox Code Playgroud)
以下是我的实验的代码段:
用户相似度1:
DataModel model = new FileDataModel(new File(dataFile));
UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(10, Double.NEGATIVE_INFINITY, similarity, model, 0.5);
recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
Run Code Online (Sandbox Code Playgroud)
用户相似度2:
DataModel model = new FileDataModel(new File(dataFile));
UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
UserNeighborhood neighborhood = new CachingUserNeighborhood(new NearestNUserNeighborhood(10, similarity, model), model);
recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
Run Code Online (Sandbox Code Playgroud)
项目相似度1:
DataModel dataModel = new FileDataModel(new File(dataFile)); …Run Code Online (Sandbox Code Playgroud) 我在我的4核笔记本电脑上以伪分布式模式运行任务.如何确保有效使用所有核心.目前,我的工作跟踪器显示一次只执行一项工作.这是否意味着只使用一个核心?
以下是我的配置文件.
CONF /芯-site.xml中:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
Run Code Online (Sandbox Code Playgroud)
CONF/HDFS-site.xml中:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Run Code Online (Sandbox Code Playgroud)
CONF/mapred-site.xml中:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
Run Code Online (Sandbox Code Playgroud)
编辑:根据答案,我需要在mapred-site.xml中添加以下属性
<property>
<name>mapred.map.tasks</name>
<value>4</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>4</value>
</property>
Run Code Online (Sandbox Code Playgroud) 我想运行我在Mahout In Action中找到的代码:
package org.help;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.NamedVector;
import org.apache.mahout.math.VectorWritable;
public class SeqPrep {
public static void main(String args[]) throws IOException{
List<NamedVector> apples = new ArrayList<NamedVector>();
NamedVector apple;
apple = new NamedVector(new DenseVector(new double[]{0.11, 510, 1}), "small round green apple");
apples.add(apple);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path = new Path("appledata/apples");
SequenceFile.Writer writer = new SequenceFile.Writer(fs, conf, path, Text.class, …Run Code Online (Sandbox Code Playgroud) 我正在学习Mahout并阅读"Mahout in Action".
当我尝试在第7章SimpleKMeansClustering.java中运行示例代码时,弹出了一个异常:
线程"main"中的异常java.io.IOException:错误的值类:0.0:null不是org.apache.hadoop.io.SequenceFile $ Reader.next中的类org.apache.mahout.clustering.WeightedPropertyVectorWritable(SequenceFile.java: 1874)在SimpleKMeansClustering.main(SimpleKMeansClustering.java:95)
我在mahout-0.5上成功了这个代码,但在mahout-0.6上我看到了这个异常.即使我将目录名从clusters-0更改为clusters-0-final,我仍然面临此异常.
KMeansDriver.run(conf, vectors, new Path(canopyCentroids, "clusters-0-final"), clusterOutput, new TanimotoDistanceMeasure(), 0.01, 20, true, false);//First, I changed this path.
SequenceFile.Reader reader = new SequenceFile.Reader(fs, new Path("output/clusters/clusteredPoints/part-m-00000"), conf);//I double checked this folder and filename.
IntWritable key = new IntWritable();
WeightedVectorWritable value = new WeightedVectorWritable();
int i=0;
while(reader.next(key, value)) {
System.out.println(value.toString() + " belongs to cluster " + key.toString());
i++;
}
System.out.println(i);
reader.close();
Run Code Online (Sandbox Code Playgroud)
有没有人对这个例外有任何想法?我一直试图解决它很长时间,并没有任何想法.互联网上的消息来源很少.
提前致谢
在Mahout中,使用API方法支持基于项目的推荐:
ItemBasedRecommender.mostSimilarItems(int productid, int maxResults, Rescorer rescorer)
Run Code Online (Sandbox Code Playgroud)
但是在Spark Mllib中,似乎ALS中的API可以获取推荐的产品,但必须通过以下方式提供userid:
MatrixFactorizationModel.recommendProducts(int user, int num)
Run Code Online (Sandbox Code Playgroud)
有没有办法获得基于类似产品的推荐产品,而无需提供用户ID信息,类似于mahout执行基于项目的推荐的方式.
recommendation-engine mahout apache-spark apache-spark-mllib
mahout ×10
hadoop ×4
java ×3
k-means ×2
apache-spark ×1
cassandra ×1
filesystems ×1
mapreduce ×1
path ×1
performance ×1
r ×1
system ×1
test-data ×1
testing ×1
weka ×1