smote算法_支持向量机算法的可解释和可视化
SVM通常被認為是“黑匣子”。在本文中,我們將介紹可視化學習的SVM模型及其在真實世界數據上的性能的技術。
本文包含以下部分:
線性模型,SVM和內核簡介
在機器學習中,任何模型在模型輸入和預測輸出之間進行映射的時候都會使用線性分類器。
線性模型相對于神經網絡(非線性模型)的主要優點是特征權重直接對應于模型中特征的重要性。因此,很容易理解模型“學到了什么”。
任何線性模型的核心是輸入示例和參數/權重向量之間的點積。在線性回歸的情況下,這是整個假設函數。其中邏輯回歸通過sigmoid函數饋送點積,使得輸出在0和1之間,因此適用于二元分類問題。
在考慮分類問題時,線性模型的最終決策邊界是直線,平面或超平面,系數等于模型權重/參數,因此只能對可線性分離的數據進行分類,這可能是一個很大的限制。處理更復雜的分析問題。
支持向量機(SVM)是唯一可以對不可線性分離的數據進行分類的線性模型。
您可能會問作為線性模型的SVM如何使線性分類器適合非線性數據。直觀地使用簡單的線性回歸模型,我們可以手動設計x,x2,x3,...特征,以嘗試實現非線性數據點集的擬合。
當我們設計x2特征時,我們基本上將特征x乘以它。因此,假設我們通過將特征x1,x2,x3 ......的組合相乘來從我們的數據集中設計特征,然后理論上我們最終可以得到一個空間,在這個空間中,您的工程特征可以線性分離。以前面的簡單示例為例,看看下面的數據如何在x3特征空間中轉換為幾乎線性的趨勢。
不幸的是,要使用復雜的數據集來實現這一點,需要創建的不僅僅是三維空間(特征x,x2,x3),而實際上是極高維度的特征空間,對于我們數據集中的每個示例來說,計算成本非常高。下面我展示一個函數?(x)的例子,它采用我們的原始特征x并將它們組合起來以創建許多二階多項式特征。在我們繼續之前:我將使用x的符號來表示帶有上標的數據點/訓練樣例來表示特定的數據點,并使用下標來表示特定的特征。
幸運的是,對于我們來說,有一種解決這個計算復雜性難題的方法!當我們推導出SVM的優化問題時(復雜的外觀公式告訴我們如何在坐標上升期間導出和更新我們的權重以實現最大化),結果證明我們的訓練輸入x的特征向量只出現在整個優化公式(以紅色突出顯示)。
此點產生于我們的原始特征空間,因此現在可以使用我們的函數?替換它與我們的特征空間。
那么這有助于降低計算復雜度呢?根據點積的定義,我們取?(x(i))的第i個條目并將其乘以?(x(j))的第i個條目,然后將所有這些相加以獲得單一的縮放器。應用此我們得到:
核心技巧是原始方程的一個非常簡單的重新排列,我們可以看到我們完全刪除了?(x)并且只需要使用我們的原始輸入特征執行計算,但仍然具有計算高維空間的效果。
我們現在要做的就是將涉及?(x)的點積替換為內核等價物(K(x ^ i,x ^ j)):
類似地,當我們想要使用我們的模型進行預測時,我們從不明確地計算高維空間的權重,而是使用內核技巧來進行預測:
總之,我們可以使用內核技巧將非線性數據集轉換為可線性分離的數據集,只是在更高維空間中。Sklearn在SVC實現中帶有許多內核的預包裝,包括Radius Basis Kernel(RBF)和Polynomial Kernels,每個都有自己的超參數,可以使用交叉驗證通過實驗進行調整,以獲得最佳結果。
解釋高維工程特征空間
所以請記住我們如何說線性模型的巨大好處是模型的權重/參數可以被解釋為特征的重要性。好吧,一旦我們設計了高維或無限維特征集,模型的權重隱含地對應于高維空間,這對幫助我們的理解沒有用。相反,我們可以做的是擬合邏輯回歸模型,該模型在給定原始特征的情況下估計標簽y為1的概率,其中f(x)是SVM決策函數:
我們使用最大似然估計來擬合該邏輯回歸模型的參數,該技術稱為Platt Scaling。
那么這如何幫助我們理解SVM的工作原理呢?我們只需擬合模型并在數據集中選擇一個點進行評估,然后通過一系列值一次擾動一個特征,同時保持其他特征的固定。我們可以使用它來繪制模型對每個特征的靈敏度圖表。
SKlearn具有內置于SVC模型中的此功能,您只需確保概率= true,初始化然后使用clf。predict_proba(X)函數獲取概率。
在實踐中,我發現,不僅僅是圍繞單個點進行評估,通常更好地對相關點的集合進行采樣,例如。40個負面例子并按特征平均概率分布,以獲得更具代表性的東西。
這是我在參加NFL Punt Analytics Kaggle比賽時所做的一個例子,研究各種因素對腦震蕩的影響:
我采取了所有的負面例子并對它們的概率進行了平均,我已經突出了每個特征中紅色區域,其中玩家最有可能受到沖擊。如果你有一堆熱門編碼變量(如玩家角色),那就是將它們聚合成條形圖,然后看看特征存在與不存在之間的概率凈變化。
性能評估
當您處理涉及SVM的高維模型時,能夠可視化模型如何對數據點進行分類而不僅僅依賴于F1分數或ROC AUC等指標,這將是一件好事。
雖然有些人可能會使用主成分分析等技術來對分類進行可視化,但這樣做會破壞我們的特征空間的尺寸,從而扭曲我們想要實現的視覺效果。
我發現一種很好的技術稱為“項目直方圖”[2],它涉及為訓練和測試集繪制SVM決策函數輸出的分布圖。在SKlearn的SVC實現中很容易獲得決策函數,只需調用decision_function(X)。您需要跟蹤數據集標簽,以便對投影直方圖進行顏色編碼,如下所示:
投影的直方圖很容易解釋。直方圖x軸標識特定訓練示例距SVM的決策邊界的距離(由中心虛線指示)。
SVM在決策邊界的任一側具有等于1的間隔余量,這是雙優化問題的強制約束('支持向量'是沿著這些邊緣的數據點)。您會注意到在上面的模型中,有一些泄漏到邊緣區域,并且確實從一個類跨越到決策邊界的另一側的類。這是因為我們設置了正則化超參數C> 0(它允許在一些錯誤分類和最小化SVM目標函數之間進行權衡)。
盡管使用了高維特征空間,但該圖表可視化成功地可視化決策邊界區域和所有分類,而不會損失維度。通過直方圖也可以看到混淆矩陣中看到的所有度量(即真陽性,假陽性,真陰性和假陰性的數量)。它還使我們能夠觀察模型是否能夠很好地推廣到測試集。如果測試集具有類似的決策函數輸出到訓練集的分布,那么我們可以說模型在泛化上具有良好的性能。該模型還可以用于確定給定所選擇的超參數是否數據集是線性可分的。
處理不平衡數據
當一個數據集對于一個類相對于另一個類具有不成比例的數量時,我們說它是不平衡的。
如果我們想要建立一個ML模型來預測少數群體的出現,這就是一個問題,因為我們可以通過簡單地將所有少數群體的例子誤分類為多數群體來達到高水平的準確性。
這通常發生在現實世界的數據中,無論是識別惡性組織,信用卡欺詐還是運動中的腦震蕩,都是由于我們希望正確識別事件的相對罕見性。
使用不平衡數據糾正ML模型有兩種普遍接受的做法:
1、對少數群體進行過度抽樣/對多數群體進行抽樣不足
2、增加成本函數中少數例子的權重
選項1:SMOTE
我們可以通過兩種方式重新采樣數據,方法是刪除現有示例(欠采樣)或添加新示例(過采樣)。最常被接受的方法是使用稱為SMOTE(合成少數過采樣技術)的算法對少數類進行過采樣[5]
它比名稱簡單得多,對于數據集中的每個少數點,它選擇k最近的其他少數例子(通常為5),并沿著“加入”現有少數例子的行隨機插入新的少數例子。
這是一個合理的事情,因為我們只是假設通過在類似的現有示例之間進行插值,我們將獲得同一類的新示例。
這往往會顯著改善模型的性能,并有助于推廣少數例子的決策邊界。選項2:將權重引入目標函數
可以采用的另一種方法是在目標函數中分配較高權重,以便對少數例子進行錯誤分類。這將“激勵”算法以正確地對少數類進行分類。
訓練SVM需要多少數據
一個合理的經驗就是訓練樣例的數量至少為特征數量的10倍。如果您有大量的訓練數據,最好使用少于50,000個訓練樣例,因為sklearn中的SVC實現具有O(n3)復雜度,這意味著收斂到解決方案的時間隨著訓練示例的數量而立即增長,它可以即使是一臺體面的筆記本電腦或討人喜歡的容器也會變慢。
它通常值得在較小的數據集上進行培訓,并調整模型的超參數。您可以為模型選擇保留一個小的交叉驗證測試集。盡管您可能使用的實際數據比例很小,但您在測試剩余數據集時模型的概括程度會令您感到驚訝。
總結
以上是生活随笔為你收集整理的smote算法_支持向量机算法的可解释和可视化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中的祖先类_Java程序公共祖先
- 下一篇: 拉结尔6月21日服务器维护,拉结尔6月2