1. 程式人生 > >機器學習之特徵工程-特徵選擇

機器學習之特徵工程-特徵選擇

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

點選“閱讀原文”直接開啟【北京站 | GPU CUDA 進階課程】報名連結

一個基本的資料探勘場景如下:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

資料探勘.jpg

從上面的資料探勘場景可知,當資料預處理完成後,我們需要選擇有意義的特徵,輸入機器學習的演算法模型進行訓練。通常來說,從兩個方面考慮來選擇特徵:

特徵是否發散:如果一個特徵不發散,例如方差接近於0,也就是說樣本在這個特徵上基本上沒有差異,這個特徵對於樣本的區分並沒有什麼用。

特徵與目標的相關性:這點比較顯見,與目標相關性高的特徵,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。

根據特徵選擇的形式又可以將特徵選擇方法分為3種:

  • Filter:過濾法,按照發散性或者相關性對各個特徵進行評分,設定閾值或者待選擇閾值的個數,選擇特徵。

  • Wrapper:包裝法,根據目標函式(通常是預測效果評分),每次選擇若干特徵,或者排除若干特徵。

  • Embedded:整合法,先使用某些機器學習的演算法和模型進行訓練,得到各個特徵的權值係數,根據係數從大到小選擇特徵。類似於Filter方法,但是是通過訓練來確定特徵的優劣。

我們使用sklearn中的feature_selection庫來進行特徵選擇。

Filter0?wx_fmt=png1方差法

使用方差法,要先計算各個特徵的方差,然後根據閾值,選擇方差大於閾值的特徵。使用feature_selection庫的VarianceThreshold類來選擇特徵的程式碼如下:

from sklearn.datasets import load_iris from sklearn.feature_selection import VarianceThreshold #方差選擇法,返回值為特徵選擇後的資料 #引數threshold為方差的閾值 iris = load_iris() print(iris.data[0]) print(iris.target[0]) print(VarianceThreshold(threshold=3).fit_transform(iris.data)[0])

從結果看,只有第三個屬性符合,結果如下:

[ 5.1  3.5  1.4  0.2]0[ 1.4]

皮爾遜係數0?wx_fmt=png

皮爾遜係數只能衡量線性相關性,先要計算各個特徵對目標值的相關係數以及相關係數的P值。用feature_selection庫的SelectKBest類結合皮爾遜係數來選擇特徵的程式碼如下:

from sklearn.feature_selection import SelectKBestfrom scipy.stats import pearsonrfrom sklearn.datasets import load_iris iris=load_iris()#選擇K個最好的特徵,返回選擇特徵後的資料#第一個引數為計算評估特徵是否好的函式,該函式輸入特徵矩陣和目標向量,輸出二元組(評分,P值)的陣列,陣列第i項為第i個特徵的評分和P值。在此定義為計算相關係數#引數k為選擇的特徵個數# 定義函式def multivariate_pearsonr(X, y):    scores, pvalues = [], []    for ret in map(lambda x:pearsonr(x, y), X.T):        scores.append(abs(ret[0]))        pvalues.append(ret[1])    return (np.array(scores), np.array(pvalues)) transformer = SelectKBest(score_func=multivariate_pearsonr, k=2) Xt_pearson = transformer.fit_transform(iris.data, iris.target) print(Xt_pea

rson)

卡方檢驗0?wx_fmt=png

只能用於二分類,經典的卡方檢驗是檢驗定性自變數對定性因變數的相關性。假設自變數有N種取值,因變數有M種取值,考慮自變數等於i且因變數等於j的樣本頻數的觀察值與期望的差距,構建統計量:

0?wx_fmt=png

