python中已有一个多键词典,也是一个多值词典.我需要一个python字典,它是:
例:
# probabilistically fetch any one of baloon, toy or car
d['red','blue','green']== "baloon" or "car" or "toy"
Run Code Online (Sandbox Code Playgroud)
d ['red'] == d ['green']的概率很高,d ['red']!= d ['red']的概率很低但可能
单个输出值应根据来自键的规则进行概率确定(模糊),例如:在上述情况下规则可以是如果键具有"红色"和"蓝色"则返回"气球"80%的时间如果只有蓝色然后返回"玩具"15%的时间其他"汽车"5%的时间.
应该设计setitem方法,以便可以遵循:
d["red", "blue"] =[
("baloon",haseither('red','green'),0.8),
("toy",.....)
,....
]
Run Code Online (Sandbox Code Playgroud)
上面使用谓词函数和相应的概率为字典分配多个值.而不是上面的赋值列表,甚至字典作为赋值将是更可取的:
d["red", "blue"] ={
"baloon": haseither('red','green',0.8),
"toy": hasonly("blue",0.15),
"car": default(0.05)
}
Run Code Online (Sandbox Code Playgroud)
如果"红色"或绿色存在,上述气球将返回80%的时间,如果蓝色存在则返回玩具15%的时间,并且在没有任何条件的情况下返回5%的时间.
是否有任何现有的数据结构已经满足python中的上述要求?如果没有那么如何修改multikeydict代码以满足python中的上述要求?
如果使用字典,那么可以有配置文件或使用适当的嵌套装饰器来配置上述概率谓词逻辑,而不必硬编码if\else语句.
注意:上面是一个基于规则的自动响应程序应用程序的有用自动机,因此,如果python中有任何类似的基于规则的框架,即使它不使用字典结构,也要告诉我吗?
python dictionary recommendation-engine fuzzy-logic data-structures
如何使用类似于stackoverflow/digg/reddit的推荐系统实现网站?即,用户提交内容,并且网站需要根据项目的受欢迎程度来计算某种"热度".流程如下:
如何实现计算提交项目"热度"的算法,最好是实时计算?是否有最佳实践或设计模式?
我会假设算法考虑以下因素:
例如,获得持续涓涓细流的项目将持续保持某种程度的"热",而在首次提交时获得一票选票的项目将跳到"热点"列表的顶部但随后随着投票而下降停止进来
(我使用的是MySQL + PHP,但我对一般设计模式感兴趣).
algorithm semantic-web recommendation-engine machine-learning collective-intelligence
我打算记录所有用户操作,如查看过的页面,标签等.
什么是一个良好的精益解决方案来挖掘数据以获得建议?
说像:
编辑:
这是我在这个领域缺乏知识,这是一个开始的限制因素.
让我重新说一下.
让我们说像stackoverflow或Quora这样的网站.我记录了所有浏览不同问题的浏览历史记录,Quora会进行数据挖掘工作,查看并填充相关问题.我会回答有关育儿的问题,下次登录时我会看到有关育儿的问题.与亚马逊购物同上.我浏览手表和搅拌机,两天后他们发给我一份我感兴趣的相关购物项目的邮件.
我的问题是,他们如何有效地存储这些数据,然后对其进行数据挖掘以显示下一个相关的数据集.
我想知道stumbleupon如何为其用户推荐文章?
它是使用神经网络还是某种机器学习算法,还是实际根据用户"喜欢"推荐文章,还是根据兴趣区域中的标签推荐文章?使用标签,我的意思是,使用像基于项目的协作过滤等?
recommendation-engine machine-learning similarity collaborative-filtering
所以我正在使用Spark 1.0.0构建一个隐式反馈推荐模型,我试图按照他们在协同过滤页面上的示例:http: //spark.apache.org/docs/latest/mllib-collaborative-filtering. HTML#明确-VS隐反馈
我甚至加载了他们在示例中引用的测试数据集:http: //codesearch.ruethschilling.info/xref/apache-foundation/spark/mllib/data/als/test.data
但是,当我尝试运行隐式反馈模型时:val alpha = 0.01 val model = ALS.trainImplicit(rating,rank,numIterations,alpha)
(评级是完全来自他们的数据集和等级= 10,numIterations = 20的评级)我收到以下错误:
scala> val model = ALS.trainImplicit(ratings, rank, numIterations, alpha)
<console>:26: error: overloaded method value trainImplicit with alternatives:
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and>
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,alpha: Double)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and>
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,blocks: Int,alpha: Double)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and>
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,blocks: Int,alpha: Double,seed: Long)org.apache.spark.mllib.recommendation.MatrixFactorizationModel
cannot be applied to (org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating], Int, Int, Double)
val model = ALS.trainImplicit(ratings, rank, numIterations, …Run Code Online (Sandbox Code Playgroud) 对于推荐服务,我正在一组用户 - 项目交互上训练矩阵分解模型(LightFM).为了使矩阵分解模型产生最佳结果,我需要将我的用户和项目ID映射到从0开始的连续范围的整数ID.
我在这个过程中使用了一个pandas DataFrame,我发现MultiIndex非常方便创建这个映射,如下所示:
ratings = [{'user_id': 1, 'item_id': 1, 'rating': 1.0},
{'user_id': 1, 'item_id': 3, 'rating': 1.0},
{'user_id': 3, 'item_id': 1, 'rating': 1.0},
{'user_id': 3, 'item_id': 3, 'rating': 1.0}]
df = pd.DataFrame(ratings, columns=['user_id', 'item_id', 'rating'])
df = df.set_index(['user_id', 'item_id'])
df
Out:
rating
user_id item_id
1 1 1.0
1 3 1.0
3 1 1.0
3 1 1.0
Run Code Online (Sandbox Code Playgroud)
然后允许我像这样获得连续的地图
df.index.labels[0] # For users
Out:
FrozenNDArray([0, 0, 1, 1], dtype='int8')
df.index.labels[1] # For items
Out:
FrozenNDArray([0, 1, 0, 1], dtype='int8') …Run Code Online (Sandbox Code Playgroud) 我在 Towards Data Science/medium/ 等方面发现了数十篇关于使用 imdb 数据制作推荐引擎的文章(基于用户对电影的评分,我们应该向这些用户推荐哪些电影)。这些文章从基于用户的内容过滤和基于项目的内容过滤的“基于内存的方法”开始。我的任务是制作一个推荐引擎,由于没有一个套装真正关心或了解这一点,我想做最低限度的工作(这似乎是基于用户的内容过滤)。
问题是,我所有的数据都是二元的(没有评分,只是根据其他用户购买的物品,我们是否应该向类似用户推荐物品-这实际上类似于所有媒体文章都从彼此那里窃取的漫画,但是没有一篇中等文章给出了如何做到这一点的例子)。
所有文章都使用 Pearson Correlation 或余弦相似度来确定用户相似度,我可以将这些方法用于二进制维度(购买与否),如果可以,如何,如果不是,是否有不同的方法来衡量用户相似度?
我正在使用 python 顺便说一句。我在想也许使用汉明距离(有没有不好的原因)
我正在改变一个广泛使用的类,将类昂贵的初始化从类构造函数移动到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
我尝试将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
algorithm ×3
python ×2
apache-spark ×1
c# ×1
c#-3.0 ×1
data-science ×1
dictionary ×1
digg ×1
fuzzy-logic ×1
keras ×1
lstm ×1
numpy ×1
pandas ×1
semantic-web ×1
sequence ×1
similarity ×1
sql ×1