2017-02-28 142 views
-1

让我们假设我们有一个巨大的数据库为我们提供训练数据D和专用于机器学习问题的较小测试数据T.这些数据涵盖了现实世界问题的许多方面,因此其结构非常不同。 当我们现在用D训练一个不接近定义的机器学习算法(神经网络,SVM,随机森林,...),并最终测试创建的模型对T时,我们获得了一定的性能测量P(混淆矩阵,mse,.. )。分割训练数据以训练n个模型的最佳数量

的问题:如果我能获得更好的性能,通过将问题ITO更小的子问题,例如通过将D聚类成若干不同的训练集D1,D2,D3,...,我怎么能找到最佳的聚类? (簇的数量,质心,......)

以一种蛮力的方式,我正在考虑使用带有随机数量的簇C的kNN聚类,这导致了训练数据D1,D2 ...特区。 我现在将训练C个不同的模型,并最终对训练集T1,T2,...,Tc进行测试,其中相同的kNN聚类已用于将T分割成C个测试集T1,...,Tc。

这给了我最佳的整体性能平均的组合(P1,P2,...,PC)将是一个我想选择。

我只是想知道你是否知道比暴力破解这个更复杂的方式?

非常感谢提前

+0

这没有多大意义。试着对你正在做的事情更正式。它目前听起来像:通过kNN将一些巨大的数据分成较小的数据,这些数据在非常不同的数据集中起作用;在这些中学习一些分类器并采取最好的措施。显然,这是接近可能的最坏的方法,因为泛化被杀死了。随机选择数据集会更好(没有kNN)。 – sascha

+0

随机选择数据集是例如随机森林确实如此,我意识到它的好处。但是,无论如何,将一个大问题分解为子问题应该使子问题处理更容易。你说的对,单一模型在泛化上差得多,因为它只处理整个可能性空间的一小部分。这就是为什么有一个很好的预选步骤是非常重要的,这个步骤能够正确地聚集新的传入数据。 – Marcus

+0

想象一个问题,应该区分不同的布块。衬衫裤子,西装裙子等等。现在每个不同的类别都有子类别。裤子可以用牛仔裤,cort,西装裤等等来区分,而不是学习整个数据,我只能为裤子设计一个单一的模型,现在减少的问题是区分牛仔裤和cort等。现在,预处理步骤,可以区分裤子和其他部分。只有当我确定它是裤子时,我才会使用裤子模型。 – Marcus

回答

0

聚类很难。

比分类更难,因为你没有标签来告诉你,如果你正在做的好,或者没有很好的。它不能做魔术,但它需要你仔细选择参数并评估结果。

你不能只是转储数据为k-手段和期待任何事出来有用。你首先需要真正仔细地清理和预处理你的数据,然后你可能会简单地发现它实际上只是一个单个大块...

此外,如果聚类运行良好,并且训练分类器独立地在每个群集上,那么每个分类器将错过关键数据。结果可能表现真的很糟糕!

如果您只想训练部分数据,请使用随机森林。

但它听起来像你对分级分类方法更感兴趣。如果您有良好的层次结构信息,这可能会奏效。你首先要在分类上训练一个分类器,然后再在分类中训练一个分类器才能获得最终的分类。