Machine-Learning

支持向量機可以用於大數據嗎?

  • November 17, 2017

由於我對 SVM 的了解有限,它適用於短而粗的數據矩陣 $ X $ , (功能很多,實例不多),但不適用於大數據。

我知道原因之一是內核矩陣 $ K $ 是一個 $ n \times n $ 矩陣,其中, $ n $ 是數據中的實例數。如果我們說,100K 數據,內核矩陣 $ K $ 會有 $ 10^{10} $ 元素,並且可能需要大約 80G 的內存。

是否有任何可用於大數據的 SVM 修改?(比如說 100K 到 1M 數據點的規模?)

正如您所提到的,存儲內核矩陣需要與數據點數量成二次方比例的內存。傳統 SVM 算法的訓練時間也與數據點的數量呈超線性關係。因此,這些算法對於大型數據集是不可行的。

一種可能的技巧是將核化 SVM 重新表述為線性 SVM。每個元素核矩陣的 表示數據點之間的點積和在將它們(可能是非線性的)映射到特徵空間之後:. 特徵空間映射由核函數隱式定義,核化 SVM 不會顯式計算特徵空間表示。這對於中小型數據集的計算效率很高,因為特徵空間可以是非常高維的,甚至是無限維的。但是,如上所述,這對於大型數據集變得不可行。相反,我們可以顯式地將數據非線性地映射到特徵空間,然後在特徵空間表示上有效地訓練線性 SVM。可以構造特徵空間映射以逼近給定的核函數,但使用比“完整”特徵空間映射更少的維度。對於大型數據集,這仍然可以為我們提供豐富的特徵空間表示,但維度比數據點少得多。

核近似的一種方法是使用 Nyström 近似(Williams and Seeger 2001)。這是一種使用較小的子矩陣來近似大矩陣的特徵值/特徵向量的方法。另一種方法使用隨機特徵,有時稱為“隨機廚房水槽”(Rahimi 和 Recht 2007)。

在大型數據集上訓練 SVM 的另一個技巧是用一組較小的子問題來近似優化問題。例如,在原始問題上使用隨機梯度下降是一種方法(在許多其他方法中)。在優化方面已經做了很多工作。Menon (2009) 給出了很好的調查。

參考

威廉姆斯和西格 (2001)。使用 Nystroem 方法加速內核機器。

拉希米和雷赫特 (2007)。大型內核機器的隨機特徵。

梅農(2009)。大規模支持向量機:算法和理論。

引用自:https://stats.stackexchange.com/questions/314329

comments powered by Disqus