我发现这个问题有点棘手。也许有人知道回答这个问题的方法。想象一下,你有一个你不知道它是什么的数据集(训练数据)。为了推断分类算法对这些数据进行分类,您会看到哪些训练数据的特征?我们可以说是否应该使用非线性或线性分类算法吗?
顺便说一句,我正在使用WEKA来分析数据。
有什么建议吗? 谢谢。
答案 0 :(得分:15)
哇,所以你有一些训练数据,你不知道你是在查看代表文档中单词的特征,还是在单元格中生成并且需要调整分类器。好吧,既然你没有任何语义信息,那么你将不得不通过查看数据集的统计属性来做到这一点。
首先,要制定问题,这不仅仅是线性与非线性。如果你真的想要对这些数据进行分类,那么你真正需要做的是为分类器选择一个核心函数,它可以是线性的,也可以是非线性的(高斯函数,多项式,双曲线函数等)。此外,每个核函数都可能需要一个或多个需要设置的参数。确定给定分类问题的最佳核函数和参数集并不是一个真正解决的问题,只有有用的启发式方法,如果你谷歌'选择一个内核函数'或'选择内核函数',你会看到许多研究论文提出并测试各种方法。虽然有很多方法,但最基本和最好的方法之一就是对参数做一个梯度下降 - 基本上你尝试一个内核方法和一个参数集,训练一半的数据点,看看你是怎么做的。然后你尝试一组不同的参数,看看你是怎么做的。你可以在最佳精度方向上移动参数直到你得到满足保守党的结果。
如果你不需要经历所有这些复杂性来找到一个好的核函数,而只是想要一个线性或非线性的答案。那么问题主要归结为两件事:非线性分类器具有更高的过度拟合风险(低估),因为它们具有更多的自由维度。他们可能会受到分类器的困扰,只是记住一组好的数据点,而不是提出一个很好的概括。另一方面,线性分类器具有较小的自由度,并且在数据不可线性分离的情况下,将无法找到良好的决策功能并且遭受高错误率。
不幸的是,我不知道一个更好的数学解决方案来回答“这个数据是否可以线性分离”,而不仅仅是尝试分类器本身并看看它是如何执行的。为此,你需要一个比我更聪明的答案。
编辑:本研究报告描述了一种算法,它看起来应该能够确定给定数据集与线性可分离的接近程度。
http://www2.ift.ulaval.ca/~mmarchand/publications/wcnn93aa.pdf
答案 1 :(得分:15)
这实际上是两个问题; - )
添加“算法选择”,你可能有三个最基本的分类器设计问题。
顺便说一下,好东西你没有任何领域专业知识可以指导你选择功能和/或断言功能空间的线性。这就是数据挖掘的乐趣:在没有先验专业知识的情况下推断出这样的信息。 (顺便说一句,虽然领域专业知识可以很好地仔细检查分类器的结果,但过多的先验洞察力可能会让您错过良好的挖掘机会)。没有任何这样的先验知识,您将被迫建立合理的方法并对结果进行仔细审查。
很难提供特定的指导,部分原因是问题中遗漏了许多细节,而且因为我在某种程度上通过这种方式了解了这些指导;-)。从来没有希望以下通用建议会有所帮助
对于您尝试的每种算法(或者更精确地针对给定算法的每组参数),您需要运行多次测试。理论可能非常有用,但仍会有很多“反复试验”。您会发现交叉验证是一项有价值的技术 简而言之,[并且取决于可用训练数据的大小],您将训练数据随机分成几个部分,并在一个(或几个)这些部分上训练分类器,然后在另一个部分上评估分类器的性能[或几个]部分。对于每个这样的运行,您可以测量各种性能指标,例如错误分类错误(MCE),除了告诉您分类器如何执行,这些指标,或者更确切地说,它们的可变性将提供有关所选功能的相关性的提示和/或他们缺乏规模或线性。
独立于线性假设,规范化数字特征的值非常有用。这有助于具有奇数范围等的特征 在每个维度内,确定范围内,例如,中位数两侧的2.5个标准偏差,并根据此范围将特征值转换为百分比。
将名义属性转换为二进制属性,创建尽可能多的维度,其中有标称属性的不同值。 (我认为很多算法优化器都会为你做这件事)
一旦您确定了一个或几个具有相对不错的性能(例如33%MCE)的分类器,就可以通过一次只修改一个参数来执行相同的测试系列。例如,删除一些功能,并查看生成的较低维度分类器是否会改进或降级。
损失因子是一个非常敏感的参数。尝试并坚持使用一个“可合理的”,但可能是大部分测试的次优值,最后调整损失。
学习利用SVM优化器提供的“转储”信息。这些结果提供了有关优化程序“认为”
请记住,在给定域中给定数据集的效果非常好,对于来自其他域的数据可能表现不佳......
咖啡很好,不是太多。如果一切都失败了,那就把它变成爱尔兰语; - )