我正在尝试使用机器学习将数据样本分类为质量好或坏。
数据样本存储在关系数据库中。示例包含属性id,名称,向上投票数(用于好/坏质量指示),注释数量等。还有一个表具有指向数据样本id的外键的项。这些物品包含重量和名称。所有项目一起指向数据样本表征数据样本,这通常可以帮助对数据样本进行分类。问题是,指向一个外键的项目数对于不同的样本是不同的。
我想提供机器学习输入,例如神经网络,其中的项目指向特定的数据样本。问题是我不知道项目的数量,所以我不知道我想要多少输入节点。
Q1)当输入维度是动态的时,是否可以使用神经网络?如果是这样,怎么样?
Q2)当列表的长度未知时,是否有任何最佳实践为网络提供元组列表?
问题3)是否有将机器学习应用于关系数据库的最佳实践?
答案 0 :(得分:5)
有一个称为归纳逻辑编程的机器学习领域,专门处理关系数据。在您的情况下,如果您希望使用神经网络,您可能希望将关系数据集转换为命题数据集(单表) - 即具有固定数量属性的表,可以将其输入神经网络或任何其他命题学习者。这些技术通常构造所谓的一阶特征,从二级表中捕获数据。此外,您只需要为了吸引学习者而这样做 - 一旦您拥有这些功能和学习者,您就可以即时评估新数据点的这些功能。
以下是可用于此类问题的一些overview paper技术。如果您还有其他问题,请随时提出。
答案 1 :(得分:2)
神经网络不适用于动态大小的输入。很少有机器学习方法,它们通常假设恒定维度。我认为解决这个问题最简单的方法是计算可变大小实例的摘要统计数据,例如,如果你有任意数量的输入,计算这些输入的均值(和方差,以及你喜欢的任何其他),如果你的心脏被设置在使用神经网络上,它将具有固定的维度。
有一类适合您想要做的模型:Bayesian nonparametrics。这是一种特别优雅的模型,它具有增长到无限大小的能力,但总是使用有限数量的参数来解释有限数量的数据。在存在越来越多的数据的情况下,模型更新是明确定义的(模型中的参数数量只需增加到容纳它们所需的数量)。
然而,有两个重要的警告:
答案 2 :(得分:1)
我不知道所有问题的答案,但也许这会有所帮助:
Q1)您可以尝试使用dimensionality reduction的某种方法,例如principal component analysis(PCA),将所有输入对象映射到公共维度。为此,您必须选择长度为N的所有数据点,并仅使用这些数据点来学习从维度N到维度M的地图。
示例:假设您有大小为3,4和5的输入。您需要学习从大小5到大小3的地图,您可以使用所有大小为5的点来学习,以及从4号到3号的地图,您可以使用所有尺寸为4的点来学习。
但我不认为这会很好地发挥作用。
Q2)如果Q1解决了,那就不再是问题了。
Q3)我正在推测这个,但也许你可以将数据库映射到一个图形,并使用大量的算法来进行图形学习?
答案 3 :(得分:1)
据我所知,没有众所周知的分类方法直接适用于动态大小的输入集合。维度降低的工作原理是将高维度但固定数据降低到较低维度,因此它看起来并不像您需要的那样。
在机器学习中处理二进制分类(这似乎是您感兴趣的问题)的一种方法是构建直方图。例如,您可以通过构建文本中出现的单词的直方图来对文本(不同长度)进行分类。已经提出了几个扩展,双克的直方图,n-gram,但它们建立在相同的想法上。
另一种类型的想法是结构化预测,其中一个很好的例子就是当你有一个句子而你需要确定每个单词时,它是什么词性,在这种类型的设置中每个单词都有一个标签,并且标签之间的相互作用非常重要。对这类问题有充分理解的方法是Latent Structural SVM,CRF和Max Margin Markov Network
答案 4 :(得分: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为虚拟值。这可确保您为网络提供“最后两个节点特殊”的信息。
在线性分类器中,虚拟值非常危险;然而,由于神经网络不是线性的,它可以(原则上)学习任何功能,只要你给它所需的信息并有足够的训练数据来喂它。