训练数据并获取每个特征的权重



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

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

  1. 是否有任何理想的方法可以为每个特征获得最佳权重? 例如grid_search,梯度下降?

  2. 我认为我们不能扁平(sklearn:一种热编码或熊猫:get_dummies(值是向量的特征,因为我想获得功能的权重而不是subfeature_1,subfeaturevalue_2。 那么,扁平在这里不起作用,我必须尝试改变距离才能做到吗?但是如何将它们组合在一起(更改距离函数并使用grid_search(呢?

获取特征权重可以使用神经网络(反向传播(来完成。如果要避免使用 NN ,可以使用单个感知器。 这里(解释在这里(是应用于文本分类的单个感知器算法的示例,您需要使其适应您的特征。

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

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

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

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

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

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

关于第二个问题,我不确定它想传达什么。 希望这有帮助。

最新更新