Feature Selection詳解(附帶Relief、Relief-F、LVM詳解)(二)
Feature Selection詳解
第二十六次寫部落格,本人數學基礎不是太好,如果有幸能得到讀者指正,感激不盡,希望能借此機會向大家學習。這一篇承接上一篇《Feature Selection詳解(附帶Relief、Relief-F、LVM詳解)(一)》的內容,仍然是針對特徵選擇問題的其他幾種常見方法進行闡述,並介紹其中一種比較經典的特徵選擇演算法(LVM)。
“包裹式”特徵選擇
與過濾式方法在選擇特徵時不考慮學習器不同,“包裹式”特徵選擇方法將學習器的效能作為特徵子集的度量方法考慮進來,因此,包裹式選擇方法可以被認為是為指定學習器選擇最適合的特徵子集。實驗證明,雖然使用該方法的最終學習器的效能要高於過濾式,但是由於特徵選擇過程中需要對學習器進行多次訓練,因此大大增加了計算開銷。
LVW(Las Vegas Wrapper)是一個典型的包裹式特徵選擇方法,於1996年由Liu和Setiono提出,他是“拉斯維加斯演算法”(Las Vegas Algorithm)的一種改進版本,拉斯維加斯演算法是一種隨機搜尋策略,在給定執行時間限制的情況下,該演算法可能得不到最優的結果,在搜尋空間很大(特徵很多)而又不設定時間限制時,可能會得不到最終結果。LVW在隨機搜尋的過程中,加入訓練學習器並評估學習器效能的步驟,演算法虛擬碼如下圖所示。
演算法第1-4行:初始化最小分類錯誤率、當前最優特徵子集大小、當前最優特徵子集以及當前執行次數,將原始資料集劃分為訓練集和驗證集;
演算法第5行:為該演算法新增明確的時間界;
演算法第6-7行:在原始特徵集合中隨機選擇特徵子集,設定該輪迴圈的特徵子集大小;
演算法第8行:在當前樣本空間(只保留中的值)中,通過訓練集訓練指定的學習器,並通過驗證集測試該學習器的分類錯誤率;
演算法第9-14行:如果該輪迴圈得到的學習器分類錯誤率低於,或者等於且該輪迴圈的特徵子集大小小於,就將當前執行次數清零,將設定為,設定為,設定為,否則,執行次數增一。
“嵌入式”特徵選擇
在過濾式和包裹式特徵選擇中,特徵選擇過程與學習器訓練過程由明顯的分別,與此不同,“嵌入式”特徵選擇 是將特徵選擇過程與學習器訓練過程結合在一起,兩者在同一個優化過程中完成,即在學習器訓練過程中自動完成特徵選擇。
線上性迴歸問題中,優化目標可以表示為
為了防止過擬合,在上述優化目標中加入正則項,得到下式
其中,是正則化係數,上式被稱為“嶺迴歸”(Ridge Regression)。現在將正則項替換為正則項,那麼可以得到
上式被稱為LASSO(Least Absolute Shrinkage and Selection Operator),通過加入正則項得到的解更加稀疏,因此可以作為一種有效的嵌入式特徵選擇方法,這種問題的最終解可以通過“近端梯度下降”(Proximal Gradient Descent,簡稱PGD)得到,假設優化目標可以表示為
這裡是優化變數,令表示微分運算元。如果可導,且滿足L-Lipschitz條件,即存在常數使得下式成立
則在附近可以將通過二階泰勒展開式近似為
其中,是與無關的常數,是內積,上式的最小值在如下獲得,
如果通過梯度下降法對進行最小化,那麼每一步梯度下降迭代實際上等價於最小化二次函式,將這種思想推廣到帶有正則項的優化目標,可以類似的得到其每一步迭代為
即在每一步進行梯度下降的同時考慮範數最小化,對於上式,可以先計算
然後求解
由於優化引數的各個分量之間不相關,因此上式由如下閉式解
其中和分別是向量和的第個分量。
參考資料
【1】《機器學習》 周志華
【2】《The Feature Selection Problem :Traditional Methods and a New Algorithm》Kenji Kira,Larry A. Rendell
【3】《Estimating Attributes: Analysys and Extensions of RELIEF》 Igor Kononenko
【4】《Feature Selection And Classification - A Probabilistic Wrapper Approach》 Huan Liu,Rudy Setiono
相關文章
- LVM命令詳解LVM
- linux LVM詳解LinuxLVM
- Java基礎面試題型整理,附帶答案詳解Java面試題
- CTMediator 原理詳解(二)
- Flutter 動畫詳解(二)Flutter動畫
- Java集合詳解(二)Java
- Oracle checkpoint詳解二Oracle
- Linux邏輯盤卷管理LVM詳解LinuxLVM
- SpringMVC詳解(二)------詳細架構SpringMVC架構
- Redis三種特殊資料型別API詳解附帶詳細使用場景Redis資料型別API
- Android Service詳解(二)Android
- JavaScript繼承詳解(二)JavaScript繼承
- Spring Aop 詳解二Spring
- jquery validate 詳解二jQuery
- 帶你走進CSS定位詳解CSS
- LVM管理常用命令引數詳細解釋LVM
- Flutter常用Widget詳解(二)Flutter
- Go 語言介面詳解(二)Go
- 詳解C#泛型(二)C#泛型
- Scrapy基礎(二): 使用詳解
- Azure Terraform(二)語法詳解ORM
- CUDA之Dynamic Parallelism詳解(二)Parallel
- 元件化實踐詳解(二)元件化
- MapReduce 二次排序詳解排序
- 面試問答詳解(二) (轉)面試
- 詳解二分查詢
- Threejs之二:相機詳解JS
- iOS之runtime詳解api(二)iOSAPI
- 委託與事件-事件詳解(二)事件
- MySQL之SQL優化詳解(二)MySql優化
- JavaScript二級下拉選單詳解JavaScript
- 詳解C#特性和反射(二)C#反射
- C語言指標詳解(二)C語言指標
- 【詳解】JNI (Java Native Interface) (二)Java
- JDK8新特性詳解(二)JDK
- Intent詳解(二)----Intent過濾器Intent過濾器
- influx詳解(二):配置檔案UX
- AFNetWorking原始碼詳解(二)原始碼