假设我有一组训练示例,其中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
进行分类?
感谢您的耐心等待。
答案 0 :(得分:0)
您描述的任务称为one-class classification。
通过从仅包含该类对象的训练集中学习,在所有元素中识别特定类的元素是
...与传统的分类问题不同,并且比传统的分类问题更困难,传统的分类问题试图用包含来自所有类的对象的训练集来区分两个或更多个类。
一种可行的方法是人工建立异常类数据并使用两类模型进行训练,但可能很棘手。
生成人工异常数据时,您需要比目标数据更广泛的可能值(您必须确保目标数据在所有属性方向上都被包围)。
生成的两级训练数据集往往不平衡 大。
反正:
如果您想尝试使用遗传编程进行单类分类,请查看
One-Class Genetic Programming - Robert Curry,Malcolm I. Heywood(参加第13届欧洲遗传编程会议EuroGP'10)
还会考虑anomaly detection技巧(简单的介绍是Andrew Ng的Coursera Machine Learning class的第9周; notes来自此处。)
答案 1 :(得分:0)
好的,如果您只是想知道如何编程健身功能......假设训练数据是元组列表:
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
答案 2 :(得分:0)
这里有一个多类别的分类问题,可以通过遗传编程和相关技术来解决。
我认为数据来自着名的Iris数据集:https://en.wikipedia.org/wiki/Iris_flower_data_set
如果您需要快速入门,可以使用我的方法的源代码:多表达式编程(基于遗传编程),可以从这里下载:https://github.com/mepx/mep-basic-src
src文件夹中有一个C ++源名称mep_multi_class.cpp,它可以“解决”iris数据集。只需使用iris.txt文件调用read_training_data函数(也可以从github的dataset文件夹中下载)。
或者,如果您不熟悉C ++,可以直接尝试具有简单用户界面的MEPX软件:http://www.mepx.org。也可以从github下载带有iris数据集的项目。