不難發現,這個統計量的含義簡而言之就是自變數對因變數的相關性(http://wiki.mbalib.com/wiki/%E5%8D%A1%E6%96%B9%E6%A3%80%E9%AA%8C)。用feature_selection庫的SelectKBest類結合卡方檢驗來選擇特徵的程式碼如下:

from sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import chi2 #選擇K個最好的特徵,返回選擇特徵後的資料 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

互資訊法0?wx_fmt=png

互資訊係數能夠很好地度量各種相關性,但是計算相對複雜一些,互資訊計算公式如下:

0?wx_fmt=png

  
使用feature_selection庫的SelectKBest類結合最大資訊係數法來選擇特徵的程式碼如下

from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import mutual_info_classif #選擇K個最好的特徵,返回選擇特徵後的資料 SelectKBest(mutual_info_classif, k=2).fit_transform(iris.data, iris.target)

Wrapper0?wx_fmt=png

包裝法,根據目標函式(通常是預測效果評分),每次選擇若干特徵,或者排除若干特徵。

遞迴特徵消除法0?wx_fmt=png

遞迴消除特徵法使用一個基模型來進行多輪訓練,每輪訓練後,消除若干權值係數的特徵,再基於新的特徵集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特徵的程式碼如下:

from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression #遞迴特徵消除法,返回特徵選擇後的資料

#引數estimator為基模型 #引數n_features_to_select為選擇的特徵個數 RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data,iris.target)

Embedded0?wx_fmt=png

整合法,先使用某些機器學習的演算法和模型進行訓練,得到各個特徵的權值係數,根據係數從大到小選擇特徵。類似於Filter方法,但是是通過訓練來確定特徵的優劣。

基於樹模型的特徵選擇法0?wx_fmt=png

樹模型中GBDT也可用來作為基模型進行特徵選擇,使用feature_selection庫的SelectFromModel類結合GBDT模型,來選擇特徵的程式碼如下:

from sklearn.feature_selection import SelectFromModel from sklearn.ensemble import GradientBoostingClassifier #GBDT作為基模型的特徵選擇SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)

當然還有別的方法:


通過特徵組合後再來選擇特徵:如對使用者id和使用者特徵組合來獲得較大的特徵集再來選擇特徵,這種做法在推薦系統和廣告系統中比較常見,這也是所謂億級甚至十億級特徵的主要來源,原因是使用者資料比較稀疏,組合特徵能夠同時兼顧全域性模型和個性化模型。


通過深度學習來進行特徵選擇:目前這種手段正在隨著深度學習的流行而成為一種手段,尤其是在計算機視覺領域,原因是深度學習具有自動學習特徵的能力,這也是深度學習又叫unsupervised feature learning的原因。從深度學習模型中選擇某一神經層的特徵後就可以用來進行最終目標模型的訓練了。

文中涉及原始碼在此:原始碼(https://github.com/jacksu/machine-learning/blob/master/src/ml/feature_selection.ipynb)

皮爾遜係數0?wx_fmt=png

1、皮爾遜係數(https://www.zhihu.com/question/19734616)


2、普通資料探勘場景(http://www.cnblogs.com/jasonfreak/p/5448462.html)


3、https://www.zhihu.com/question/29316149


4、sklearn feature selection(http://scikit-learn.org/stable/modules/feature_selection.html#univariate-feature-selection)

原文連結:http://www.jianshu.com/p/2624521f87eb

640.png?   BY  簡書  

往期精彩回顧

640.png?

640.png?

0?wx_fmt=gif

點選“閱讀原文”直接開啟【北京站 | GPU CUDA 進階課程】報名連結

相關推薦

機器學習過濾式特徵選擇

機器學習之過濾式特徵選擇 # -*- coding: utf-8 -*- """ Created on Sat Dec 8 16:58:09 2018 @author: muli """ from sklearn.feature_selection import

AI工程師成長路--機器學習模型評估與選擇

開篇簡介:本文是博主結合前輩經驗和自身的認識寫的博文,有不少博主自身理解還不太透徹,因為考慮到文章的完整性,有些部分需要引用的前輩的一些方法,望諒解。由於文章專業化內容過多,會影響閱讀體驗,在這裡建議大家難以理解的部分先不要去深究,等待需要用到的時候再去深入研究一下。本博

機器學習(四)特徵工程以及特徵選擇工程方法

關於特徵工程(Feature Engineering),已經是很古老很常見的話題了,坊間常說:“資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已”。由此可見,特徵工程在機器學習中佔有相當重要的地位。在實際應用當中,可以說特徵工程是機器學習成功的關鍵。縱觀

機器學習特徵工程-特徵選擇

點選“閱讀原文”直接開啟【北京站 | GPU CUDA 進階課程】報名連結 一個基本的資料探勘場景如下: 資料探勘.jpg 從上面的資料探勘場景可知,當資料預處理完成後,我們需要選擇有意義的特徵,輸入機器學習的演算法模型進行訓練。通常來說,從兩個方面考慮來選擇特徵: 特徵是否發散:如果一個特徵

系統學習機器學習特徵工程(二)--離散型特徵編碼方式:LabelEncoder、one-hot與啞變數*

轉自:https://www.cnblogs.com/lianyingteng/p/7792693.html 在機器學習問題中,我們通過訓練資料集學習得到的其實就是一組模型的引數,然後通過學習得到的引數確定模型的表示,最後用這個模型再去進行我們後續的預測分類等工作。在模型訓練過程中,我們會對訓練

機器學習機器學習特徵選擇

機器學習之特徵選擇 特徵選擇方法初識: 1、為什麼要做特徵選擇 在有限的樣本數目下,用大量的特徵來設計分類器計算開銷太大而且分類效能差。 2、特徵選擇的確切含義 將高維空間的樣本通過對映或者是變換的方式轉換到低維空間,達到降維的目的,然後通過特徵選取刪選掉冗餘和不相關的特徵來進一步降維。

機器學習特徵選擇方法整理

三個問題 1、為什麼特徵選擇? 在有限的樣本數目下,用大量的特徵來設計分類器計算開銷太大而且分類效能差。 2、特徵選擇是什麼? 將高維空間的樣本通過對映或者是變換的方式轉換到低維空間,達到降維的目的,然後通過特徵選取刪選掉冗餘和不相關的特徵來進一步降維。 3、如何進行特徵選取?

機器學習特徵工程-資料預處理

摘自 jacksu在簡書 機器學習之特徵工程-資料預處理 https://www.jianshu.com/p/23b493d38b5b 通過特徵提取,我們能得到未經處理的特徵,這時的特徵可能有以下問題: 不屬於同一量綱:即特徵的規格不一樣,不能夠放在

Python機器學習特徵工程

import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from sklearn.model_selection import

Spark機器學習特徵提取、選擇、轉換

本節介紹了處理特徵的演算法,大致分為以下幾組:      1、提取:從“原始”資料提取特徵      2、轉換:縮放,轉換或修改要素      3、選擇:從一組較大的要素中選擇一個子集      4、區域性敏感雜湊(LSH):這類演算法將特徵變換的方面與其他演算法

機器學習特徵工程

首先,給一張特徵工程的思維導圖: 【如果要瀏覽圖片,建議將其下載到本地,使用圖片瀏覽軟體檢視】  關於特徵工程(Feature Engineering),已經是很古老很常見的話題了,坊間常說:“資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已”。由此可見,特徵工程在機器學習中佔

系統學習機器學習特徵工程(一)--維度歸約

這裡,我們討論特徵選擇和特徵提取,前者選取重要的特徵子集,後者由原始輸入形成較少的新特徵,理想情況下,無論是分類還是迴歸,我們不應該將特徵選擇或特徵提取作為一個單獨的程序,分類或者回歸方法應該能夠利用任何必要的特徵,而丟棄不相關的特徵。但是,考慮到演算法儲存量和時間的複雜度,

機器學習特徵值/特徵向量的解析和應用

機器學習中,矩陣的特徵值/特徵向量理論有著非常廣泛的應用,比如資料降維 [1],人臉識別 [2]等。本文主要介紹特徵值/特徵向量。 1. 特徵值 定義: 給定n×nn\times nn×n階方陣AAA,如果存在數值λ\lambdaλ和nnn維非零向量x⃗\ve

系統學習機器學習總結(二)--離散型特徵編碼方式:one-hot與啞變數*

在機器學習問題中,我們通過訓練資料集學習得到的其實就是一組模型的引數,然後通過學習得到的引數確定模型的表示,最後用這個模型再去進行我們後續的預測分類等工作。在模型訓練過程中,我們會對訓練資料集進行抽象、抽取大量特徵,這些特徵中有離散型特徵也有連續型特徵。若此時你使用的模型

機器學習筆記(十一)特徵選擇和稀疏學習

建議檢視原貼  轉載只是為了方便複習,查詢 11.特徵選擇和稀疏學習 11.1子集搜尋與評價 物件都有很多屬性來描述,屬性也稱為特徵(feature),用於刻畫物件的某一個特性。對一個學習任務而言,有些屬性是關鍵有用的,而有些屬性則可能不必要納入訓練資料。對當前學習任務

機器學習 特徵工程 特徵離散化

如果想深入研究特徵離散化,請直接閱讀博文最後的英文文獻,以免浪費您的時間! 一、什麼是特徵離散化 簡單的說,就是把連續特徵分段,每一段內的原始連續特徵無差別的看成同一個新特徵 二、為什麼進行離散化 1、離散化的特徵更易於理解 2、離散化的特徵能夠提高模

機器學習Haar特徵

Haar特徵/矩形特徵   Haar特徵是一種反映影象的灰度變化的,畫素分模組求差值的一種特徵。它分為三類:邊緣特徵、線性特徵、中心特徵和對角線特徵。用黑白兩種矩形框組合成特徵模板,在特徵模板內用 黑色矩形畫素和 減去 白色矩形畫素和來表示這個模版的特

機器學習 LBP特徵

綜述:: LBP特徵:Local Binary Pattern,區域性二值模式特徵,是一種用來描述影象區域性紋理特徵的運算元。LBP特徵運算元計算簡單、效果較好,資料量小,因此LBP特徵在計算機視覺的許多領域都得到了廣泛的應用,LBP特徵比較多用於目標檢測中。

sklearn學習——特徵工程(特徵選擇)

特徵選擇方法總結 什麼是特徵工程? 定義:特徵工程是將原始資料轉化為特徵,更好表示預測模型處理的實際問題,提升對於未知資料的準確性。它是用目標問題所在的特定領域知識或者自動化的方法來生成、提取、刪減或者組合變化得到特徵。 為什麼要特徵工程? 簡

機器學習-淺談特徵選擇

很多時候我們需要做特徵選擇,一方面是因為我們希望模型能夠使用好的特徵擬合數據,另一方面多餘的特徵會導致模型複雜度高,降低模型的泛化能力。最常見的例子就是,文字分類,我們不可能把所有的詞都作為特徵,而是希望選一些“好的”詞作為特徵進入到模型。 下面我們簡單的談一談常