【问题标题】:Training data and get the weight for each feature训练数据并获得每个特征的权重
【发布时间】:2018-06-06 13:18:48
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      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、决策树、随机森林也是如此,都会根据情况给出变化。

      就第二个问题而言,我不确定它试图传达什么。 希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-04-01
        • 2017-10-07
        • 2014-02-11
        • 1970-01-01
        • 2019-03-18
        • 2019-06-22
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        相关资源
        最近更新 更多