首页 > 解决方案 > 如何通过从以前的分布中学习来预测用户生成的分布

问题描述

我正在尝试编写一个预测算法,该算法根据用户预输入预测 4 个杯子之间的弹珠分布。但我不知道从哪里开始或可以使用哪些技术来解决这个问题。

例子:

有 4 个杯子,编号从 0 到 3,用户将收到他在这些杯子中分配的 x 个弹珠。每一轮用户都会收到另一数量的弹珠(或相同数量),在用户分发它们之前,算法会尝试根据用户之前的输入来预测分布。之后,用户“更正”它。目标是用户不必更正任何东西,因此算法可以预测正确的分布。然而,用户分配弹珠的模式可以改变,算法必须适应。

这是解决问题的最简单设计。然而,当弹珠具有可用于分布的附加属性时,它会变得更加复杂。例如,它们可以有颜色和重量。

那么,例如,算法如何得知用户(大部分时间)将相同颜色的弹珠放在一个杯子中,但杯子 2(大部分时间是空的)而其余的则平均分布?

所以在我的脑海里,算法必须做这样的事情:

我不确定我是否遗漏了一些东西,以及我将如何实现这样的东西,或者我必须在哪个领域寻找答案。

标签: artificial-intelligencepredictionpattern-recognition

解决方案


首先,请记住,人类行为并不总是遵循某种模式。如果用户随机分配这些弹珠,下一步将很难预测!

但如果分布中存在模式,您可以使用神经网络或决策树等算法创建预测。

例如:

// dataset1
// the weights and colors of 10 marbles
let dataset1 = [4,3,1,1,2,3,4,5,3,4,7,6,4,4,2,4,1,6,1,2]

// cups1
// the cups distribution of the above marbles
let labels1 = [2,1,0,2,1,1,3,1,0,1]

现在您可以训练算法,例如神经网络或决策树。这不是真正的代码,只是它如何工作的一个示例。

let net = new NeuralNet()
net.train(dataset1, labels1)

在使用大量数据(至少数百个这样的数据集)进行训练后,您可以为网络提供一个新数据集,它会为您提供杯子分布的预测

let newMarbleSet = [...]
let prediction = net.predict(newMarbleSet)

这取决于你想用这个预测做什么。


推荐阅读