sklearn特徵工程

目錄html

1、    特徵工程是什麼?    2 python

特徵使用方案    3算法

特徵獲取方案    4數組

特徵處理    4app

1.    特徵清洗    4機器學習

2.    數據預處理    4函數

3.    特徵監控    4性能

2、    數據預處理    5學習

1.    無量綱化    5測試

1.1標準化    5

1.2區間縮放法    7

1.3歸一化方法有兩種    7

2.    對定量特徵二值化    8

1.    爲何要對定量特徵二值化?    8

2.    對定量特徵二值化的方法    8

3.    對定性特徵啞編碼    8

1    OneHotEncoder()熱編碼    8

2    LabelEncoder()標籤編碼    8

4.    缺失值計算,處理缺失值    8

1    刪除包含缺失值的數據列(這種方法適用於數據列包含的缺失值太多的狀況)    8

2    填補缺失值    9

3    拓展方法    9

5.    數據變換    9

6.    回顧    9

3、    特徵選擇    10

1.Filter過濾法    10

1.1方差選擇法    10

1.2相關係數法    11

1.3卡方檢驗    12

1.4互信息法    12

2.Wrapper:包裝法    12

2.1遞歸特徵消除法    12

3.Embedder    13

3.1基於懲罰項的特徵選擇法    13

3.2基於樹模型的特徵選擇法    13

4回顧    13

4、    降維    13

