机器学习中的lazy method与eager method的比较
一 分類方法
機器學習的算法進行分類的時候,一般是根據是否有監督分為:無監督學習,有監督學習,半監督學習。有時候會再加上強化學習(Reinforcement learning)。
但是,根據算法的原理,還有另一種分類方法。即:
如果算法對整個訓練數據集并沒有訓練得到一個整體的模型,這樣,對于每一個新的測試數據點,都需要根據該點和訓練數據集來對目標函數進行預測,叫做lazy method。叫lazy的原因是因為他是“被動的”等待新的測試數據到來,才開始對其進行預測,而不是早早的根據訓練數據集把模型建好,對與新的測試數據,只需要往模型中代入就可以得到結果了。后一種先算好模型再進行預測的算法叫做eager method。
二 典型算法
lazy method的典型算法是KNN, LWR(locally weighted regression, LWR可以看作是KNN中將鄰域概念進行推廣), Case-based reasoning(這個算法還不太懂?);eager method算法則多了,除了lazy method中提到的三種算法之外,幾乎所有的機器學習算法都可以認為是eager method,比如linear regression, logistic regression, ANN, SVM, decision tree, relation rule, etc., 因為他們都是根據訓練數據集建立好模型從而對新數據進行預測的。其中,RBF(radical basis function networks)算是一種其中比較特殊的一種(特殊在哪里稍后講)。
三 Lazy method與Eager Method的解釋和比較
lazy method的特點相當于對于測試數據點,只在測試數據點附近的區域內,根據相應的訓練數據訓練出一個近似的模型(如:KNN只需要考慮最近鄰的K個數據點即可)。與eager method算法相比,lazy method每次都在測試數據點周圍訓練得到一個新的局部最優的目標函數的近似,他們可選的hypothesis space比eager method更大,因此,lazy method算法可以看作是將不同位置的局部最優的目標函數近似進行拼接起來得到的。
eager method需要考慮全局最優,因此只能得到一個最終的目標函數的全局最優近似。由于受到模型需要滿足全局最優的限制,因此,對于新的測試點的位置,eager method算法并不像lazy method算法那樣可以根據不同的位置,不同的周圍訓練數據點等來選擇不同的近似擬合函數,所以,在局部上,eager method可能表現要比lazy method要弱。
那么,是否可以說,lazy method效果就要比eager method方法要好?
當然不是。具體使用中,lazy method要受到:1.近鄰域的合理選擇;2.近鄰域內局部最優目標函數的近似方法是否合適;3.每次預測均需臨時計算,消耗時間長等問題的干擾。
lazy method可以使用不那么復雜的局部最優模型拼接成一個很復雜的模型,對目標函數有更好的模擬和近似,同時,由于并沒有對訓練數據集進行處理,所以沒有丟失任何訓練信息。但是由于之前提到的缺點,因此,lazy method并不適合計算量大,實時性高的應用場景。
那么,能否將eager method進行改進,從而獲取類似lazy method的更好的預測效果呢?
RBF就是這樣一種特殊的eager method。RBF本身是一種全局最優的模型,但該模型的每個局部都是由該局部的訓練數據確定的局部最優,相當與根據局部的數據來進行構建的ANN網絡。那么,RBF與lazy method的區別在哪里?在lazy method中,在測試數據到來之前,根本沒有建立好的模型可以供預測。對于每一個新的測試數據點q,算法根據q的取值,選擇附近的局部區域中的訓練數據點來進行建模,得到局部最優模型,從而對q的結果進行預測。在RBF中,由于想要在測試數據來臨之前就對所有的數據進行建模完畢,從而使得在新的測試數據點到來之后,可以直接根據模型來進行預測,減少了預測時的計算,因此,RBF中使用訓練數據點來代替測試點,對于每一個訓練數據點,都將其當作測試數據點,從而在該位置建立好局部最優模型,最終得到的就是根據整個訓練數據集而建立的全局模型。這要,RBF既保留了局部最優的性質,又具有了全局模型的性質(可以根據模型直接對測試數據進行預測,無需臨時建模)。當然,根據之前的定義,RBF還是歸屬于eager method中的。
參考:
Tom Mitchell的機器學習書,CH8。
總結
以上是生活随笔為你收集整理的机器学习中的lazy method与eager method的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何来玩MNIST数据集?
- 下一篇: Python 'takes exactl