-1

我们正在开发一个推荐系统,我得到的问题可能是向量本身。

所以,目前公司已经有了向用户列出推荐列表的功能,但是他们使用的每个功能的权重是手动定义的。所以我们决定先训练数据,然后用机器学习的方法获得权重。然后得到用户的反馈,作为下一个推荐预测的标签。

  1. 是否有任何理想可以为每个功能获得最佳权重?比如grid_search,梯度下降?

  2. 我认为我们不能扁平化(sklearn:一种热编码或 pandas:get_dummies)值是向量的特征。因为我想获得特征的权重,而不是 subfeature_1,subfeaturevalue_2。那么,flatten在这里是行不通的,我得试着改变距离来做呢?但是如何将它们组合在一起(改变距离函数并使用grid_search)?

4

2 回答 2

0

https://github.com/Grasin98/recommender_live推荐系统的基础知识。希望你觉得它相关。

你可以访问这个。是的,有像网格搜索这样的算法可以帮助找到最佳权重矩阵。

网格搜索意味着您有一组模型(它们的参数值彼此不同,位于网格上)。然后你要做的是训练每个模型并使用交叉验证对其进行评估。然后,您选择表现最好的那个。

举一个具体的例子,如果你使用支持向量机,你可以为 gamma 和 C 使用不同的值。因此,例如,你可以有一个网格,其 (gamma, C) 具有以下值: (1, 1 ), (0.1, 1), (1, 10), (0.1, 10)。它是一个网格,因为它就像 gamma 的 [1, 0.1] 和 C 的 [1, 10] 的乘积。网格搜索基本上会为这四对 (gamma, C) 值中的每一个训练一个 SVM,然后对其进行评估使用交叉验证,并选择一个做得最好的。

对于梯度下降:程序的第一步要求训练数据集的顺序是随机的。这是为了混淆对系数进行更新的顺序。因为在每个训练实例之后都会更新系数,所以更新会到处乱跳,相应的成本函数也会如此。通过混合更新系数的顺序,它可以利用这种随机游走并避免它分心或卡住。对于非常大的训练数据集,使用随机梯度下降可以更快地学习,并且通常您只需要少量通过数据集即可达到良好或足够好的系数集,例如通过数据集 1 到 10 次。

所以据我所知,有知道完美的方法。它基本上取决于很多事情。您可能知道,算法应用程序 SVM、决策树、随机森林也是如此,它们都会根据情况给出变化。

至于第二个问题,我不确定它试图传达什么。希望这可以帮助。

于 2018-06-06T13:41:50.560 回答
0

可以使用神经网络(反向传播)来获得特征权重。如果您想避免使用 NN,可以使用单个感知器。 这里(解释在这里)是一个应用于文本分类的单感知器算法的例子,你需要让它适应你的特征。

于 2018-06-06T13:39:03.410 回答