Python 中的標籤編碼

引言

在我們開始學習分類變數編碼之前,讓我們先了解數據類型及其規模的基礎知識。對於學習者來說,理解這些主題以繼續進行分類變數編碼變得至關重要。眾所周知,數據是一種獨特的信息類型,通常以特定的方式格式化。我們可以將數據分為三種類型,稱為結構化數據、半結構化數據和非結構化數據。

以具有行和列的矩陣形式體現的數據被表示為結構化數據。這些數據可以作為表格存儲在 SQL 資料庫中,可以作為行和列存儲在 excel 工作表中,也可以作為分隔符存儲在 CSV 中。

不以矩陣形式體現的數據稱為半結構化數據和非結構化數據。我們通常可以將半結構化數據存儲在 XML 文件、 JSON 格式等多種格式中,而非結構化數據以圖像、電子郵件、視頻、日誌數據和文本數據的形式存儲。

讓我們考慮一個基於機器學習或數據科學提供的業務問題。如果我們只處理結構化數據,收集的數據是連續變數和分類變數的組合,機器學習中的大多數演算法都不會理解或不能處理分類變數。

這種說法意味著,當數據以數字形式表示而不是分類到模型中進行訓練和測試時,機器學習中的演算法在準確性和其他性能指標上表現得更好。

因此,在使用分類數據來擬合和評估模型之前,必須將其編碼成數字。

機器學習的一些演算法,如基於樹的(如決策樹、隨機森林)演算法,在處理分類變數時表現更好。在任何與數據科學相關的項目中,最好的訓練是將分類數據轉換成數字數據。

既然目標現在很明確,在我們開始構建任何統計模型、深度學習模型或機器學習模型,並開始將分類數據編碼或轉換為數字形式之前,讓我們先了解幾種類型的分類數據。

理解名義規模

*名義標度**被定義為僅是名稱的變數。它們用於標記變數。名義尺度從不相互重疊,也沒有任何數值意義。*

*#### 注:名義規模僅指那些剛剛命名的變數。

以下是一些代表標稱刻度數據的示例。一旦我們收集了數據,我們必須分配一個數字代碼來代表一個名義變數。

| 什麼是人的性別? | 什麼是人的婚姻狀況? | 這個人住在哪個城市? |
| 男性的 | 單一的 | 德里 |
| 女性的 | 已婚的 | 孟買 | | 離婚的 | 金奈 | | 寡居的 | 班加羅爾 |

| 人居住的城市 | 指定的數字代碼 |
| 德里 | one |
| 孟買 | Two |
| 金奈 | three |
| 班加羅爾 | four |

例如,我們可以為一個分類變數分配一個數字代碼 1 來表示德里,2 來表示孟買,3 來表示欽奈,4 來表示班加羅爾——這個人居住在哪個城市。

重要提示:指定的數值沒有任何附加的數學值。

上面的陳述暗示了像除法、乘法、減法或加法這樣的基本數學運算是沒有意義的。因此,像德里/孟買或欽奈+班加羅爾這樣的運營完全沒有意義。

理解序數尺度

序數標度 是指一個變數,其中的數據值是從一個有序集合中存儲的。例如,數據利用李克特量表來表示有限的客戶反饋調查,如下表所示:

客戶反饋:5 分李克特量表

| 反饋 | 指定的數字代碼 |
| 非常窮 | one |
| 窮人 | Two |
| 令人滿意的 | three |
| 好的 | four |
| 很好 | five |

在上面的案例中,我們藉助五點李克特量表收集了反饋數據。我們將數字代碼 1 指定為非常差,2 表示差,3 表示滿意,4 表示好,5 表示非常好。我們還可以觀察到,5 比 4 好,比 3 好很多。然而,如果我們從滿意中減去非常好,那就沒有任何意義了。

正如我們已經知道的,大多數機器學習演算法只對數值或數據起作用。這就是將分類特徵編碼成與模型兼容的表示的原因。

因此,有幾種眾所周知的編碼方法,包括:

  1. 標籤編碼
  2. 一鍵編碼
  3. 序數編碼

但是,在本教程中,我們將只介紹標籤編碼:

理解標籤編碼

在 Python 標籤編碼中,我們需要使用一個介於 0 和類總數減 1 之間的數值來替換分類值。例如,如果分類變數的值有六個不同的類,我們將使用 0、1、2、3、4 和 5。

