簡體   English   中英

在R中分析SVM(e1071)

[英]Profiling SVM (e1071) in R

我是R和SVM的新手,我正在嘗試從e1071包中分析svm功能。 但是,我找不到任何大型數據集,這些數據集允許我獲得改變輸入數據大小的良好分析范圍。 有誰知道如何工作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)

我不斷增加數據集重復行和列,但我達到了內存的極限,而不是讓svm更難工作......

在“工作SVM”方面 - 什么使SVM工作“更難”是一個更復雜的模型,不容易分離,更高的維度和更大,更密集的數據集。

SVM性能下降:

  • 數據集大小增加(數據點數)
  • 稀疏度降低(零個更少)
  • 維度增加(屬性數量)
  • 使用非線性內核(內核參數可以使內核評估更復雜)

改變參數

您是否可以更改參數以使SVM花費更長時間。 當然,參數會影響您將獲得的解決方案的質量,並且可能沒有任何意義。

使用C-SVM,變化的C將導致不同的運行時間。 (nu-SVM中的相似參數是nu)如果數據集是合理可分的,那么使C更小將導致更長的運行時間,因為SVM將允許更多的訓練點成為支持向量。 如果數據集不是很可分離,那么使C更大將導致更長的運行時間,因為您實際上告訴SVM您需要一個與數據緊密匹配的窄邊距解決方案,並且當數據不容易計算時需要更長的時間來計算分離。

通常,您在進行參數搜索時會發現,有些參數會增加計算時間而精度沒有明顯提高。

其他參數是內核參數,如果你改變它們以增加計算內核的復雜性,那么SVM運行時自然會增加。 線性內核很簡單,速度最快; 非線性內核當然需要更長的時間。 一些參數可能不會增加內核的計算復雜性,但會強制使用更復雜的模型,這可能需要更長的SVM才能找到最佳解決方案。

要使用的數據集:

UCI機器學習庫是數據集的重要來源。

MNIST手寫識別數據集是一個很好用的 - 您可以隨機選擇數據的子集來創建越來越大的數據集。 請記住,鏈接中的數據包含所有數字,SVM當然是二進制的,因此您必須將數據減少到兩位數或執行某種多類SVM。

您也可以輕松生成數據集 要生成線性數據集,隨機選擇超平面的法向量,然后生成數據點並確定它所在的超平面的哪一側以標記它。 添加一些隨機性以允許超平面的特定距離內的點有時被不同地標記。 通過增加類之間的重疊來增加復雜性。 或者生成一些正態分布點的簇,標記為1或-1,以便分布在邊緣重疊。 經典的非線性示例是棋盤格。 生成點並以棋盤圖案標記它們。 更難以擴大正方形的數量,增加尺寸並增加數據點的數量。 當然,你必須使用非線性內核。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM