Man*_*ete 5 statistics r machine-learning bioinformatics svm
我是R和SVM的新手,我正试图svm从e1071包中分析功能.但是,我找不到任何大型数据集,这些数据集允许我获得改变输入数据大小的良好分析范围.有谁知道怎么锻炼svm?我应该使用哪个数据集?任何特定的参数svm使它更难工作?
我复制了一些用于测试性能的命令.也许最有用也更容易得到我在这里尝试的东西:
#loading libraries
library(class)
library(e1071)
#I've been using golubEsets (more examples availables)
library(golubEsets)
#get the data: matrix 7129x38
data(Golub_Train)
n <- exprs(Golub_Train)
#duplicate rows(to make the dataset larger)
n<-rbind(n,n)
#take training samples as a vector
samplelabels <- as.vector(Golub_Train@phenoData@data$ALL.AML)
#calculate svm and profile it
Rprof('svm.out')
svmmodel1 <- svm(x=t(n), y=samplelabels, type='C', kernel="radial", cross=10)
Rprof(NULL)
Run Code Online (Sandbox Code Playgroud)
我不断增加数据集重复行和列,但我达到了内存的限制,而不是让svm工作更难...
在"工作SVM"方面 - 什么使SVM工作"更难"是一个更复杂的模型,不容易分离,更高的维度和更大,更密集的数据集.
SVM性能下降:
改变参数
您是否可以更改参数以使SVM花费更长时间.当然,参数会影响您将获得的解决方案的质量,并且可能没有任何意义.
使用C-SVM,变化的C将导致不同的运行时间.(nu-SVM中的相似参数是nu)如果数据集是合理可分的,那么使C更小将导致更长的运行时间,因为SVM将允许更多的训练点成为支持向量.如果数据集不是很可分离,使得Ç更大会导致更长的运行时间,因为你基本上是告诉SVM你想要的紧密配合的数据,并在数据不容易,这将需要更长的时间来计算一个狭窄的利润解决方案分离.
通常,您在进行参数搜索时会发现,有些参数会增加计算时间而精度没有明显提高.
其他参数是内核参数,如果你改变它们以增加计算内核的复杂性,那么SVM运行时自然会增加.线性内核很简单,速度最快; 非线性内核当然需要更长的时间.一些参数可能不会增加内核的计算复杂性,但会强制使用更复杂的模型,这可能需要更长的SVM才能找到最佳解决方案.
要使用的数据集:
在UCI机器学习库是数据集的重要来源.
该MNIST手写识别数据集是一个很好的使用-您可以随机选择数据子集创建越来越大尺寸的数据集.请记住,链接中的数据包含所有数字,SVM当然是二进制的,因此您必须将数据减少到两位数或执行某种多类SVM.
您也可以轻松生成数据集.要生成线性数据集,随机选择超平面的法向量,然后生成数据点并确定它所在的超平面的哪一侧以标记它.添加一些随机性以允许超平面的特定距离内的点有时被不同地标记.通过增加类之间的重叠来增加复杂性.或者生成一些正态分布点的簇,标记为1或-1,以便分布在边缘重叠.经典的非线性示例是棋盘格.生成点并以棋盘图案标记它们.更难以扩大正方形的数量,增加尺寸并增加数据点的数量.当然,你必须使用非线性内核.