2010-03-10 122 views
12

我觉得这个问题有点棘手。也许有人知道一个方法来回答这个问题。想象一下,你有一个数据集(训练数据),你不知道它是什么。为了推断分类算法以对这些数据进行分类,您将查看哪些训练数据特征?我们可以说什么,我们是否应该使用非线性或线性分类算法?选择正确的分类算法。线性还是非线性?

顺便说一下,我使用WEKA来分析数据。

有什么建议吗? 谢谢。

+3

[谁向谁开始关闭此帖]:这_is_编程相关! – mjv 2010-03-10 02:02:17

+0

@mjv:你是什么意思? – 2010-03-10 02:12:36

+0

不用担心;具有较高声誉的用户可以看到关闭问题的投票数,并且我注意到一个投票,原因是“NPR”(不是相关的)。我的评论是支持这个问题的,这表明虽然有些理论和数学听起来,但这个问题与编程有很大关系。这个问题看起来很安全,没有其他选票要结束(需要5个)。 – mjv 2010-03-10 02:18:51

回答

15

哇,所以你有一些训练数据,你不知道你是否在查看表示文档中的单词的特征,或者是单元中的基因,并且需要调整分类器。那么,因为你没有任何语义信息,你将不得不通过查看数据集的统计特性来做到这一点。

首先,为了制定问题,这不仅仅是线性与非线性。如果你真的希望对这些数据进行分类,你真正需要做的是为分类器选择一个核函数,这个函数可能是线性的,或者是非线性的(高斯,多项式,双曲线等)。另外,每个核函数都可能采用一个或多个需要设置的参数确定一个给定分类问题的最佳核函数和参数集并不是一个真正解决的问题,只有有用的启发式算法,并且如果谷歌选择了“内核函数”或“选择内核函数“,你会被许多研究论文提出和测试各种方法,虽然有很多方法,但最基本和最好的方法之一是对参数进行梯度下降 - 基本上你可以尝试一种内核方法和参数集,在一半的数据点上训练,看看你是怎么做的,然后你尝试一组不同的参数,看看你是怎么做的,你将参数向准确度最好的方向移动,直到你满意tory结果。

如果您不需要经历所有这些复杂性以找到一个好的核函数,并且只需要一个线性或非线性的答案。那么这个问题主要归结为两点:非线性分类器将具有较高的过度拟合风险(不一致),因为它们具有更多的自由度。他们可能会受到分类器仅仅记住一组好数据点的困扰,而不会提出一个好的概括。另一方面,线性分类器具有较小的拟合自由度,并且在数据不是线性分离的情况下,将无法找到一个好的决策函数并且具有较高的错误率。

不幸的是,我不知道一个更好的数学解决方案来回答“这个数据线性分离”这个问题,而不是仅仅尝试分类器本身,看看它是如何执行的。为此,你需要比我更聪明的答案。

编辑:本研究论文描述了一种算法,它看起来应该能够确定一个给定的数据集是如何接近线性分离的。

http://www2.ift.ulaval.ca/~mmarchand/publications/wcnn93aa.pdf

+0

谢谢bdk。不幸的是,我只有实值变量和它们的类(如x,y),这使得不可能对数据做出任何有意义的结论。正如你所说,我唯一能做的就是查看数据的统计属性。我将会看看这篇论文。谢谢... – 2010-03-10 03:13:35

15

这其实是在一个;-)

  • 特征选择
  • 线性问题或不

添加 “算法选择”,和你可能有三个最基本的分类器设计问题。

请注意,这是一个好东西您没有任何领域的专业知识,可以让您指导选择特征和/或断言特征空间的线性。这就是数据挖掘的乐趣:在没有先验知识的情况下推断这些信息。 (顺便说一句,虽然领域专业知识有助于仔细检查分类器的结果,但过多的先验知识可能会让您错过良好的挖掘机会)。没有任何这样的先验知识,你就不得不建立健全的方法论并对结果进行仔细的审查。

很难提供具体的指导,部分原因是因为在问题中遗漏了很多细节,并且也因为我在某种程度上忽略了这一点;-)。从来没有少,我希望下面的一般建议将有助于

  • 对于每次尝试(或者更精确地对每一组对于给定的算法参数),您将需要运行许多测试算法。理论可以是非常有用的,但是仍然会有很多“试错”。你会发现交叉验证一个有价值的技术。
    简而言之,[并根据可用训练数据的大小],将训练数据随机分成几个部分,并在这些部分中的一个[或几个]部分上训练分类器,然后评估分类器的性能在另一个[或几个]部分。对于每一次这样的运行,您都会测量各种性能指标,例如错误分类错误(MCE),除了告诉您分类器是如何执行的,这些指标或者它们的可变性将提供关于所选功能的相关性和/或他们缺乏规模或线性。

  • 独立线性假设,要标准化值的数字特征是有用的。这有助于具有奇数范围的特征等。
    在每个维度内,建立范围两边的2.5个标准差范围内的范围,并根据此范围将特征值转换为百分比。

  • 将标称属性转换为二进制,创建尽可能多的维度存在标称属性的不同值。 (我认为许多算法优化器会为你做这个)

  • 一旦你确定了一个或几个分类器具有相对不错的表现(比如33%MCE),通过修改这样的分类器来执行相同的测试序列一次只有一个参数。例如,删除一些功能,并查看产生的较低维度分类程序是否改进或降级。

  • 损失系数是一个非常敏感的参数。尝试并坚持一个“合理的”,但对大部分测试来说可能不是最理想的价值,最后微调损失。

  • 学习利用SVM优化器提供的“转储”信息。这些结果提供了非常有价值的信息,以什么优化“认为”

  • 记住什么工作非常出色王氏在给定域中的定数据集中可以从另一个域数据很差执行...

  • 咖啡很好,不是太多。当所有失败,使它爱尔兰;-)