使用条件随机场进行序列学习?

时间:2016-03-26 19:18:24

标签: machine-learning hidden-markov-models crf crf++ markov-random-fields

我是顺序学习(和机器学习)的新手。我试图了解如何使用条件随机字段来解决我的问题。

我有一个数据集,它是&的顺序日志。我的应用程序的最终用户在哪里工作。例如,以下数据集仅包含User1

的值
User   Facility   Weekday
User1  FacilityA  Monday
User1  FacilityB  Tuesday
User1  FacilityC  Wednesday
 ...     ...         ...

我正在尝试解决以下问题: 给定用户工作的工作日和设施,什么设施&平日他们会继续工作吗?

为了解决这个问题,我开始研究条件随机字段,但是现在很难让任何库使用它。

我尝试使用以下库: 1. PyStruct(https://pystruct.github.io/)    但由于这个问题,这对我不起作用:Index out of bounds: Fitting SSVM using Pystruct

  1. CRFSuite(http://www.chokkan.org/software/crfsuite/) (这依赖于libBFGS。当我在我的ubuntu盒子上安装libbfgs而没有任何错误时,为CRFSuite运行'make install'仍然失败并说它无法识别libBFGS)
  2. 所以我转向另一个图书馆.. 3. CRF ++(https://taku910.github.io/crfpp/

    我能够安装CRF ++&也能够运行他们发行版中给出的示例。但是,我需要一些帮助,了解如何修改模板文件以适应我的用例......

    另外,我认为我的标签将是来自上述数据集的工作日+工作日的串联字符串。

    我是序列学习的新手。目前正在努力研究如何解决这个问题...

    任何建议都会非常有用,因为我似乎有点卡在这里..

    谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 是的,因为您正在尝试预测两个标签(工厂和日),所以需要连接标签。另外,您还可以学习2种不同的模型来预测每个标签(见第3点)。

  2. 我认为你应该研究这个问题的回归模型而不是CRF。

  3. 我认为数据的排列应该能够轻松学习用户的日志历史。你能否告诉我“任何”用户的“最低”历史记录(最后3次登录?5次登录?7次登录?)?

  4. 假设您有每个用户的最后3次登录。然后,如果在您的位置,我将以不同的方式安排数据并学习2个不同的模型,一个用于预测日期,另一个用于预测设施。用于预测日期的数据和模板文件的排列示例是here。 您同样地,将周日的名称更改为设施名称,并学习预测设施的模型。您也可以考虑并为我建议的功能添加更多功能。如果您有更多用户数据(比如职业或年龄等),那么您一定要尝试在培训数据中添加更多列,并将这些列添加为模板文件中的功能。 请记住,测试文件的排列方式应与训练文件相同(最后一列可以为空/缺失,因为它是测试期间模型预测的标签)。

    如果你想继续在一个模型中预测两个标签,你可以尝试连接(在我给你的例子中,现在将成为day_facility。)