字體:小 中 大 | |
|
|
2020/04/12 12:17:05瀏覽4306|回應0|推薦8 | |
Python 機器學習筆記(八):處理非數值分類數據 機器學習演算法本質上即是個數學模型,需在「數值」數據基礎上進行運算。然而,真實世界的數據集,往往包含像性別(“男”、“女”)、居住區域(“北”、“中”、“南”)等一個或多個的非數值「分類」(categorical )資料,這類資料需經預先處理後,才能丟進演算法模型裏處理。 數據集資料,可區分為作為預測目標的「類別標籤」(如是否為信用卡詐欺或偽冒交易)及用來預測類別標籤的「特徵項目」(如性別、居住地、刷卡金額等資料),無論是「類別標籤」或「特徵項目」都有可能是非數值的分類資料,皆需預先處理,將其轉為數值編碼形式。 方便以下的說明,假設有個信用卡交易紀錄資料集 df ,「類別標籤」欄位為「詐欺或偽冒交易」,有「否」、「本人詐欺」及「他人偽冒」等三種內容。另「性別」為 df 資料集的「特徵項目」欄位之一,其內容為「男」或「女」。 一、「類別標籤」編碼 雖然 scikit-learn 實作的大多數分類用的演算法「估計器」,會自行將「類別標籤」轉換成「整數值」,但是,為避免技術問題,實務上的好習慣,是先將「類別標籤」手動轉成數值編碼。有對應字典法及LabelEncoder類別二種方法可將「類別標籤」轉換成整數值。 1.對應字典法 (1)利用Python的「字典」這個資料容器,建立 df 資料集的「詐欺或偽冒交易」資料標籤與指定整數值的轉換對應關係 語法: class_mapping = { '否':1, '本人詐欺':2, '他人偽冒':3 } 上式是建立一個Python字典容器,指定'否'與1, '本人詐欺'為2, '他人偽冒'為3之間的對應關係。 (2)叫用Python的map函式,將df資料集的「詐欺或偽冒交易」類別標籤的文字分類內容轉為數值 語法: df[ `詐欺或偽冒交易' ] = df[ `詐欺或偽冒交易' ].map(class_mapping) 我們已用class_mapping字典指定文字與數值對應關係,此時再叫用map函式,即可將「詐欺或偽冒交易」類別標籤欄位裏,內容為'否'者,自動替換為1, '本人詐欺'者,轉為2, '他人偽冒'者,則變為3。 2.使用LabelEncder類別 (1)匯入LabelEncoder類別 語法: from sklearn.preprocessing import LabelEncoder (2)初始化LabelEncoder估計器(estimater) class_le 語法: class_le = LabelEncoder( ) (3)叫用class_le估計器的fit方法,擬合df資料集的「詐欺或偽冒交易」類別標籤 語法: class_le.fit( df[ `詐欺或偽冒交易' ] ) class_le估計器會檢查「詐欺或偽冒交易」類別標籤有多少文字分類內容,並從0開始依序賦予數值編號。假如估計器先找到的內容為「本人詐欺」,給編號0,其次找到「否」內容,編號為1,接著找到「他人偽冒」,則為2。 (4)叫用class_le估計器的transform方法,將df資料集的「詐欺或偽冒交易」類別標籤的文字分類內容轉為數值 語法: df[ `詐欺或偽冒交易' ] = class_le.transform( df[ `詐欺或偽冒交易' ] ) 這時估計器會將學習擬合結果,將「詐欺或偽冒交易」類別標籤欄位裏,內容為'否'者,自動替換為1, '本人詐欺'者,轉為0, '他人偽冒'者,則變為2。 二、「特徵項目」編碼 由於演算法模型是利用「特徵項目」進行數學運算,來預測資料的「類別標籤」,所以「特徵項目」上的數值是有「數學涵義」的。假設我們定義「性別」特徵裏的「男」對應數值1,「女」為2,其背後的意義為「女 > 男」,且「2個男生 = 1個女生」,儘管這種假設是不正確的,演算法仍然可以運算且產生結果,但這結果將不會是最佳的。 針對文字分類的「特徵項目」,我們可利用pandas函式庫的get_dummies方法來處理。假設我們有2筆資料,其「性別」欄的內容分別如下: 資料編號 性別 1 男 2 女 pandas函式庫的get_dummies方法 1.匯入pandas函式庫 語法: import pandas as pd 2.叫用pandas的get_dummies方式,轉換df資料集的「性別」欄位資料 語法:pd.get_dummies( df[ '性別' ] ) 此時,原本「性別」欄位將分拆為「性別_男」及「性別_女」二個欄位,原始資料若為「男」,「性別_男」欄的值為1,「性別_女」欄位為0。反之若原始資料為「女」,則「性別_男」欄為0,「性別_女」欄則為1。此時原先資料集的「性別」資料會變為: 資料編號 性別_男 性別_女 1 1 0 2 0 1 這樣原先「男」、「女」文字內容替換成0、1數據,演算法模型就可進行數學運算了。
|
|
( 知識學習|其他 ) |