artificial-intelligence - 如何通过从以前的分布中学习来预测用户生成的分布
问题描述
我正在尝试编写一个预测算法,该算法根据用户预输入预测 4 个杯子之间的弹珠分布。但我不知道从哪里开始或可以使用哪些技术来解决这个问题。
例子:
有 4 个杯子,编号从 0 到 3,用户将收到他在这些杯子中分配的 x 个弹珠。每一轮用户都会收到另一数量的弹珠(或相同数量),在用户分发它们之前,算法会尝试根据用户之前的输入来预测分布。之后,用户“更正”它。目标是用户不必更正任何东西,因此算法可以预测正确的分布。然而,用户分配弹珠的模式可以改变,算法必须适应。
这是解决问题的最简单设计。然而,当弹珠具有可用于分布的附加属性时,它会变得更加复杂。例如,它们可以有颜色和重量。
那么,例如,算法如何得知用户(大部分时间)将相同颜色的弹珠放在一个杯子中,但杯子 2(大部分时间是空的)而其余的则平均分布?
所以在我的脑海里,算法必须做这样的事情:
- 在用户分发完成后搜索模式。这些模式可以是每杯弹珠的数量/每杯的重量或其他任何东西。
- 如果找到模式,则将预定义的值(权重)添加到模式中
- 如果未找到先前的模式,则必须从模式中减去预定义的值
- 当算法必须进行预测时,必须应用具有预定义权重的所有模式。
我不确定我是否遗漏了一些东西,以及我将如何实现这样的东西,或者我必须在哪个领域寻找答案。
解决方案
首先,请记住,人类行为并不总是遵循某种模式。如果用户随机分配这些弹珠,下一步将很难预测!
但如果分布中存在模式,您可以使用神经网络或决策树等算法创建预测。
例如:
// 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)
这取决于你想用这个预测做什么。
推荐阅读
- npm - 安装 Framework 7 CLI
- kubernetes - Prometheus 抓取 K8s Ingress Endpoints
- node.js - 使用 axios 发布数据和文件
- c# - 如何从 .Net Core 3 制作 Windows 服务
- .net-assembly - 为什么 .ctor 会调用自己?
- sql - Vertica Analytic 函数用于计算窗口中的实例数
- ios - 使用 MapKit 时在创建时设置 MKPointAnnotation 的标题
- python - 我可以使用 python 来切换 Windows 10 通知吗?
- r - 从非 highmap-collection 地图制作等值线
- c++ - 如何将属性页添加到 CPrintDialogEx