2012-04-24 45 views
6

我需要在大量訓練樣本上訓練一個迴歸模型,可能包含任意特徵。我應該考慮什麼樣的 學習算法?爲什麼?我應該考慮哪些學習算法來訓練對數線性迴歸模型?

問題的快速摘要:

  • 約500萬個訓練例子
  • 在2-4萬元,每年的速度增加訓練例子
  • 訓練實例當前包含每10個功能
  • 大約400k的人口特徵(出自更大的總特徵空間)
  • 隨時間增加的附加功能
  • 再培訓或調整模型(至少)每天把新實例
  • 優化標準:最小平方誤差百分比
  • 輸出:單實值的數

我有一些經驗的培訓對數線性模型在類似大小的分類問題上(使用SVM,Averaged和Voted Perceptrons等)添加任意特徵的能力很重要,但在這種情況下,訓練時間也很有價值。例如,到目前爲止,我對SVMLight的一個實驗花了幾個星期的時間來聚合這些數據的一個子集。我們可以跨多核機器或(可能)集羣進行並行處理,但是我們需要在幾分鐘內對模型進行訓練。在線培訓會更好。

我成功(並迅速)訓練了一個平均感知器模型。但是,據我所知,AP通常不適用於迴歸。美聯社是否爲迴歸模型提供任何收斂保證?有沒有其他正式的理由不適用?或者是我的要求合理匹配?

我應該研究哪些其他選項? SVM可能會提供更高的準確性,但二次訓練時間不可接受。如果線性時間SVM算法是可訪問的,那可以很好地工作。

潛在的長處:

  • 在線培訓
  • 開放源代碼實現提供(最好在Java中)。如有必要,我們可以推出我們自己的實現,但如果可能的話,我會盡量避免。

感謝您的輸入。

+0

對於分類,我已經在隨機梯度下降SVM(http://leon.bottou.org/projects/sgd#)方面取得了很大的成功 - 您可能需要考慮使其適應迴歸。 – etarion 2012-04-25 00:56:18

回答

7

這是大規模支持向量機的經典問題。如果添加了新功能,並且如果未使用在線svm添加新數據,則需要重新訓練SVM模型。一些選項:

實用選項(下架):

LIBLINEAR - 如果你能做到線性SVM有一些算法,它採取了線性核的優勢,提供比二次訓練時間更好。查看來自libsvm相同研究組的LIBLINEAR。他們在昨天發佈的版本1.91中增加了迴歸。 http://www.csie.ntu.edu.tw/~cjlin/liblinear/

Oracle ODM - Oracle在其ODM軟件包中提供了SVM。他們採取切實可行的方法來提供「足夠好」的SVM,而無需花費尋找真正最佳解決方案的計算成本。他們使用一些採樣和模型選擇技術 - 你可以找到關於此信息:http://www.oracle.com/technetwork/database/options/advanced-analytics/odm/overview/support-vector-machines-paper-1205-129825.pdf

SHOGUN - 幕府機器學習工具箱是專爲大規模的學習,他們與一些SVM實現的界面,以及其他方法。我從來沒有使用它,但它可能是值得一試:http://www.shogun-toolbox.org

Kernel-machines.org擁有的軟件包列表:http://www.kernel-machines.org/software

其他SVM研究

如果你是想要推出自己的產品,有許多技術可以嘗試將SVM擴展到已經發表在研究論文中的大型數據集,但代碼並不一定可用,可用或維護爲上述示例。他們聲稱好的結果,但每個都有自己的一套缺點。許多涉及做一些水平的數據選擇。例如,一些研究論文使用線性時間聚類算法對數據進行聚類,並基於聚類訓練連續的SVM模型,以便在不使用所有數據的情況下構建模型。核心向量機聲稱線性訓練時間,但是他們的準確性是否與他們聲稱的一樣高,有一些批評。許多論文使用不同的啓發式算法來嘗試選擇最可能的支持向量候選。其中許多是用於分類的,但可能適用於迴歸。如果你想了解更多關於這項研究的信息,我可以添加一些參考資料。

工具探索算法

你可能已經熟悉這些,但我想我會扔在這裏以防萬一:

。它有很好的其他算法大數據集上的運行時間,但是它們是否會運行良好很難說,這取決於數據的組成。由於運行時間很重要,因此我會從較簡單的模型開始,然後進入更復雜的模型。人工神經網絡,決策樹迴歸,貝葉斯方法,局部加權線性迴歸或混合方法(如模型樹,它是葉節點是線性模型的決策樹)都可以比大型數據集上的SVM更快地完成,並且可能產生好的結果。

WEKA - Weka是探索您的選擇的好工具。我會使用WEKA以不同算法嘗試數據的子集。源代碼是打開的,如果你選擇了一些你可以根據自己的需要進行調整的代碼,就可以用java編寫。 R編程語言也實現了很多算法,與Matlab中的編程相似。 http://www.r-project.org/

我不會推薦使用WEKA或R非大型數據集,但它們是試圖縮小什麼算法可能適合您的有用工具。

+0

感謝編輯vitalik :) – karenu 2012-04-27 17:47:51

+0

感謝您的詳細解答。如果可以的話,我會不止一次地投票。 ;-)我認爲我前段時間在研究相關問題時着眼於LibLinear,但是因爲訓練時間而轉移了它。我沒有意識到它現在支持線性時間訓練。聽起來這可能是一個非常好的選擇。 – AaronD 2012-04-30 16:19:01

+0

對不起,我沒有說它是線性時間,只比二次方好。它使用線性內核。它以O(ln)迭代的代價爲O(log(1/eps))迭代提供了eps精確解,其中l是訓練點的數量,n是每個實例的非零元素的平均數。所以數據越稀疏,越接近線性時間。 – karenu 2012-04-30 17:24:34

相關問題