看板 MATLAB 關於我們 聯絡資訊
簡單回一下, 1. min_b || y - Xb ||^2 不要用 inv(X'X)X'y 來解, 用 X\y, Matlab 說明裡有寫而且會給 warning. min_b || y - Xb ||^2 + c^2 ||b||^2 = min_b || [y; zeros(length(b), 1)] - [X; c*eye(length(b))]*b ||^2 所以加上 L2 penalty 一樣用 \ 來解 2. Eigen 不一定比較快, 大部份的演算法他都還沒平行化, (不過做 cross-validation 就自己平行他吧...) Blas3 也還沒用到 AVX 指令, 在新的機器上 (Sandy bridge 以上吧) Matlab 矩陣相乘會快上二倍 (Haswell 系列有 AVX2 可能會差到四倍)。 真的要比 MATLAB 快就 link MKL, Eigen 有 wrapper 可以直接 link MKL, 可是我沒用過也不曉得 lapack 系列他有沒有處理好, 如果不行的話改用 Armadillo http://arma.sourceforge.net MKL 在 linux 下有 academic license -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 207.237.240.224
celestialgod:謝謝回應 12/24 13:02
※ 編輯: forloricever 來自: 207.237.240.224 (12/24 13:06)
celestialgod:我最後看了我的東西,要解的是inv(X'X)*y 12/24 13:29
celestialgod:第一點真的讓我長了知識,謝謝您 12/24 13:29
celestialgod:第二點則是EIGEN的矩陣對矩陣乘法都有平行 12/24 13:29
celestialgod:我覺得不是慢在矩陣乘法 是迴圈 12/24 13:30
celestialgod:因為當我cv的parameter變少,EIGEN就比較快了 12/24 13:34
celestialgod:所以我一開始想問的是我的理解是c++迴圈應比matlab快 12/24 13:35
celestialgod:但是 我的程式不是如此 想問為什麼? 12/24 13:35
forloricever:可能要先用matlab profiler 看看慢在哪邊 12/24 13:51
forloricever:如果主要是矩陣運算慢的話用 C++ 也不會快太多 12/24 13:52
forloricever:因為 MATLAB 也是 pass 給 MKL 做 12/24 13:52
celestialgod:好,那我了解了,謝謝您。 12/24 16:55
celestialgod:armandillo沒有比較快XDDD 12/24 16:55