基于内容的过滤推荐器系统中连续功能的处理错误

时间:2018-07-31 16:30:46

标签: python machine-learning cosine-similarity recommender-systems

我有一个基于内容的推荐器,可以工作...很好。我相当确定这是解决此问题的正确方法(将既定的“用户”与“物品”匹配,这些物品实际上总是新的,但包含与现有物品相似的已知功能)。

在研究过程中,我发现几乎所有基于内容的过滤示例都以文章/电影为例,并且专门研究使用文本块中的编码tf-idf功能。那并不是我要处理的,但是我的大多数特征都是布尔特征,因此制作相似的向量并查看余弦距离并不是特别困难。我还有一个连续的特征,可以缩放并包含在向量中。正如我说的那样,它似乎可行,但还很不完善,我想我知道部分原因...

我正在使用的连续功能是一个评分(我们称其为“美味”),在几乎所有情况下,评分都越高,表明该商品对用户更有利。它是连续的,但也有明确的“方向”(不确定这是否是正确的术语)。一个方向的错误与另一个方向的错误是不同的。

在某些情况下,有些用户对“美味”评分中等的商品给予了很高的评价,但是从逻辑上讲,他们仍然会喜欢更美味的东西。该用户的矢量的平均美味可能为2.3。我对余弦距离的理解是,在我的模型中,如果该用户遇到两个完全相同的新项目,除了一个具有1.0的可口性,另一个具有4.5的可口性,则实际上会偏爱前者,因为它的时间较短向量之间的距离。

在这里,如何考虑到一个方向的美味度误差/距离与另一方向的误差/距离不同,如何修改或合并其他距离度量?

(作为第二个问题,我如何决定如何在布尔特征旁边最佳地缩放此连续特征?)

1 个答案:

答案 0 :(得分:1)

有两种基本方法可以解决此问题:

(1)编写您自己的距离函数。一种明显的方法是从每个向量中删除`Control Panel > Internet Options > Connections > LAN settings 元素,并独立评估该差异。在向量的其余部分上使用余弦相似度。将该数字与所需的味觉差异相结合。

(2)转换from keras.models import Sequential from keras.layers.core import Dense, Activation, Dropout from keras.layers import LSTM, BatchNormalization from tensorflow.python.keras.initializers import RandomUniform init = RandomUniform(minval=-0.05, maxval= 0.05) model = Sequential() model.add(LSTM(kernel_initializer=init, activation='relu', return_sequences=True, units=800, dropout=0.5, recurrent_dropout=0.2, input_shape=(x_train.shape[1], x_train.shape[2]) )) model.add(LSTM(kernel_initializer=init, activation='relu', return_sequences=False, units=500, dropout=0.5, recurrent_dropout=0.2 )) model.add(Dense(1024, activation='linear', kernel_initializer=init)) model.add(BatchNormalization()) model.add(Dropout(0.5)) model.add(Dense(1, activation='linear', kernel_initializer= 'normal')) model.compile(loss='mean_squared_error', optimizer='rmsprop' ) model.summary() 数据,使所得度量 是线性的。这将允许“正常”距离度量按预期方式工作。