1. 程式人生 > >特征工程之離散變量處理

特征工程之離散變量處理

panda 影響 表示 分享圖片 整數 虛擬變量 直接 afr com

使用sklearn訓練模型,只能輸入數值型變量。因此需要對數據集中的非數值型離散變量進行處理,非數值型離散變量分為兩類:有序型與無序型

技術分享圖片

一、有序型離散變量處理

什麽叫有序型離散變量呢,比如說衣服尺碼,M、L、XL;學歷:小學、初中、高中、本科;這些都屬於有序型變量。

在上圖數據表格中,size及classlabel則為有序型變量,自定義有序型字典表,進行相關映射即可:

技術分享圖片

二、無序型離散變量處理

衣服的顏色,風向、人員類別這些都屬於無序型變量,如果轉換成有序型數值代入模型會對建模結果造成影響,因此對於無序型變量需要做獨熱編碼或者啞變量處理

(1)獨熱編碼

獨熱編碼,又稱為一位有效編碼,主要是采用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,並且在任意時候只有一位有效。 獨熱編碼是分類變量作為二進制向量的表示,這首先要求將分類值映射到整數值,然後再將每個整數值表示為二進制向量。

具體操作如下:首先將無序型變量color利用LabelEncoder()方法映射為數值

技術分享圖片

再將整數型數值進行獨熱編碼

技術分享圖片

(2)啞變量處理

  在模型中引入多個虛擬變量時,虛擬變量的個數應按下列原則確定: 如果有m種互斥的屬性類型,在模型中引入(m-1)個虛擬變量。 例如,性別有2個互斥的屬性,引用2-1=1個虛擬變量;再如,文化程度分小學、初中、高中、大學、研究生5類,引用4個虛擬變量。
  pandas中的get_dummies方法來創建啞特征,get_dummies默認會對DataFrame中所有字符串類型的列進行獨熱編碼:

技術分享圖片

在實際特征工程處理過程中,使用LabelEncoder()+OneHotEncoder()方式,sklearn能夠將訓練集屬性記錄,並可以采用transform()方法直接作用於待加入模型的測試集。

特征工程之離散變量處理