特征工程

標簽: 特征工程  機器學習

思考

機器學習的算法最終預測結果很大程度與特征的篩選,清洗等有很大的關系,如何使特征的選取有章可循?

這就是本文特征工程的重點

  1. 特征的使用方案

    • 原則上根據業務,盡可能找出對因變量有影響的所有自變量
    • 可用性評估:獲取難度、覆蓋率、準確率
  2. 特征處理

    • 特征清洗:包括清洗異常樣本、采樣(數據不均衡,樣本權重)
    • 特征預處理(重點)
  3. 特征監控

    • 特征有效性分析
    • 監控重要特征,防止特征質量下降,影響模型效果

我們將特征處理中的預處理與特征如何選擇作為重點來分析

數據預處理

from sklearn.preporcessing

無量綱化:

  • 區間縮放法

    區間縮放法利用了邊界值信息,將特征的取值區間縮放到某個特點的范圍,例如[0, 1]等

    返回值為縮放到[0, 1]區間的數據

    from sklearn.preprocessing import MinMaxScaler
    MinMaxScaler().fit_transform(iris.data)
  • 標準化

    標準化的前提是特征值服從正態分布,標準化后,其轉換成標準正態分布。

    標準化需要計算特征的均值和標準差
    其中S為標準差

    from sklearn.preprocessing import StandardScaler
    StandardScaler().fit_transform(iris.data)
  • 歸一化

    標準化是依照特征矩陣的處理數據,其通過求z-score的方法,將樣本的特征值轉換到同一量綱下。歸一化是依照特征矩陣的處理數據,其目的在于樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標準亚博yaboApp官网,也就是說都轉化為“單位向量”。

    from sklearn.preprocessing import Normalizer
    Normalizer().fit_transform(iris.data)

對定量特征二值化

定量特征二值化的核心在于設定一個閾值,大于閾值的賦值為1,小于等于閾值的賦值為0

from sklearn.preprocessing import Binarizer

對定性特征啞編碼 (獨熱編碼)

from sklearn.preprocessing import OneHotEncoder
# 對文本數據進行數字編碼
from sklearn.preprocessing import LabelEncoder

缺失值計算

缺失值計算亚博yaboApp官网,返回值為計算缺失值后的數據
參數missing_value為缺失值的表示形式,默認為NaN
參數strategy為缺失值填充方式,默認為mean(均值)

from numpy import vstack, array, nan
from sklearn.preprocessing import Imputer
# 例
Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))

特征選擇

  • 按照特征是否發散選擇:類似于方差,數據越集中越穩定
  • 按照特征與目標的相關性強弱選擇
  • 依據經驗選擇

實現方式

from sklearn import feature_selection
  • Filter(過濾法)

    
    # 按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征
    from sklearn.feature_selection import VarianceThreshold
    # 方差選擇法,返回值為特征選擇后的數據
    # 參數threshold為方差的閾值
    VarianceThreshold(threshold=0.5).fit_transform(iris.data)
  • Wrapper(包裝法)

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

    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)
  • Embedded(集成法)

    先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。類似于Filter方法亚博yaboApp官网,但是是通過訓練來確定特征的優劣。

    • 基于懲罰項的特征選擇法

    使用帶懲罰項的基模型,除了篩選出特征外,同時也進行了降維。

    from sklearn.feature_selection import SelectFromModel
    from sklearn.linear_model import LogisticRegression
    #帶L1懲罰項的邏輯回歸作為基模型的特征選擇
    # 最終選擇的特征個數由C決定
    SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)
    • 基于樹模型的特征選擇法

    樹模型中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)

    算法思想

    GBDT的思想可以用一個通俗的例子解釋,假如有個人30歲,我們首先用20歲去擬合,發現損失有10歲,這時我們用6歲去擬合剩下的損失,發現差距還有4歲,第三輪我們用3歲擬合剩下的差距,差距就只有一歲了。如果我們的迭代輪數還沒有完,可以繼續迭代下面,每一輪迭代,擬合的歲數誤差都會減小。

數據挖掘流程

原文鏈接:加載失敗,請重新獲取