我正在设计一个网站,该网站围绕着根据用户的口味向用户推荐各种商品的概念而构建.(即他们评价的项目,添加到收藏夹列表中的项目等).这方面的一些例子是亚马逊,Movielens和Netflix.
现在,我的问题是,我不知道从这个系统的数学部分开始.我愿意学习所需的数学,只是我不知道需要什么类型的数学.
我查看了Grouplens.org上的一些出版物,特别是" 迈向可扩展的kNN CF算法:探索群集的有效应用".(pdf)我很擅长理解所有内容,直到第5页"预测生成"
ps我不是在寻找对正在发生的事情的解释,虽然这可能会有所帮助,但我对我需要知道的数学更感兴趣.这样我就可以理解发生了什么.
math coldfusion recommendation-engine collaborative-filtering
亚马逊有"买了这个项目的顾客也买了".
我想知道并希望将其添加到我制作的购物车中.
我在数据库中需要哪些字段?任何网站,博客或资源?
你能建议我应该如何编码它的机制吗?
我正在改变一个广泛使用的类,将类昂贵的初始化从类构造函数移动到Lazy Initialized属性.下面是一个例子(在c#中):
之前:
public class ClassA
{
public readonly ClassB B;
public void ClassA()
{
B = new ClassB();
}
}
Run Code Online (Sandbox Code Playgroud)
后:
public class ClassA
{
private ClassB _b;
public ClassB B
{
get
{
if (_b == null)
{
_b = new ClassB();
}
return _b;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我正在改变的类中有更多这些属性,有些在某些情境中没有使用(因此是懒惰),但如果使用它们,它们可能会被重复调用.
不幸的是,这些属性通常也在课堂内使用.这意味着私有变量(_b)有可能被方法直接使用而不进行初始化.
有没有办法只在类中提供公共属性(B),或者甚至是在需要时初始化的替代方法?
这是从程序员转发的(显然不够主观):https: //softwareengineering.stackexchange.com/questions/34270/best-methods-for-lazy-initialization-with-properties
在过去的几天里,我一直在与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) 我尝试将LSTM模型用于下一个篮子推荐.我想应用与本文相同的方法:下一个篮子推荐的动态循环模型
在我的情况下,我有一些用户,他们在不同的时间购买一些物品.所以我设计了我的X数据,如:
user ID timestep sequence items
user1 1 array(1, 20)
user1 2 ...
user2 1 ...
user2 2 ...
user2 3 ...
user3 1 ...
user3 1 ...
Run Code Online (Sandbox Code Playgroud)
序列项表示具有形状(1,20)的数组.这些向量是在每个序列期间购买的每个项目(使用word2vec生成)的平均表示.
然后我设计我的标签y:
user ID label
user1 np.array(1, 6000)
user2 ...
user3 ...
Run Code Online (Sandbox Code Playgroud)
标签用户表示每个用户的下一个订单,在他们过去的订单之后表示X数据.另外,标签是[1 0 1 0 0 0 .. 1]之类的向量,其中1表示用户购买了该项目,否则为0.
因此,我想使用LSTM来训练每个用户的过去序列以预测下一个购买序列.下面,我定义了一个LSTM模型,我没有返回序列,因为我有一个用户标签.
model_rnn = Sequential()
model_rnn.add(LSTM(20, return_sequences=False, input_shape=(None, 20)))
model_rnn.add(Dropout(0.2))
model_rnn.add(Dense(nb_classes))
model_rnn.add(Activation("sigmoid"))
model_rnn.compile(loss='binary_crossentropy', optimizer="Adagrad")
n_index = X.index.values
n_sample = int(len(X.index.values)*0.7)
user_index = np.random.choice(n_index, n_sample, replace=False)
n_epochs = 10
for _ in …Run Code Online (Sandbox Code Playgroud) recommendation-engine sequence market-basket-analysis lstm keras
我有一个大约70万用户的数据库以及他们观看/收听/阅读/购买/等的项目.我想建立一个推荐引擎,推荐基于具有相似品味的用户喜欢的新项目,以及实际上找到用户可能希望在我正在构建的社交网络上成为朋友的人(类似于最后.调频).
我的要求如下:
请不要给出像"使用pysuggest或mahout"这样的答案,因为那些实现了大量的算法,我正在寻找最适合我的数据/使用的算法.我一直对Neo4j感兴趣,以及如何将它们表示为用户和项目之间的连接图.
theory algorithm recommendation-engine data-mining collaborative-filtering
我一直在阅读有关使用矩阵分解进行协同过滤的内容,但我似乎找不到一个处理向系统添加新用户或项目或让用户评价新项目的示例.在这些情况下,需要重新计算项目用户矩阵和分解,是否正确?如何在大量用户和项目中表现良好?有办法解决吗?
谢谢
python recommendation-engine machine-learning svd collaborative-filtering
尝试使用Spark MLLib的ALS构建推荐系统.
目前,我们正在尝试每天为所有用户预建建议.我们使用简单的隐式反馈和ALS.
问题是,我们有20M用户和30M产品,并且要调用主要的predict()方法,我们需要为用户和产品进行笛卡尔连接,这太大了,并且可能需要几天才能生成连接.有没有办法避免笛卡尔联合使流程更快?
目前我们有8个节点,64Gb的RAM,我认为它应该足够的数据.
val users: RDD[Int] = ??? // RDD with 20M userIds
val products: RDD[Int] = ??? // RDD with 30M productIds
val ratings : RDD[Rating] = ??? // RDD with all user->product feedbacks
val model = new ALS().setRank(10).setIterations(10)
.setLambda(0.0001).setImplicitPrefs(true)
.setAlpha(40).run(ratings)
val usersProducts = users.cartesian(products)
val recommendations = model.predict(usersProducts)
Run Code Online (Sandbox Code Playgroud) recommendation-engine machine-learning bigdata apache-spark apache-spark-mllib
python ×2
algorithm ×1
apache-spark ×1
bigdata ×1
c# ×1
c#-3.0 ×1
coldfusion ×1
data-mining ×1
evaluation ×1
keras ×1
lstm ×1
mahout ×1
math ×1
mysql ×1
performance ×1
sequence ×1
svd ×1
theory ×1