現在,讓我們以印度各邦的新冠肺炎病例數據為例,了解標籤編碼。在觀察下面的數據幀時,我們會發現 State 列由一個分類值組成,這對於機器來說並不友好。其他列由數值組成。現在,讓我們嘗試對狀態列進行標籤編碼。

印度各邦新冠肺炎病例

| 狀態 | 確認的 | 死亡 | 恢復 |
| 馬哈拉施特拉邦 | Two hundred and eighty-four thousand two hundred and eighty-one | Eleven thousand one hundred and ninety-four | One hundred and fifty-eight thousand one hundred and forty |
| 泰米爾納德邦 | One hundred and fifty-six thousand three hundred and sixty-nine | Two thousand two hundred and thirty-six | One hundred and seven thousand four hundred and sixteen |
| 德里 | One hundred and eighteen thousand six hundred and forty-five | Three thousand five hundred and forty-five | Ninety-seven thousand six hundred and ninety-three |
| 卡納塔克邦 | Fifty-one thousand four hundred and twenty-two | Two thousand and eighty-nine | Nineteen thousand seven hundred and twenty-nine |
| 古吉拉特邦 | Forty-five thousand four hundred and eighty-one | Two thousand and eighty-nine | Thirty-two thousand one hundred and three |
| 北方邦(北方邦) | Forty-three thousand four hundred and forty-one | One thousand and forty-six | Twenty-six thousand six hundred and seventy-five |

正如我們所觀察到的,在執行標籤編碼之後,我們已經為每個分類值分配了數值。我們中的一些人可能想知道為什麼編號是無序的(自上而下)。原因是我們按照字母順序分配了數字,這意味著德里被分配為 0,古吉拉特被分配為 1,卡納塔克邦被分配為 2,以此類推。

| 狀態(標稱刻度) | 狀態(標籤編碼) |
| 馬哈拉施特拉邦 | three |
| 泰米爾納德邦 | four |
| 德里 | Zero |
| 卡納塔克邦 | Two |
| 古吉拉特邦 | one |
| 北方邦(北方邦) | five |

使用 Python 的標籤編碼

Python 的 sklearn 庫為用戶提供了預定義的函數,以便在數據集上使用標籤編碼。

語法:


from sklearn import preprocessing 
obj = preprocessing.LabelEncoder()

正如我們所觀察到的,我們已經創建了一個標籤編碼器類的對象,然後使用該對象將標籤編碼應用於數據。

標籤編碼主要有兩種方式:

  1. 藉助 scikit-learn 庫的 LabelEncoder 類
  2. 類別代碼

使用 scikit-learn 庫進行標籤編碼

讓我們從標籤編碼的過程開始。數據集編碼的主要步驟是擁有數據集。

因此,我們在這裡創建了一個簡單的數據集。

示例:創建數據集


import pandas as pd 
my_data = {
    "Gender" : ['F', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'F', 'M'],
    "Name" : ['Cindy', 'Carl', 'Johnny', 'Stacey', 'Andy', 'Sara', 'Victor', 'Martha', 'Mindy', 'Max']
        }
blk = pd.DataFrame(my_data)
print("Geniune Data Frame:\n")
print(blk)

正如我們所觀察到的,藉助 Pandas 的 DataFrame() 功能,我們創建了一個字典『數據』,並將其轉換為數據幀。

輸出:

Geniune Data Frame:

  Gender    Name
0      F   Cindy
1      M    Carl
2      M  Johnny
3      F  Stacey
4      M    Andy
5      F    Sara
6      M  Victor
7      F  Martha
8      F   Mindy
9      M     Max

從上面的數據集中我們可以觀察到,我們有一個名為「性別」的變數,它的標籤分別為「F」和「M」。

接下來,讓我們嘗試導入標籤編碼器類。然後,我們將在數據集的【性別】變數上應用該類。

示例:


import pandas as pd
from sklearn import preprocessing 

my_data = {
    "Gender" : ['F', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'F', 'M'],
    "Name" : ['Cindy', 'Carl', 'Johnny', 'Stacey', 'Andy', 'Sara', 'Victor', 'Martha', 'Mindy', 'Max']
        }
blk = pd.DataFrame( my_data )
print("Geniune Data Frame:\n")
print( blk )

