Machine learning 遗传算法-适应度函数与规则优化

Machine learning 遗传算法-适应度函数与规则优化,machine-learning,artificial-intelligence,genetic-algorithm,genetic-programming,Machine Learning,Artificial Intelligence,Genetic Algorithm,Genetic Programming,假设我有一组训练示例,其中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

假设我有一组训练示例,其中
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)]
我知道我必须定义适应度函数。这个问题是怎么解决的?在我的实际问题中,有50个训练示例,但这是一个类似的问题

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

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


感谢您的耐心。

您描述的任务称为

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

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

一种可行的方法是人工构建离群类数据,并使用两类模型进行训练,但这可能很棘手

生成人工离群数据时,需要比目标数据更大范围的可能值(必须确保目标数据在所有属性方向上都被包围)

由此产生的两类训练数据集往往是不平衡的 大的

无论如何:

  • 如果你想尝试一类分类的遗传编程,请看

    -Robert Curry,Malcolm I.Heywood(在第13届欧洲遗传编程会议EuroGP'10上发表)

  • 还考虑了这些技术(简单的介绍是Andrew Ng的第九周;这里)。


      您描述的任务称为

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

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

      一种可行的方法是人工构建离群类数据,并使用两类模型进行训练,但这可能很棘手

      生成人工离群数据时,需要比目标数据更大范围的可能值(必须确保目标数据在所有属性方向上都被包围)

      由此产生的两类训练数据集往往是不平衡的 大的

      无论如何:

      • 如果你想尝试一类分类的遗传编程,请看

        -Robert Curry,Malcolm I.Heywood(在第13届欧洲遗传编程会议EuroGP'10上发表)

      • 还考虑了这些技术(简单的介绍是Andrew Ng的第九周;这里)。


      好吧,如果你只是想知道如何编程健身功能。。。假设训练数据是元组列表,如下所示:

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

      现在,您的所有参考数据都很容易被引用(A[0]、[1]等的集合)。让我们制作一个适应度函数,它接受一个元组并返回一个适应度分数,这将帮助GA收敛到正确的答案(如果元素正确,则为1-4,如果在训练数据中为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
      

      好吧,如果你只是想知道如何编程健身功能。。。假设训练数据是元组列表,如下所示:

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

      现在,您的所有参考数据都很容易被引用(A[0]、[1]等的集合)。让我们制作一个适应度函数,它接受一个元组并返回一个适应度分数,这将帮助GA收敛到正确的答案(如果元素正确,则为1-4,如果在训练数据中为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
      

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

      我假设数据来自著名的Iris数据集:

      如果您需要快速入门,可以使用我的方法的源代码:多表达式编程(基于遗传编程),可从以下位置下载:

      <> Pr>在SRC文件夹中有一个C++源名称MEPU.MuleCuff.Cp,它可以“解决”IRIS数据集。只需使用iris.txt文件调用read_training_data函数(也可以从github的dataset文件夹下载)


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

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

      我假设数据来自著名的Iris数据集:

      如果您需要快速入门,可以使用我的方法的源代码:多表达式编程(基于遗传编程),可从以下位置下载:

      <> Pr>在SRC文件夹中有一个C++源名称MEPU.MuleCuff.Cp,它可以“解决”IRIS数据集。只需使用iris.txt文件调用read_training_data函数(也可以从github的dataset文件夹下载)


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

      @Irtizakhaniloy是否要下载