【问题标题】:Genetic Algorithm - Fitness function and Rule optimization遗传算法 - 适应度函数和规则优化
【发布时间】:2023-03-15 01:45:01
【问题描述】:

假设我有一组训练示例,其中A_i 是一个属性,输出是Iris-setosa

数据集中的值为

A1, A2, A3, A4      outcome
3   5   2   2       Iris-­setosa
3   4   2   2       Iris­-setosa
2   4   2   2       Iris­-setosa
3   6   2   2       Iris­-setosa
2   5   3   2       Iris­-setosa
3   5   2   2       Iris­-setosa
3   5   2   3       Iris­-setosa
4   6   2   2       Iris­-setosa
3   7   2   2       Iris­-setosa

从分析属性的范围是:

A1 ----> [2,3,4]
A2 ----> [4,5,6,7]
A3 ----> [2,3]
A4 ----> [2,3]

我已经定义了:

A1 ----> [Low(2),Medium(3),High(4)]
A2 ----> [Low(4,5),Medium(6),High(7)]
A3 ----> [Low(<2),Medium(2),High(3)]
A4 ----> [Low(<2),Medium(2),High(3)]

我设置如下:

A1,         A2,         A3,         A4          outcome
Medium      Low         Medium      Medium      Iris-setosa     
Medium      Low         Medium      Medium      Iris-setosa
Low         Low         Medium      Medium      Iris-setosa
Medium      Medium      Medium      Medium      Iris-setosa
Low         Low         High        Medium      Iris-setosa
Medium      Low         Medium      Medium      Iris-setosa
Medium      Low         Medium      High        Iris-setosa
High        Medium      Medium      Medium      Iris-setosa
Medium      High        Medium      Medium      Iris-setosa

我知道我必须定义适应度函数。这个问题有什么用?在我的实际问题中,有 50 个训练示例,但这是一个类似的问题。

如何使用GA 优化规则?如何编码?

假设如果我输入(4,7,2,3),优化如何帮助我分类输入是否为Iris-setosa

感谢您的耐心等待。

【问题讨论】:

  • @IrtizaKhanNiloy 你想用基因编程生成 Iris-setosa 类吗?为什么结果总是鸢尾花?抱歉,在理解您要执行的操作时遇到了一些问题。

标签: machine-learning artificial-intelligence genetic-algorithm genetic-programming


【解决方案1】:

您描述的任务称为one-class classification

通过从仅包含该类对象的训练集中学习,在所有元素中识别特定类的元素

...不同于传统的分类问题,也比传统的分类问题更困难,传统的分类问题试图区分两个或多个类,训练集包含所有类的对象。

一种可行的方法是人工构建异常类数据并使用二分类模型进行训练,但可能会很棘手

在生成人工异常值数据时,您需要比目标数据更广泛的可能值(您必须确保目标数据在所有属性方向上都被包围)。

生成的二类训练数据集往往是不平衡的,并且 大。

无论如何:

【讨论】:

    【解决方案2】:

    好的,如果您只想知道如何编写适应度函数...假设训练数据是元组列表:

    training_data = list((3,6,3,5),(8,3,1,2),(3,5,2,4)...)
    

    如下所示为 A1、A2 等元素创建参考集,假设第一个元组告诉我们所有其他元组的长度(这样您的训练数据中可以有任意数量的元组):

    A=[]
    for x in training_data[0]:
        res_list = set()
        res_list.update(x[index] for x in training_data)
        A.append(res_list)
        index+=1
    

    现在您的所有参考数据都可以轻松引用(A[0]、A[1] 等集合)。让我们创建一个适应度函数,它接受一个元组并返回一个适应度分数,这将有助于 GA 收敛到正确的答案(如果是正确的元素,则为 1-4,如果在 training_data 中,则为 5+)。玩弄得分,但这些应该可以正常工作。

    def fitness_function(target):
        # Assume target is a tuple of same length as reference data
        global A, training_data
        score = 0
        # Give a point for each element that is in the data set
        index = 0
        for t in target:
            if t in A[index]:
                score+=1
            index += 1 
        # Give 5 points if entire tuple is exact match
        if target in training_data:
            score+=5
        return score
    

    【讨论】:

      【解决方案3】:

      这里有一个多类分类问题,可以通过遗传编程和相关技术解决。

      我想这些数据来自著名的 Iris 数据集:https://en.wikipedia.org/wiki/Iris_flower_data_set

      如果您需要快速入门,可以使用我的方法的源代码:Multi Expression Programming(基于遗传编程),可以从这里下载:https://github.com/mepx/mep-basic-src

      在 src 文件夹中有一个 C++ 源名称 mep_multi_class.cpp 可以“解决”虹膜数据集。只需使用 iris.txt 文件(也可以从 github 的 dataset 文件夹下载)调用 read_training_data 函数。

      或者,如果你不熟悉 C++,你可以直接尝试 MEPX 软件,它有一个简单的用户界面:http://www.mepx.org。也可以从 github 下载一个带有 iris 数据集的项目。

      【讨论】:

        猜你喜欢
        • 2020-05-12
        • 2011-10-07
        • 1970-01-01
        • 2012-11-20
        • 2023-02-20
        • 2011-04-07
        • 1970-01-01
        • 2015-02-18
        • 2013-07-02
        相关资源
        最近更新 更多