特征工程之離散變量處理
使用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()方法直接作用於待加入模型的測試集。
特征工程之離散變量處理