1.    主成分分析法(PCA    14

2.    線性判別分析法(LDA    14

3.    回顧    14

5、    總結    14

 

 

使用sklearn作單機特徵工程

原文連接:https://www.cnblogs.com/jasonfreak/p/5448385.html

 

  1. 特徵工程是什麼?

    有這麼一句話在業界流傳:數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上限而已那特徵工程究竟是什麼呢?顧名思義,其本質是一項工程活動,目的是最大限度地從原始數據中提取特徵以供算法和模型使用,經過總結和概括,人們認爲特徵工程包括如下方面:

特徵使用方案

  1. 要實現咱們的目標須要哪些數據? ----基於業務理解,儘量找出對因變量有影響的全部自變量。
  2. 可用性評估
    1. 獲取難度
    2. 覆蓋率
    3. 準確率

       

特徵獲取方案

  1. 如何獲取這些特徵?
  2. 如何存儲?

     

特徵處理

  1. 特徵清洗
    1. 清洗異常樣本
    2. 採樣:數據不均衡、樣本權重
  2. 數據預處理
    1. 單個特徵:歸一化、離散化、Dummy Coding、缺失值和數據變換(log,指數,Box-Cox
    2. 多個特徵:

      降維(PCALDA

      特徵選擇

      1. Filter(思路:自變量和目標變量之間的關聯;相關係數;卡方檢驗;信息增益;互信息)
      2. Wrapper(思路:經過目標函數(AUC/MSE)來決定是否加入一個變量;迭代:產生特徵子集,評價(徹底搜索、啓發式搜索、隨即搜索))
      3. Embedded(思路:學習器自身自動選擇特徵;正則好(L1,L2;決策樹(熵,信息增益);深度學習)
    3. 衍生變量 ----對原始數據加工,生成有商業意義的變量
  3. 特徵監控
    1. 特徵有效性分析 ----特徵重要性,權重
    2. 特徵監控----監控重要特徵----防止特徵質量降低,影響模型效果

特徵處理時特徵工程的核心部分,sklearn提供了較爲完整的特徵處理方法,包括數據預處理,特徵選擇,降維等等。首次接觸到sklearn,一般會被其豐富且方便的算法模型庫吸引,可是這裏介紹的特徵處理庫也十分強大。

本文中使用sklearn中的IRIS(鳶尾花)數據集來對特徵處理功能進行說明。IRIS數據集由Fisher1936年整理,包含4個特徵(Sepal.Length(花萼長度)、Sepal.Width(花萼寬度)、Petal.Length(花瓣長度)、Petal.Width(花瓣寬度)),特徵值都爲正浮點數,單位爲釐米。目標值爲鳶尾花的分類(Iris Setosa(山鳶尾)、Iris Versicolour(雜色鳶尾),Iris Virginica(維吉尼亞鳶尾))。導入IRIS數據集的代碼以下:

from sklearn.datasets import load_iris

#導入IRIS數據集

iris = load_iris()

#特徵矩陣

dataset=iris.data

#目標向量

labels=iris.target

 

  1. 數據預處理

經過特徵提取,咱們能獲得未經處理的特徵,這時的特徵可能有如下問題:

  1. 不屬於同一量綱:即特徵的規格不同,不可以放在一塊兒比較。無量綱化能夠解決這一問題。
  2. 信息冗餘:對於某些定量特徵,其包含的有效信息爲區間劃分,例如學習成績,倘若只關心"及格"或不"及格",那麼須要將定量的考分,轉換成"1""0"表示及格和未及格。二值化能夠解決這一問題。
  3. 定性特徵不能直接使用:某些機器學習算法和模型只能接受定量特徵的輸入,那麼須要將定性特徵轉換爲定量特徵。最簡單的方式是爲每一種定性值指定一個定量值,可是這種方式過於靈活,增長了調參的工做。一般使用啞編碼的方式將定性特徵轉換爲定量特徵:假設有N種定性值,則將這一個特徵擴展爲N種特徵,當原始特徵值爲第i種定性值時,第i個擴展特徵賦值爲1,其餘擴展特徵賦值爲0。啞編碼的方式相比直接指定的方式,不用增長調參的工做,對於線性模型來講,使用啞編碼後的特徵可達到非線性的效果。
  4. 存在缺失值:缺失值須要補充
  5. 信息利用率低:不一樣的機器學習算法和模型對數據中信息的利用是不一樣的,以前提到在線性模型中,使用對定性特徵啞編碼能夠達到非線性的效果。相似地,對定量變量多項式化,或者進行其餘的轉換,都能達到非線性的效果。

咱們使用sklearn中的preproccessing庫來進行數據預處理,能夠覆蓋以上問題的解決方案。

  1. 無量綱化

    無量綱化能夠加快梯度降低法收斂速度,有可能提升精度。

    無量綱化使不一樣規格的數據轉換到同一規格。常見的無量綱化方法有標準化和區間縮放法。標準化的前提是特徵值服從正態分佈,標準化後,其轉換成標準正態分佈。區間縮放法利用了邊界值信息,將特徵的取值區間縮放到某個特色的範圍,例如[0, 1]等。

    1.1標準化

    標準化方法是將變量的每一個值與其平均值之差除以該變量的標準差,無量綱化後變量的平均值爲0,標準差爲1。使用該方法無量綱化後不一樣變量間的均值和標準差都相同,即同時消除了變量間變異程度上的差別。

    標準化公式爲:

    sklearn實現標準化有兩種不一樣的方式:

    1. preprocessing.scale()方法實現,能夠直接將給定數據進行標準化,獲得(0—1正態分佈)Standardize a dataset along any axis

      其中:參數x(類數組,稀疏矩陣)

      axisint類型(默認爲0),若是爲0,按特徵(即列)標準化;若是爲1,按樣本(即行)標準化

      with_mean:均值,默認爲真

      with_std:方差,默認爲真

    2. 使用sklearn.preprocessing.StandardScaler類,使用該類的好處在於能夠保存訓練集中的參數(均值、方差)直接使用其對象轉換測試集數

      據。

class sklearn.preprocessing.StandardScaler(copy=Truewith_mean=Truewith_std=True)

經過刪除平均值和縮放到單位方差來標準化特徵

參數:copy:默認爲True

這個類的屬性:

scale_:數據的相對縮放

mean_:訓練集中每一個特徵的均值

var_:訓練集中每一個特徵的方差、

n_samples_seen_:int類型,樣本數

            這個類的方法:

fit(X[,y]):計算均值和方差爲了以後的縮放

                fit_transform():訓練,而後標準化數據

                get_params(deep=True):獲得估計量的參數

                inverse_transform(X, copy=None):反標準化

                transform(X, y='deprecated', copy=None):標準化

 

1.2區間縮放法

區間縮放法的思路有多種,常見的一種是利用兩個最值進行縮放,公式表達爲:

1.3歸一化方法有兩種

1)使用Normalizer類的方法歸一化

class sklearn.preprocessing.Normalizer(norm='l2'copy=True)

    將樣品歸一化爲單位範數

2)使用normalize()方法進行歸一化

sklearn.preprocessing.normalize(Xnorm='l2'axis=1copy=Truereturn_norm=False)

 

  1. 對定量特徵二值化
    1. 爲何要對定量特徵二值化?

      對於某些定量特徵,其包含的有效信息爲區間劃分,例如學習成績,倘若只關心"及格"或不"及格",那麼須要將定量的考分,轉換成"1"和"0"表示及格和未及格。二值化能夠解決這一問題。

    2. 對定量特徵二值化的方法

  2. 對定性特徵啞編碼

    1. OneHotEncoder()熱編碼

      給定一個數據集,咱們讓編碼器找到每一個特徵的最大值,並將數據轉換爲二進制的形式表現出來。

      好比輸入特徵1的三個樣本值爲129,會編爲一個二進制

    2. LabelEncoder()標籤編碼

      將標籤編碼爲不一樣的數字來表示不一樣的類別

  3. 缺失值計算,處理缺失值

python語言中,缺失值通常被稱爲nan,是"not a number"的縮寫。

下面的代碼能夠計算出數據總共有多少個缺失值,這裏數據是存儲在pandas中的DateFrame中:

  1. 刪除包含缺失值的數據列(這種方法適用於數據列包含的缺失值太多的狀況)

    在大多數狀況下,咱們必須在訓練集(training dataset)和測試集(test dataset)中刪除一樣的數據列。

  2. 填補缺失值

    這種方法比直接刪除數據列好點,能訓練出更好的模型。

    默認的填補策略是使用均值填充

  3. 拓展方法

    若是缺失數據包含重要特徵信息的話,咱們須要保存原始數據的缺失信息,存儲在boolearn列中

  1. 數據變換

  2. 回顧

    1. 特徵選擇

      當數據預處理完成後,咱們須要選擇有意義的特徵輸入機器學習的算法和模型進行訓練。一般來講,

      ****從兩個方面選擇特徵:

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

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

      ****根據特徵選擇的形式又能夠將特徵方法分爲3種:

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

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

      Embedder:嵌入法,先使用某些機器學習的算法和模型進行訓練,獲得各個特徵的權值係數,根據稀疏從大到小選擇特徵,相似於Filter方法,可是是經過訓練來肯定大哥特徵的優劣。

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

      1.Filter過濾法

1.1方差選擇法

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

1.2相關係數法

使用相關係數法,先要計算各個特徵對目標值得相關係數以及相關係數得P值,用feature_selection庫得SelectKBest類結合相關係數來選擇特徵得代碼以下:

相關係數表徵兩組數得相關程度。

1.3卡方檢驗

經典得卡方檢驗是檢驗定性自變量對定性因變量得相關性。假設自變量有N中取值,因變量有M中取值,考慮自變量等於i且因變量等於j得樣本頻數得觀察值與指望得差距,構建統計量:

這個統計量的含義簡而言之就是自變量對因變量的相關性。用feature_selection庫的SelectKBest類結合卡方檢驗來選擇特徵的代碼以下:

1.4互信息法

經典得互信息也是評價定性自變量對定性因變量得相關性的,互信息計算公式以下:

2.Wrapper:包裝法

2.1遞歸特徵消除法

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

3.Embedder

3.1基於懲罰項的特徵選擇法

3.2基於樹模型的特徵選擇法

4回顧

  1. 降維

    當特徵選擇完成後,能夠直接訓練模型了,可是可能因爲特徵矩陣過大,致使計算量大,訓練時間長的問題,所以下降特徵矩陣維度也是必不可少的。常見的降維方法除了以上提到的基於L1懲罰項的模型之外,另外還有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析自己也是一個分類模型。PCALDA有不少的類似點,其本質是要將原始的樣本映射到維度更低的樣本空間中,可是PCALDA的映射目標不同:PCA是爲了讓映射後的樣本具備最大的發散性;而LDA是爲了讓映射後的樣本有最好的分類性能。因此說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。

    1. 主成分分析法(PCA

    2. 線性判別分析法(LDA

    3. 回顧

  2. 總結

    再讓咱們迴歸一下本文開始的特徵工程的思惟導圖,咱們可使用sklearn完成幾乎全部特徵處理的工做,並且不論是數據預處理,仍是特徵選擇,抑或降維,它們都是經過某個類的方法fit_transform完成的,fit_transform要不僅帶一個參數:特徵矩陣,要不帶兩個參數:特徵矩陣加目標向量。這些難道都是巧合嗎?仍是故意設計成這樣?方法fit_transform中有fit這一單詞,它和訓練模型的fit方法有關聯嗎?接下來,我將在《使用sklearn優雅地進行數據挖掘》中闡述其中的奧妙!

相關文章
相關標籤/搜索