帮我解决这个问题:
我想弄清楚如何将这些动物分组。
让我们每天都说你观察到一群动物像朋友一样闲逛。 你想要找出最好的方法,根据他们最喜欢的人自己分组动物。
为了说明,你观察:
今天,你看到这些动物在一起放松: {Elephant Tiger Giraffe Peacock}
第二天你看到了这些: {长颈鹿孔雀大象狮子猴}
然后第二天: {Elephant Tiger Hyena Rhino}
因此,你可以得出结论,大象与老虎是好朋友,因为他们已经在两个不同的场合闲逛。 你会对孔雀和大象说同样的话。
确定将这些动物分组的最佳方法的算法是什么?
为了提供更多详细信息,我正在解决一个大数据类型的问题,并尝试对此问题进行分类。
机器学习可以解决这个问题吗?
真实数据看起来可能更像这样:
{A B F G R P K U J H} {A F G K B J H A S} 还有数百万行...
指出我正确的方向也会有所帮助。
答案 0 :(得分:1)
有多种方法可以解决这个问题,但一个简单的方法可能是根据您的数据为任何给定的动物群设计评分函数,然后执行数值优化,例如simulated annealing来找到将动物分成几乎最大化总分的组。或者,如果动物的数量足够小,您可以对所有分区进行详尽的搜索。
您应该仔细选择评分函数,确保不会使用n
个1
或1
组n
组。并且不要忘记尊重对称性。
您可以首先计算出现在一起的每对动物的概率,然后将所有概率的集合缩放为零均值,然后将每个组G评分为成对比例得分的总和:
这只是第一次尝试,你应该能够提出更好的评分功能。
然后为k
时间步长应用模拟退火:
Choose a random partition π
for i = 0 to k:
T = i/k #floating point division
make a random transition to partition π'
if P_accept(π, π', T) > rand(0,1):
π <- π'
return π
随机转换是指将一只动物从一个群体交换到另一群体,包括进入一个新的空群体。
P_accept是您必须按照模拟退火文章中的描述设计的接受概率函数。这应该基于两个分区的分数和温度。例如,分区的分数可以是分区中每个组的分数的总和。有关设计接受概率函数的更多信息,请参阅here。
请注意,您实际上不需要分区的绝对分数来运行模拟退火。您可以使用将一个分区与另一个分区进行比较的函数。有几种方法可以设计这样的功能,但是如果你想要拿出大枪,你可以考虑使用Generalized Bradley Terry Model [pdf]。您可以对输入数据进行训练,以获得具有以下属性的每只动物的数值参数γ:
例如。这应该可以更好地衡量群体的可取性,它应该更适合模拟退火框架!