训练数据并获得每个功能的权重

时间:2018-06-06 13:18:48

标签: python machine-learning recommendation-engine recommender-systems

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

因此,目前,该公司已经具有向用户列出推荐列表的功能,但是他们使用的每个功能的权重是手动定义的。因此,我们决定训练数据,然后通过机器学习方法获得重量。然后获得用户的反馈,这些反馈将成为下一个推荐预测的标签。

  1. 是否有任何理想可以获得每个功能的最佳重量?比如grid_search,Gradient descent?

  2. 我认为我们不能平坦(sklearn:一个热编码或pandas:get_dummies)这个值是一个向量的特征。因为我想获得该特征的权重而不是subfeature_1,subfeaturevalue_2。 所以,flatten在这里不起作用,我必须尝试改变距离来做到这一点吗?但如何将它们组合在一起(改变距离函数并使用grid_search)?

2 个答案:

答案 0 :(得分:0)

使用神经网络(反向传播)可以获得特征权重。如果您想避免使用NN,可以使用单个感知器。 Here(解释为here)是应用于文本分类的单个感知器算法的示例,您需要根据您的功能进行调整。

答案 1 :(得分:0)

https://github.com/Grasin98/recommender_live了解推荐系统的基础知识。希望你发现它是相关的。

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

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

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

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

所以根据我的说法,我们知道完美的方法。它基本上取决于许多事情。您可能知道,这对于算法应用程序SVM,决策树,随机森林来说都是相同的,都会根据情况给出变化。

根据第二个问题,我不确定它要传达的是什么。 希望这会有所帮助。