my_label = preprocessing.LabelEncoder() 

blk[ 'Gender' ]= my_label.fit_transform(blk[ 'Gender' ]) 
print(blk[ 'Gender' ].unique())
print("Data Frame after Label Encoding:\n")
print( blk )

輸出:

Geniune Data Frame:

  Gender    Name
0      F   Cindy
1      M    Carl
2      M  Johnny
3      F  Stacey
4      M    Andy
5      F    Sara
6      M  Victor
7      F  Martha
8      F   Mindy
9      M     Max
[0 1]
Data Frame after Label Encoding:

   Gender    Name
0       0   Cindy
1       1    Carl
2       1  Johnny
3       0  Stacey
4       1    Andy
5       0    Sara
6       1  Victor
7       0  Martha
8       0   Mindy
9       1     Max

說明:

在上例中,我們導入了 scikit-learn 庫的Pandas和預處理模塊。然後,我們將數據定義為字典,並列印一個數據幀供參考。

稍後,我們使用 fit_transform() 方法將對象指向的標籤編碼器功能添加到數據變數中。在執行標籤編碼後,我們列印了關於性別和最終數據幀的唯一代碼。

接下來,讓我們討論另一種藉助類別代碼的標籤編碼方法。

使用類別代碼的標籤編碼

在我們進入使用類別代碼進行標籤編碼的過程之前,讓我們檢查數據集變數的數據類型。

我們可以使用如下所示的數據類型功能來檢查數據類型:


import pandas as pd

my_data = {
    "Gender" : ['F', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'F', 'M'],
    "Name" : ['Cindy', 'Carl', 'Johnny', 'Stacey', 'Andy', 'Sara', 'Victor', 'Martha', 'Mindy', 'Max']
        }
blk = pd.DataFrame( my_data )
print( blk.dtypes )

輸出:

Gender    object
Name      object
dtype: object

一旦我們檢查了變數「性別」的數據類型,我們將轉換並將其轉換為類別類型。

這可以在下面的代碼片段中看到:


import pandas as pd

my_data = {
    "Gender" : ['F', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'F', 'M'],
    "Name" : ['Cindy', 'Carl', 'Johnny', 'Stacey', 'Andy', 'Sara', 'Victor', 'Martha', 'Mindy', 'Max']
        }
blk = pd.DataFrame( my_data )
blk[ 'Gender' ] = blk[ 'Gender' ].astype( 'category' )

print( blk.dtypes )

輸出:

Gender    category
Name        object
dtype: object

現在,讓我們嘗試用Pandas 將標籤轉換成整數類型。DataFrame.cat.codes 功能。下面是一個基於使用類別代碼的標籤編碼的完整示例:

示例:


import pandas as pd

my_data = {
    "Gender" : ['F', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'F', 'M'],
    "Name" : ['Cindy', 'Carl', 'Johnny', 'Stacey', 'Andy', 'Sara', 'Victor', 'Martha', 'Mindy', 'Max']
        }
blk = pd.DataFrame( my_data )
print("Genuine Data Frame:\n")
print( blk )

blk[ 'Gender' ] = blk[ 'Gender' ].astype( 'category' )
print("\nData Frame after Label Encoding using Category codes:\n")
blk[ 'Gender' ] = blk[ 'Gender' ].cat.codes

print( blk )

輸出:

Genuine Data Frame:

  Gender    Name
0      F   Cindy
1      M    Carl
2      M  Johnny
3      F  Stacey
4      M    Andy
5      F    Sara
6      M  Victor
7      F  Martha
8      F   Mindy
9      M     Max

Data Frame after Label Encoding using Category codes:

   Gender    Name
0       0   Cindy
1       1    Carl
2       1  Johnny
3       0  Stacey
4       1    Andy
5       0    Sara
6       1  Victor
7       0  Martha
8       0   Mindy
9       1     Max

說明:

在上面的例子中,我們已經導入了Pandas庫,並將數據定義為字典。然後,我們列印了原始數據幀供參考。之後,我們將變數「性別」的數據類型轉換為一個類別,並使用了Pandas。DataFrame.cat.codes 功能將其轉換為類別代碼。最後,我們使用類別代碼列印了標籤編碼後的結果。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242963.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:53
下一篇 2024-12-12 12:53

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論