【问题标题】:Using decision tree in Recommender Systems在推荐系统中使用决策树
【发布时间】:2014-05-17 16:31:29
【问题描述】:

我有一个决策树,它在列(年龄、性别、时间、日期、观看次数、点击次数)上进行了训练,该列分为两类 - 是或否 - 代表对商品 X 的购买决策。 使用这些值, 我试图预测 1000 个样本(客户)看起来像('12','Male','9:30','Monday','10','3')的概率, ('50','女','10:40','星期日','50','6') ........... 我想获得个人概率或分数,这将帮助我识别哪些客户最有可能购买商品 X。所以我希望能够对预测进行排序并仅向 5 个想要购买的客户展示特定商品X 项。 我怎样才能做到这一点? 决策树能达到目的吗? 还有其他方法吗? 我是 ML 新手,所以请原谅我的任何词汇错误。

【问题讨论】:

    标签: machine-learning scikit-learn decision-tree


    【解决方案1】:

    使用带有小样本集的决策树,你肯定会遇到过拟合问题。特别是在决策的较低级别,在树中,您将拥有成倍减少的数据来训练您的决策边界。您的数据集应该有比类别数量更多的样本,并且每个类别都有足够的样本。

    谈到决策边界,请确保您了解如何处理每个维度的数据类型。例如,“性别”是一个分类数据,其中“年龄”、“一天中的时间”等是实值输入(离散/连续)。因此,树的不同部分将需要不同的公式。否则,您的模型最终可能会将 9:30、9:31、9:32... 作为单独的类处理。

    尝试其他一些算法,从简单的算法开始,例如 k 近邻 (KNN)。有一个验证集来测试每个算法。使用 Matlab(或类似软件),您可以在其中使用库来快速尝试不同的方法,看看哪一种效果最好。这里没有足够的信息来向您推荐一些非常具体的东西。另外,

    我建议你也试试 KNN。 KNN 能够捕获数据中的亲和力。例如,产品 X 是由 20 岁左右的人在晚上在产品页面上点击 5 次后购买的。 KNN 将能够告诉您每个新客户与购买该商品的客户的距离。基于此,您可以选择前 5 个。非常容易实现,并且非常适合作为更复杂方法的基准。

    (假设浏览量和点击量是指每个客户对产品 X 的点击量和浏览量)

    【讨论】:

    • 非常感谢。那很有帮助。我已将连续数据转换为离散集。此外,由于我们还没有任何真实数据,因此评估似乎有点困难。我今天将尝试实现 KNN 听起来很有趣。有什么想法可以生成评估测试集吗?
    • 有很多方法可以将您的完整数据集拆分为训练集和验证集。目前,尝试使用 80/20 的比率将数据拆分为训练/验证。稍后,研究支持验证和 k 折交叉验证。另请查看this,它解决了有关选择验证集的一些有趣问题。祝你好运!
    • 我有某些属性,例如(年龄、性别、时间、日期、折扣百分比、类别、购买类别)。所以样本看起来像 (21,Male, 9.30, Thursday, 30%, Sports, Yes) 用于购买,而 (21,Male, 9.30, Thursday, 30%, Sports, No) 如果用户不购买它。但是,我们没有真实的购买数据。那么应该如何生成训练数据集呢?
    • 如果你能想出一个代表你的模型的贝叶斯网络(BN),你可以设置 BN 的参数(概率)并从该 BN 中采样以生成数据。在这种情况下,数据将基于概率分布生成,并将反映不同变量之间的相关性。还有其他方法可以从现有数据生成数据,但您必须拥有一些数据。这些方法包括:向模型不关心(或希望不变)的部分数据或其他类型的数据添加噪声。
    【解决方案2】:

    决策树是一个分类器,一般来说它不适合作为推荐系统的基础。但是,鉴于您只是预测购买一件商品的可能性,而不是几万件,因此使用分类器是有意义的。

    您只需对所有客户进行评分并保留购买 X 概率最高的 5 位客户,是的。还有其他问题吗?

    【讨论】:

    • 非常感谢。帮助回答我的问题。然而,当有 20 个人的概率为 1.0 时,事情确实会变得有点混乱。
    • 非常感谢肖恩。帮助回答我的问题。但是,当概率为 1.0 的人数超过 5 人时(由于训练样本量小而发生),事情确实会变得有些混乱。有一个更好的方法吗?如果我想预测购买多件商品的可能性,该怎么做?
    • 表示严重过拟合。使用更多树、更多数据或构建更浅的树。
    • [main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - 为文件 /home/rachana/dataset.csv 创建 FileDataModel 线程“main”java 中的异常。 lang.NoSuchMethodError: com.google.common.io.Files.getFileExtension(Ljava/lang/String;)Ljava/lang/String;在 org.apache.mahout.common.iterator.FileLineIterator.getFileInputStream(FileLineIterator.java:118) 在 org.apache.mahout.common.iterator.FileLineIterator.(FileLineIterator.java:79)。嗨,肖恩,我在尝试运行 Mahout 推荐器教程时遇到此错误
    • 这似乎与这个答案无关。
    猜你喜欢
    • 2016-04-09
    • 2020-06-14
    • 2014-06-10
    • 2020-11-09
    • 2010-10-12
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多