目前我在svm的並行化方面已經有解法. svm在數學上的本質是凸優化理論, 可以有很多種解法。 它的問題具有對偶性, 從原問題出發和從對偶問題出發。傳統svm在大資料集下,它的核矩陣要占用的記憶體非常大,呈平方地遞增。 也就是說1000個資料占用的記憶體會是100個資料占用的記憶體的100 倍。為了解決此問題,涉及到svm的分解,極端的情況下是使用smo演算法,這也是目前svm最流行的解法。 smo演算法每次只求目標函式的兩個alpha值,具有占用記憶體較小,收斂得比較快的優勢。 但在並行上,不是很好做,因為後一步的alpha值依賴前一步的alpha值,前後資料依賴性比較強, 我一直到今年2月中旬左右才從理論上解決此問題。但是,我覺得smo演算法迭代次數太多, 現在我的做法不夠完善。
我有幾條思路可以完善目前的理論
1. cutting-plane能減少迭代的次數,但cutting-plane一樣具有資料依賴性較強的問題,所以我還沒有解決。
2. 對比較稀疏的,但維數非常大的資料,例如文字資料,可以用線性svm代替二次svm, 因為理論已經證明兩者的精度相差不大。但速度上線性svm要快幾個數量級。
3. 從原問題出發,使用內點法。通過矩陣的分解, 使用incomplete cholesky factorization將矩陣分解為兩個較小矩陣的乘積, 分布這兩個矩陣。
以上提出的思路涉及很多數學原理,我正在看convex optimization這本書,希望能有點收穫。svm根據loss函式,可以分為l1-svm和l2-svm。 2023年, bottou提出了一種梯度下降的方法解決l1-svm, 2023年collins 提出了另一種exponentiated梯度下降方法.2023年台灣大學的林智仁教授提出了trust region netton method(tron)解決l2-svm。 目前的svm演算法空前繁盛,我使用了08年末林智仁教授的學生提出另一種序列的梯度下降演算法(a dual coordinate desent method for large-scale linear svm),可以在幾十秒之內,對19000個英文新聞進行分類訓練, 精度達到96.7%,而 使用smo演算法,我的機器不夠記憶體(2.5gb ram),理論上最少也要跑幾個小時。它的演算法前後資料依賴性非常強,目前我沒法把它並行。
以上提出的三條思路,我覺得第1,2條更能達到我的目的,而且效果更好,我正在補數學上的不足,大概有700頁左右的數學理論要看。目前我收集的理論資料有229m,我看過其中的一半左右,因為文章過多,所以沒有在這裡列出來。
爬蟲並行化
map使用 map函式包含了序列操作,引數傳遞和結果儲存的的一系列操作 匯入 from multiprocessing.dummy import pool pool pool 4 表示4執行緒 results pool.map 爬取函式,列表 附上簡單並行爬蟲的例子 author ding 多執行緒...
演算法的並行化比較
顯式演算法 顯式演算法基本假定為 在一微小時間段內,模型任意點速度 加速度為常數。abaqu s軟體 explicit 模組應用中心差分法對運動方程進行顯式時間積分,運動方程的解為 式中 為集中質量矩陣 為外荷載向量 為單元內力向量。由於顯式演算法中不需要對剛度矩陣求逆,集中質量矩陣為對角矩陣,求逆...
使用Openmp並行化
執行命令 g fopenmp xx.cpp lgomp lpthread o xx.out 用例一 include include include void test int n printf d,n int main int argc,char ar 用例二 include include inc...