如何在python中重新训练机器学习模型,直到我们得到期望的结果

如何在python中重新训练机器学习模型,直到我们得到期望的结果,python,machine-learning,training-data,topic-modeling,Python,Machine Learning,Training Data,Topic Modeling,我正在使用非负矩阵分解(NMF)主题模型为客户反馈构建一个主题模型 这将创建主题集群,如下所示: [(0, [u'reserved block', u'reserved block available', u'reserved block week', u'need reserved block']), (1, [u'hour block', u'package hour block', u'bring hour block', u'bring hour']), (2, [u'hard bloc

我正在使用非负矩阵分解(NMF)主题模型为客户反馈构建一个主题模型

这将创建主题集群,如下所示:

[(0, [u'reserved block', u'reserved block available', u'reserved block week', u'need reserved block']), (1, [u'hour block', u'package hour block', u'bring hour block', u'bring hour']), (2, [u'hard block', u'driver hard block', u'driver hard', u'gps horrible']), (3, [u'delivery block', u'hard delivery block', u'hard delivery', u'delivery block available']), (4, [u'block available', u'reserved block available', u'make block', u'make block available'])

但是,主题0和4与主题2和3基本相同。我想知道如何对模型进行重新训练,使其接受主题0&4;主题2和主题3作为一个主题,将两个主题中的关键字联合起来(根据它们的顺序为它们设置权重&常见的关键字也应赋予更多权重)。

一般来说,如果NMF或LDA或其他类似算法的输出为您提供了一组具有某些重叠的主题,则第一个建议很简单-减少主题数量。通过这样做,您自然会强制算法将相似的主题合并在一起。我建议你试试这个并检查结果

如果您仍然想手动处理算法培训的结果,并手动将几个主题合并在一起,我将尝试从阅读有关您正在使用的特定算法(NMF)的文档开始,并检查哪些属性定义了特定主题(属性称为组件)以及定义主题的单词。然后,您可以只更新现有NMF实例以调整其组件。虽然这将是一项相当困难的任务

已更新

另一种方法是将文档带到主题和词到主题矩阵(从技术上讲,这是算法的输出)并手动更新它们。查看文章:

通常,作为NMF的结果,您应该得到2个矩阵。其中一个将显示每个文档对每个主题的隶属度。另一个词对每个主题都很重要

合并两个主题时,您希望:

1) 将文档中主题的列合并到主题矩阵。例如,如果在此矩阵中有一行显示了一个文档,作为合并的结果,该文档拥有主题1的50%成员资格和主题2的10%成员资格,那么您可能应该获得60%的合并主题成员资格


2) 合并word到主题矩阵中主题的行。这就是它变得不平凡的地方。据我所知,你不能只对特定主题的单词权重求和(所有权重的总和应相同),但你可以尝试这样做,看看会发生什么。

一般来说,如果NMF或LDA或其他类似算法的输出为您提供了一组具有某些重叠的主题,则第一个建议很简单-减少主题数量。通过这样做,您自然会强制算法将相似的主题合并在一起。我建议你试试这个并检查结果

如果您仍然想手动处理算法培训的结果,并手动将几个主题合并在一起,我将尝试从阅读有关您正在使用的特定算法(NMF)的文档开始,并检查哪些属性定义了特定主题(属性称为组件)以及定义主题的单词。然后,您可以只更新现有NMF实例以调整其组件。虽然这将是一项相当困难的任务

已更新

另一种方法是将文档带到主题和词到主题矩阵(从技术上讲,这是算法的输出)并手动更新它们。查看文章:

通常,作为NMF的结果,您应该得到2个矩阵。其中一个将显示每个文档对每个主题的隶属度。另一个词对每个主题都很重要

合并两个主题时,您希望:

1) 将文档中主题的列合并到主题矩阵。例如,如果在此矩阵中有一行显示了一个文档,作为合并的结果,该文档拥有主题1的50%成员资格和主题2的10%成员资格,那么您可能应该获得60%的合并主题成员资格


2) 合并word到主题矩阵中主题的行。这就是它变得不平凡的地方。据我所知,您不能只对特定主题的word权重求和(所有权重的总和应相同),但您可以尝试这样做,看看会发生什么。

我希望用户能够手动完成此操作。我的意思是,他们觉得哪些主题簇是不相关的或重复的,他们应该能够告诉机器排除这些主题簇,然后机器逐渐了解到这些主题簇是不相关的或重复的。这有可能吗?@akrama81我不这么认为,因为主题建模的本质。它基于矩阵分解或基于单词出现的概率来估计主题,试图拟合给定多个主题的最佳模型。如果你“合并”主题,这意味着你试图创建一个描述主题的词的联合,这将破坏整个模型,因为分布或分解不会“总计为1”。@akrama81我唯一能想到的是尝试切换到LDA,并根据用户的决定手动指定频率分布特定主题中的单词,但这需要一些研究。嗯,我已经尝试了LDa,但它没有为我们的数据集提供相关的主题集群。谢谢你的洞察力@祝你好运。对于NMF,问题在于它是矩阵分解,因此更难理解如何减少组件数量以及如何合并它们。也许这方面有一些研究,但我没有听说。我希望用户能够手动完成这项工作。我的意思是,他们觉得哪些主题簇是不相关的或重复的,他们应该能够告诉机器排除这些主题簇,然后机器逐渐了解到这些主题簇是不相关的或重复的。这有可能吗?@akrama81我不这么认为,因为主题建模的本质。它基于矩阵分解或基于单词出现的概率来估计主题,试图拟合给定多个主题的最佳模型。如果你'合并'的主题,这意味着你