我正在编写一个程序,我想知道如何使用某种人工智能算法,使程序能够学习并为我的字段分配适当的权重值。
例如,我有字段a、b、c、d和e。这些字段的权重各不相同,因为字段a比d更有价值。我想知道如何实现这一点,以便我可以标准化这些值,并使用这些值的总和进行比较。
示例:
Weight of a = 1Weight of b = 2Weight of c = 3Weight of d = 4Weight of e = 5
对于总和,将每个字段的值乘以其分配的权重:
Result = (value of a) * 1 + (value of b) * 2 + (value of c) * 3 + (value of d) * 4 + (value of e) * 5
我希望输入一些训练数据,并训练我的程序学习和比较每个对象所拥有的a、b、c、d、e值,以便它可以为每个字段分配权重。
编辑:我只是在寻找一种方法来实现这一点,无论是使用神经网络,还是其他方法来学习并为这些字段分配权重。
回答:
实现这一点的最佳方式在很大程度上取决于你正在编写的程序类型。你如何评估result
的答案有多好?
如果result
可以以分类的方式被判定为正确或错误,那么神经网络将是一个很好的选择。你可以使用两层拓扑结构(即所有输入节点都连接到每个输出节点,中间没有层),并让每个输入节点对应你的一个字段(a、b、c等)。然后,你可以使用反向传播来训练网络,使得每组字段值映射到正确的类别。你最终得到的边缘权重将是与每个字段关联的权重。
然而,如果result
可以以某种连续的方式被判定为更准确或不太准确,遗传算法可能是更好的解决方案。如果你将result
与某个理想值进行比较,或者你在某种具有可评估结果的函数中使用这些权重(如游戏),或者其他类似情况,都可能是这种情况。你使用的适应度函数将取决于你的具体情况(对于上述示例,你可能使用接近理想值的程度,或者使用这些值玩游戏时的胜负比)。你可以以多种方式格式化候选解决方案:
- 一种选择是使用一系列表示每个权重的二进制位串。突变可以翻转任何位,交叉可以在字符串的任何点发生(或者你可以只允许它在数字之间发生)
- 如果你想允许浮点值,你可能最好使用一个系统,其中每个候选解决方案是一组权重。突变可以从给定的权重中加减,交叉可以在列表内的任何点发生。
如果你能提供更多关于你的程序具体要实现什么的信息,我可以尝试提供更具体的建议。