支援向量機 SVM 是否適合大規模資料?

時間 2021-05-05 10:41:35

1樓:Faith Shi

這個問題,可以分為兩點:

1.支援向量機在大規模資料上是否能取得好的分類效果?

2.支援向量機在大規模資料上進行訓練、測試、引數調優等一系列迭代運算的計算效率如否保證?

關於第一點,支援向量機的求解通常借助於凸優化技術。針對於小規模資料集,支援向量機更容易抓住資料之間的特徵。如何提高效率,使得SVM適用於大規模資料集一直是研究重點。

對線性核SVM已有很多成果,例如基於割平面法的SVM具有線性複雜度,基於隨機梯度下降的Pegasos速度更快,座標下降法在稀疏資料上有很高的效率。對於非線性核,目前不太適合。

關於第二點,對於大規模資料集SVM如何訓練、調參的問題,可以採用分布式平行計算,比如目前流行的分布式記憶體計算框架SparkMlib,就是專門為在大資料上進行機器學習訓練而開發的一款工具,SparkMlib目前支援線性SVM的分布式平行計算。

2樓:

這已經是九年前的問題了,到現在只有20個回答,最近的也是幾年前了。九年前恰好是AlexNet誕生的前夜。注意到這些回答似乎沒有人提到Random feature map的進展,補充一下。

通過使用RF,核方法可以擴充套件到大規模資料集上。

原理上,SVM使用非線性特徵對映將低維特徵對映到高維,,並通過kernel trick直接計算高維特徵之間的內積,避免顯式計算非線性特徵對映,然後在高維特徵空間中做線性分類。用表示非線性對映,它對應的核函式是,使得=k(x,y)" eeimg="1"/>。

由於使用資料集的核矩陣(Kernel Matrix)描述樣本之間的相似性,矩陣元素的個數隨著資料規模增大成平方增長。這樣要隨著資料規模增大,SVM的計算變得無法處理。

2023年,Ali 等人在 NIPS發表Random Features for Large-Scale Kernel Machines,提出使用隨機特徵對映的方法處理大規模核函式的方法。其基本思想是,構造乙個「隨機」對映 直接將資料對映到高維空間,使得在這空間上的內積可以近似等於核函式:

具體內容是依賴於Bochner 定理,可參考原文。經過變形,可得

通過MC取樣近似上述特徵,就得到隨即特徵對映的方法:

這樣,在R^D空間做線性SVM就能夠有效擴充套件到大規模資料集上,計算和儲存對於資料是線性的。

一點擴充套件:

對於非平移不變的kernel,可以通過平移不變的逐漸近似;

對於隨機取樣,可以通過QMC和正交取樣等方式降低隨機性和計算複雜度。

PS,這篇文章獲得NIPS 2017 Test of time award。

3樓:「已登出」

題主說得好,怎麼定義`large amount`是乙個問題,幾十個、幾百個、幾千個或者是幾萬個訓練樣本分別屬於什麼規模呢?還是指的是dimension很高?

我就是覺得SVM效果好不好,主要是看你本身資料的分布,SVM最直觀的原理是去找最大分隔超平面,關鍵還是找所謂的support vectors,運氣好的幾個訓練樣本就有很好的support vectors...所以SVM也不是不適合大規模的資料,只是覺得...沒必要?

如果你從演算法複雜度來看,不做任何優化的話當然有它自身的短處吧。

我覺得任何乙份資料,對於現在的人來說,效果好不好不是你的經驗說了算,凡事還是先去實驗吧,這才是硬道理。算力在不斷提公升,演算法的上限也在不斷提公升,最典型的例子是SVM的訓練和引數搜尋是比較耗時的,在所謂的大規模資料上很難找到好的引數,在經過優化後(例如ThunderSVM就是用GPU做SVM加速的),尋參過程會變得更友好...所以,還是去實驗...

4樓:山公石木

看了一下給位的回答,還是不太明白,就去做了一下實驗,嘗試了包括SVM在內的5個模型,全部用的是預設引數。發現SVM的時間代價相比之下非常高,不能理解為啥。如下圖

綠色的是svm.SVC() ,藍色的gradient boosting 橫軸的用來訓練模型的訓練集大小,1%,10%,100%

5樓:yycc

以前讀文獻,確實有一些提到不適合做大規模處理,有下面幾點原因:

1是在做核卷積的時候,剛開始是每個樣本兩兩做卷積,這樣就要計算n*n次,有一些文章在這裡會提到做快取(cache)處理,是怕重複計算問題,但是明顯看到,假如樣本是10000,那麼10000*10000的矩陣大概需要400多M的空間(如果我沒算錯的話),如果是10w呢,乘以100倍,那計算機抗的住嗎,而10w對於現在動不動上億的資料確實有點小了。

2是搜尋,按照platt中smo的說法是要每次搜尋一對alpha,第乙個是違背kkt條件最大的alpha,第二個是與第乙個距離最大的alpha,計算複雜度也是O(n)最少。

