首先說一下兩種學習方式: lazy learning 和 eager learning。
先說 eager learning, 這種學習方式是指在進行某種判斷(例如,確定一個點的分類或者回歸中確定某個點對應的函數值)之前,先利用訓練數據進行訓練得到一個目標函數,待需要時就只利用訓練好的函數進行決策,這是一種一勞永逸的方法, SVM 就屬於這種學習方式;
而 lazy learning 是指只有到了需要決策時才會利用已有數據進行決策,而在這之前不會經歷eager learning 所擁有的訓練過程, KNN 屬於這種方式。
Eager learning 考慮到了所有訓練樣本,說明它是一個全局的近似,優點是雖然它需要耗費訓練時間,可是它的決策時間基本為 0。
Lazy learning 在決策時雖然需要計算所有樣本與查詢點的距離,但是在真正做決策時卻只用了局部的幾個訓練數據,所以它是一個局部的近似,然而雖然不需要訓練,它的復雜度還是需要 O(n),n 是訓練樣本的個數。
Lazy learning 的缺點: 1. 需要的存儲空間比較大 2. 決策過程比較慢。
針對全局和局部的問題,我想了一個實際的例子。假設,現在我們要針對中國各地區的貧富問題進行划分,已經知道西部大部分地方比較貧窮,少部分地方富裕;而東部大部分地方富裕,少部分地方貧窮。首先,我們使用 SVM進行求解,按照 SVM 的思想,最后的結果一定是沿着中國地圖無情的划一條線,而用KNN 時,東部城市中北京,上海等算是富裕的,而菏澤啊這樣的就不太富裕;西部呢,像成都啊(不知道算不算西部,就假設算吧)算是富裕的,西寧啊這樣的算是不太富裕的。
使用應用KNN算法時,我們無法對預測的誤差有一個統計意義上的估計,結果的波動可能很大,這通常不是我們希望看到的。但是KNN的實現簡單,使用靈活,也有自己的用武之地。
參考:http://www.52ml.net/10152.html
因此:
SVM需要訓練過程,預測效率高。
KNN計算復雜度高,但是需要調的參比較小。

理由:因為訓練樣本數量特別大,使用復雜核函數的SVM會導致運算很慢,因此應該考慮通過引入更多特征,然后使用線性核函數的SVM或者lr來構建預測性更好的模型。
SVM有多種核可以選擇,可以處理各種非線性問題(條件是選對核函數)。大多數情況准確率都比LR要高,但是模型較大,訓練效率低。