好的,SVM是二分类分类器,即这些分类器将数据放置在单个决策边界的两侧。因此,我建议使用仅由两个类组成的数据集(这不是必需的,因为当然可以通过在数据上多次(串行)通过分类器来分离多个类别,但在初始测试期间这样做很麻烦)。例如,您可以使用Scott答案中链接的鸢尾花数据集;它由三个类组成,第一类与第二和第三类线性可分;第二和第三类不能线性分离。如果要使用此数据集,为了方便起见,您可能更喜欢删除Class I(大约前50个数据行),这样剩下的就是一个两类系统,在该系统中,其余两个类别不能线性分离。鸢尾花数据集非常小(150 x 4,或50行/类x四个特征)-取决于您使用SVM原型测试的进程,这可能正是您想要的,或者您可能需要一个更大的数据集。一个有趣的数据集家族,只包含两个类别且明显是非线性可分的,是由超级约会网站 eHarmony(无任何关联)提供的匿名数据集。除了鸢尾花数据外,我喜欢使用这些数据集进行SVM原型评估,因为它们是大型数据集,具有相当多的特征,但仍然只包含两个非线性可分的类别。我知道可以从两个地方检索到此数据。第一个网站有一个单一的数据集(PCI代码下载,第9章,matchmaker.csv),由500个数据点(行)和六个特征(列)组成。虽然这个数据集更简单易用,但数据基本上是“原始”形式,需要一些处理才能使用。这份数据的第二来源包含两个eHarmony数据集,其中一个由超过50万行和59个特征组成。此外,这两个数据集经过了大量处理,只需要对特征进行常规缩放即可将其馈送到您的SVM中。
您需要的特定数据集将高度依赖于您选择的核函数,因此最简单的方法似乎是自己创建一个玩具数据集。一些有用的想法: 同心圆 螺旋形类别 嵌套香蕉形类别 如果您只是想要一个不可线性分离的随机数据集,我建议使用鸢尾花数据集。 这是一个多元数据集,其中至少有几个相关类别是不可线性分离的。希望这可以帮助您!
你可以从简单的数据集开始,比如Iris或two-moons,它们都是线性不可分的。一旦你满意了,就可以转向更大的数据集,例如UCI ML repository, classification datasets。 一定要与标准SVM求解器(如libSVM和SVM-light)进行比较和基准测试。
如果您使用Python进行编程,可以使用sklearn.datasets.samples_generator包中的一些函数手动生成嵌套月形数据集、同心圆数据集等。这里是这些数据集的绘图页面。如果您不想手动生成数据集,可以参考这个网站,在“形状集”部分,您可以直接下载这些数据集并对其进行测试。