4

我的大学项目有点问题。

我必须使用遗传算法实现文档分类。

我看过这个例子并且(可以说)理解遗传算法的原理,但我不确定它们如何在文档分类中实现。无法计算适应度函数。

这是我到目前为止所想到的(它可能完全错误......)

接受我有类别,并且每个类别都由一些关键字描述。
将文件拆分为单词。
从文件中填充随机单词的数组(例如 100 个数组,但这取决于文件的大小)创建第一个填充。
1:
为总体中的每个孩子选择最佳类别(通过计算其中的关键字)。
交叉人口中的每 2 个孩子(包含每个孩子一半的新数组) - “交叉”
用文件中随机未使用的单词填充交叉剩下的其余孩子 - “进化??”
用文件中的随机词(使用或未使用)替换新种群中随机子项中的随机词 - “突变”
将最佳结果复制到新种群。
转到 1 直到达到某个人口限制或找到某个类别的次数足够多

我不确定这是否正确,并且很乐意得到一些建议,伙计们。
非常感谢!

4

2 回答 2

3

Ivane,为了正确地将 GA 应用于文档分类:

  1. 您必须将问题简化为可以进化的组件系统。
  2. 您不能对单个文档进行文档分类的 GA 训练。

所以你描述的步骤是正确的,但我会给你一些改进:

  • 拥有足够数量的训练数据:您需要一组已经分类且足够多样化的文档,以涵盖您可能遇到的文档范围。
  • 训练您的 GA 以正确分类这些文档的子集,即训练数据集。
  • 在每一代,根据验证数据集测试您最好的样本,如果验证准确度开始下降,则停止训练。

所以你想做的是:

prevValidationFitness = default;
currentValidationFitness = default;
bestGA = default;

while(currentValidationFitness.IsBetterThan( prevValidationFitness ) )
{
    prevValidationFitness = currentValidationFitness;

    // Randomly generate a population of GAs
    population[] = randomlyGenerateGAs();

    // Train your population on the training data set
    bestGA = Train(population);

    // Get the validation fitness fitness of the best GA 
    currentValidationFitness = Validate(bestGA);

    // Make your selection (i.e. half of the population, roulette wheel selection, or random selection)
    selection[] = makeSelection(population);

    // Mate the specimens in the selection (each mating involves a crossover and possibly a mutation)
    population = mate(selection);
}

每当您获得一份新文档(以前未分类的文档)时,您现在可以使用您最好的 GA 对其进行分类:

category = bestGA.Classify(document);

所以这不是万能的解决方案,但它应该给你一个不错的开始。波兹德拉维,基里尔

于 2011-01-17T20:55:21.663 回答
2

您可能会发现学习分类器系统有用/有趣。LCS 是一种用于分类问题的进化算法。在 Eiben & Smith 的《进化计算简介》中有一章关于它们。

于 2011-01-17T19:14:09.963 回答