如何处理具有动态大小输入集合的机器学习问题?

7

我正在尝试使用机器学习将数据样本分类为好或坏的质量。

数据样本存储在关系数据库中。一个样本包含id、名称、点赞数(表示好/坏的质量指示)、评论数等属性。还有一个表,其中有带有外键指向数据样本id的项目。这些项目包含重量和名称。所有指向数据样本的项目共同描述了数据样本,这通常可以帮助对数据样本进行分类。问题是,不同样本指向一个外键的项目数量是不同的。

我想将指向特定数据样本的项目提供给机器学习输入,例如神经网络。问题是我不知道项目数量,因此我不知道需要多少个输入节点。

Q1) 当输入维度是动态的时,是否可能使用神经网络?如果可以,如何实现?

Q2) 在列表长度未知的情况下,有没有喂入网络元组的最佳实践?

Q3) 对于应用机器学习到关系数据库中,有没有最佳实践?

5个回答

5
有一种机器学习领域叫做归纳逻辑编程,专门处理关系数据。如果您想使用神经网络,您需要将关系数据集转换为命题数据集(单个表)-即具有固定属性数量的表格,可以输入到神经网络或任何其他命题学习器中。这些技术通常构建所谓的一阶特征,捕捉来自辅助表的数据。此外,您只需要对学习者进行诱导就可以完成此操作-一旦您拥有了特征和学习者,就可以实时评估这些特征以获取新的数据点。
以下是一些可用于解决此类问题的技术的综述论文。如果您有任何进一步的问题,请随时提出。

你有没有关于基本ILP的好建议?我对机器学习还是个新手,但仍然对这个主题感兴趣,所以我想更好地学习它。 - user822448
你可以在Lavrac&Dzeroski中找到一个很好的介绍,它有点过时,但可以免费在线获取。要阅读更多最新信息,请参阅De Raedt - tempi

2
神经网络并不适用于动态大小的输入。很少有机器学习方法能够处理这种情况,它们通常假设维度是恒定的。我认为处理这个问题的最简单方法是计算可变大小实例的摘要统计信息,例如如果您有任意数量的输入,请计算这些输入的平均值(和方差、以及其他您喜欢的内容),这将是一个固定的维度,如果您一定要使用神经网络的话。
有一类模型适合您想要做的事情:贝叶斯非参数模型。这是一类特别优雅的模型,具有无限增长的能力,但始终使用有限数量的参数来解释有限数量的数据。在存在越来越多的数据的情况下,模型更新是明确定义的(模型中的参数数量只会按需增加以容纳它们)。
然而,有两个重要的注意事项:
这些模型很难。如果你在机器学习和统计方面的背景不够好,可能需要相当长的时间来掌握。无限模型的推断是棘手的。通常使用MCMC方法处理,这种方法的计算成本相对较高。虽然在可变非参数性方面已经有了最新的进展,但这仍然是一个新的研究领域,你肯定找不到大范围模型的实现。

如果我说我知道输入的维度,但如果必须固定它会非常大?大约3000个输入。那么是否可能使用神经网络,或者输入过多使得在大约25k的数据实例数据集上高效训练成为了不可能? - user822448
我怀疑这是可能的,但部分取决于你使用的神经网络类型。如果它是一个简单的架构,我不认为你会有任何问题:如果你正在研究深度置信网络,那么就会更加棘手! - Ben Allison
好的,再次感谢您的回答!您有没有其他建议,如何使用以前的数据进行训练并对新数据的质量进行分类?我只有基本的机器学习知识,并且正在进行一个项目,希望将机器学习算法应用于关系数据表。这个特定的问题与简单的多对多关系有关。 - user822448
我不知道关于关系型数据库是否有什么特别之处---您将想要从中提取实例,并像所有机器学习一样在某些特征空间中表示它们。有许多可能的方法:支持向量机、随机森林、贝叶斯方法等都是完全可行的。可以查看一本入门级的机器学习书籍(例如Tom Mitchell的《机器学习》)。 - Ben Allison
好的。谢谢您的建议! - user822448

1

我不知道所有问题的答案,但也许这可以帮到你:

Q1) 你可以尝试使用一些降维方法,比如主成分分析(PCA),将所有输入对象映射到一个共同的维度中。为此,你需要选择所有长度为N的数据点,并仅使用它们来学习从维度N到维度M的映射。

例如:假设你有大小为3、4和5的输入。你需要学习从大小5到大小3的映射,可以使用所有大小为5的点来学习,以及从大小4到大小3的映射,可以使用所有大小为4的点来学习。

虽然我不认为这个方法会非常有效。

Q2) 如果Q1得到解决,这个问题就不应该再是问题了。

Q3) 对于这个问题,我只是在猜测,但也许你可以将数据库映射到一个图形上,并使用众多的图形学习算法?


1
据我所知,目前没有已知的分类方法可以直接处理动态大小的输入集合。降维是通过将高维但固定的数据降低到较低的维度来实现的,因此似乎并不是您需要的东西。
在机器学习中,处理二元分类问题(似乎这是您感兴趣的问题)的一种方法是构建直方图。例如,您可以通过构建包含文本中出现的单词的直方图来对文本(长度不同)进行分类。已经提出了几个扩展,如二元组和n元组的直方图,但它们都基于相同的思想。

另一种类型的想法是结构化预测,一个很好的例子是当你有一个句子并且你需要确定每个单词的词性时,在这种设置中,每个单词都有一个标签,标签之间的交互非常重要。对于这种类型的问题,已经有了很好的解决方法,例如潜在结构SVM条件随机场(CRF)最大边缘马尔可夫网络


1

非常抱歉我要再次回答,但这个答案与我的第一个答案有很大不同。

可能的解决方案是:假设您的输入大小可以为3、4或5。您可以将神经网络设置为具有5个输入节点(输入的最大大小)。然后,如果出现大小为3的点,则在前3个节点上提供其值,并在剩余节点上提供虚拟值。

让我们讨论一个具体的例子:假设您的输入是R^3、R^4或R^5中的点,并且它们是二进制的:每个条目都可以取0或1的值。如果出现一个点(0,1,0,0,1),则只需将这些值馈送到网络的5个输入节点中。如果出现一个点(0,1,1),则将(0,1,1,-1,-1)馈送到网络中,其中-1是虚拟值。这确保了您向网络提供了“最后两个节点是特殊的”信息。

在线性分类器中,虚拟值非常危险;然而,由于神经网络不是线性的,它可以(原则上)学习任何函数,只要您提供它所需的信息并有足够的训练数据来喂它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接