網路城邦
上一篇 回創作列表 下一篇   字體:
Python 機器學習筆記(八):處理非數值分類數據
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數據,演算法模型就可進行數學運算了。  








 

( 知識學習其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=gwogo&aid=132454377