瞭解KernelML可以讓你更好的掌握機器學習算法

作者發明了一個特定的“粒子優化器”,併發布了一個名為kernelml的pip python包。這樣做目的是為分析人員和數據科學家提供一種處理損失函數和非線性係數的廣義機器學習算法。“粒子優化器”的主要原理是通過機器學習和概率模擬相結合的方法,使用損失函數、輸入和輸出矩陣以及(可選)隨機採樣器搜索最優參數。作者正在研究該項目更多的可能性,並希望最終使它開源。

舉例:

瞭解KernelML可以讓你更好的掌握機器學習算法

讓我們以經度和緯度座標的聚類為例。聚類方法是讓K-均值使用歐氏距離來進行比較觀察。然而,經緯度數據點之間的歐氏距離並不直接映射到半正矢(Haversine)距離。這意味著,如果將0到1之間的座標標準化,那麼距離將在集群模型中有所誤差。一個可能的解決辦法是找到一個緯度和經度的投影,這樣到數據點質心的半正矢(Haversine)距離等於歐氏空間中投影的緯度和經度。

瞭解KernelML可以讓你更好的掌握機器學習算法

這個座標轉換的結果支持你將相對於中心的半正矢距離表示為歐氏距離。(它可以被縮放並用於解決集群問題的方案中。)

另一個問題是求非線性係數的最優值,即最小二乘線性模型中的次方轉換。這樣做的原理是:整數冪的變換很少能採集到最適合的變換值。通過允許電子變換為任意實數,提高模型的精度,使模型更好地應用於驗證數據中。

為了弄清整數冪的含義,作者給出了模型的公式。

算法:

瞭解KernelML可以讓你更好的掌握機器學習算法

KernelML背後的想法很簡單。通過機器學習模型中參數更新的歷史記錄來決定如何更新下一個參數集。在後端使用機器學習模型會帶來偏見方差問題。具體來說,就是每次迭代時參數的更新都會帶來誤差,解決方案是每次迭代後根據最佳記錄參數集進行蒙特卡羅模擬。

瞭解KernelML可以讓你更好的掌握機器學習算法

趨同問題:

每次迭代後,模型會保存最佳參數和自定義損失記錄。模型還會記錄所有參數的更新歷史。問題是如何使用這些數據來定義收斂。一個可能的解決辦法是:

該公式通過最後10個參數和最佳參數創建Z分數。如果所有參數的Z值小於1,則該算法符合收斂的要求。但當存在理論上的最佳參數集時,收斂將處於最佳結果。這是使用聚類算法時的一個問題,參見下面的示例。

瞭解KernelML可以讓你更好的掌握機器學習算法

我們不會過多的深入討論集群解決方案,因為它顯然不能代表數據。聚類解決方案使多維直方圖與6個正態分佈的平均概率之間的差異最小化(每個軸有3個)。在這裡,分佈可以很容易地對數據點進行“交易”,這可能會增加收斂時間。為什麼這裡不適合3個多元正態分佈?因為由於某些參數具有約束條件,因此在模擬分佈參數時存在問題。協方差矩陣必須是正的,半定的,反演需要存在的。正態分佈的標準差必須大於0。該模型中使用的解決方案通過對每個參數進行自定義模擬,將參數約束結合在一起。(作者仍在尋找一個很好的公式,如何有效地模擬多元正態分佈的協方差矩陣。)


為什麼要用KernelML來代替EM算法?

非正態分佈,如泊松分佈,可能與多元正態簇解中的其他維數不相適應。此外,隨著維數的增加,一個集群成為唯一具有非零值特性的集群的可能性也在增加。這給EM算法帶來了一個問題,因為它試圖更新協變矩陣。唯一特徵與其他維度之間的協方差為零,或者另一個集群接受具有此非零值的觀測的概率為零。

優化器的好處是:

參數的概率模擬與全參數化模型相比具有很大的優越性。首先,它在隨機模擬中引入正則化。例如,如果參數的隨機模擬介於—1到1之間,則可以推斷參數的更新具有同等的重要性。此外,當算法收斂時,每一次迭代都會產生一組參數,這些參數將對全局或局部最小損失進行採樣。該方法的主要優點是:1)可以為每個參數建立置信區間;2)各參數集的預測輸出可以作為統一模型中的一個有用的特徵。


分享到:


相關文章: