假设我想根据哪些标签存在或不存在来确定我将在SO上提出问题的可能性。
让我们想象一下,我有很多关于我做过或未做过的过去问题的数据。
是否有机器学习算法可以获取此历史数据,对其进行训练,然后能够预测我未来问题的推荐概率?请注意,它必须是概率,而不仅仅是一些任意分数。
让我们假设最多有7个标签与任何给定的问题相关联,这些标签是从成千上万的超集中提取的。
我希望它能够在标签之间建立非常复杂的连接,而不是每个标签只是以“线性”方式对最终结果做出贡献(就像贝叶斯垃圾邮件过滤器中的单词一样)。
因此,例如,可能是“java”这个词增加了我的upvote概率,除非它与“数据库”一起出现,但是“数据库”可能会增加我在“ruby”时出现的upvote概率。
哦,这应该是计算上合理的(在数百万个问题上训练一两个小时)。
我应该在这里研究哪些方法?
答案 0 :(得分:4)
鉴于每条消息的标签可能不多,您可以创建“n-gram”标签并应用朴素贝叶斯。回归树也会在叶节点处产生经验概率,使用+1表示upvote,0表示没有upvote。有关可读的讲义和http://www.stat.cmu.edu/~cshalizi/350-2006/lecture-10.pdf,请参阅http://sites.google.com/site/rtranking/。
答案 1 :(得分:1)
您可以尝试多种方法(线性回归,SMV,神经网络)。输入向量应包含所有可能的标记,其中每个标记代表一个维度。
然后,训练集中的每个记录必须根据标记转换为输入向量。例如,假设你在训练集(php,ruby,ms,sql)中有4个标签的不同组合,你定义了一个未加权的输入向量[php,ruby,ms,sql]。假设你有以下3个转换为加权输入向量的记录:
php,sql - > [1,0,0,1]
红宝石 - > [0,1,0,0]
ms,sql - > [0,0,1,1]
如果您使用线性回归,请使用以下公式
y = k * X
其中y代表你的案例中的答案(upvote / downvote)并插入已知值(X加权输入向量)。
如果你使用线性回归计算权重,你可以阅读here,但重点是创建二进制输入向量,其大小相等(或者如果你考虑其他一些变量,则更大)到数字在所有标签中,然后为每个记录设置每个标签的权重(如果不包括,则为0,否则为1)。