但是反觀上面兩個過程,第一步對不同樣本對做核距離計算,顯然可以分開存放在不同機器,而對於第二點,啟發式搜尋,有沒有必要找到更新步長最大的那一對是關鍵,但是細想無論怎麼更新,我們始終是要其滿足kkt,最大步長也是為了更快達到,那我們何不犧牲多迭代幾次而換來大規模並行呢。所以綜上,把svm做分布式並行是行得通的,所以大規模計算也是可以的。

6樓:KevinSun

理論上可以,我覺得這種問題應該更確切的問SVM的某個實現對大量資料的支援如何,這樣可能結果更靠譜些。我在LIBSVM上測試過MNIST的分類問題,6萬的資料已經吭哧吭哧了,目前測試額matlab和python的實現,不知道在C++下速度如何

7樓:Shu Matt

SVM本質上是非線性方法,那麼就決定了:

(1)在樣本量比較少的時候,容易抓住資料和特徵之間的非線性關係(相比線性分類方法如logistic regression,或者linear SVM)。但是,在樣本量比較多的時候,線性分類方法的劣勢就要小了很多,例如可以通過手工拆分/離散化特徵來模擬非線性關係。這時SVM優勢就不明顯了。

而且有個經驗就是,在資料量大的時候,一些看起來很粗暴無腦的方法反而有「令人驚奇的好效果」。

(2)計算複雜度高。主流的演算法是O(n^2)的,這樣對大規模資料就顯得很無力了。不僅如此,由於其存在兩個對結果影響相當大的超引數(如果用RBF核,是核函式的引數gamma以及懲罰項C),這兩個超引數無法通過概率方法進行計算,只能通過窮舉試驗來求出,計算時間要遠高於不少類似的非線性分類器。

雖然說也還可以優化,但是與其優化它,不如去優化一些理論更魯棒的方法(比如GP classification),或者直接就用計算時間較低的暴力非線性方法(如random forest,這是O(nlogn)的方法)

8樓:邱昊晨

按照我的理解,SVM工作內容是去找超平面

在你的資料分布還不夠的時候,增加資料當然能夠增加模型的準確率,能夠有效調整分類面的長相,但是當你的資料分布覆蓋面足夠的時候,你的支援向量已經基本選定,你繼續增加訓練資料,正常的資料是不會對分類面產生任何影響的,因為它們並不是支援向量,而一些雜訊資料則會對分類面產生不好的影響,它們可能會在分類面附近甚至被當做支援向量,導致支援向量過多,超平面過擬合,這種不管在計算速度上還是在準確率上都會產生不太好的影響

9樓:yafeng deng

這個問題其實有兩個層面,乙個層面是,svm在分類效果上是否適合大規模資料;另外乙個層面是,svm對於大規模資料訓練的運算量是否太大而無法使用。對於第二個層面,我覺得陳義的回答已經很精彩了。

我說一下我對第乙個層面的理解。我理解SVM並不是不適合大規模資料,而應該說,SVM在小樣本訓練集上能夠得到比其它演算法好很多的結果。支援向量機之所以成為目前最常用,效果最好的分類器之一,在於其優秀的泛化能力,這是是因為其本身的優化目標是結構化風險最小,而不是經驗風險最小,因此,通過margin的概念,得到對資料分布的結構化描述,因此減低了對資料規模和資料分布的要求。

而大規模資料上,並沒有實驗和理論證明表明svm會差於其它分類器,也許只是相對其它分類器而言,領先的幅度沒有那麼高而已。

SVM支援向量機詳解

是有點委屈的吧 我一直很想要乙個相機,跟爸媽說過很多次了 如今再跟父母提起,母親推拖著,讓我問父親 母親說現在家裡經濟情況不好,讓我再等等 她明明答應我一考完試就給我買的 我有點難過 我跟母親說我不想要了,這絕非賭氣的話 我怕我問父親之後,他會有經濟壓力,然後家裡又會有矛盾母親卻覺得我不懂事,我說這...

支援向量機(SVM)是什麼意思?

大家說的比較多的是經典的二分類或者多分類的SVM,我來簡單聊聊單類SVM One Class SVM,或OCSVM 這個演算法的名字第一眼看到會令人匪夷所思,既然SVM是用來做分類問題的,只有乙個類怎麼做分類?其實單類SVM回答了這樣乙個問題 某個點是否屬於這個類?一般來說,是用於做異常檢測 Out...

SVM(支援向量機)屬於神經網路範疇嗎?

jljljl 占個坑,最近在複習SVM的時候,對SVM有了新的了解 先貼張圖 支援向量機 SVM 這個結構是很明顯的MLP結構,不過只有兩層,是淺層模型,中間隱層就是支援向量神經元層 SVM本質上其實就是MLP 1 SVM隱層神經元個數只要覆蓋支援向量即可 MLP是通過多個隱層的方法實現非線性函式的...