最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的標簽編碼和獨熱編碼示例詳解

 更新時間:2023年07月24日 15:31:34   作者:吃肉的小饅頭  
標簽編碼是一種用于將分類列轉換為數(shù)值列的技術,以便它們可以通過僅采用數(shù)值數(shù)據(jù)的機器學習模型進行擬合,這篇文章主要介紹了Python中的標簽編碼和獨熱編碼,需要的朋友可以參考下

在機器學習項目中,我們通常處理具有不同分類列的數(shù)據(jù)集,其中一些列的元素在有序變量類別中,例如列收入水平具有低,中或高的元素,在這種情況下,我們可以用1,2,3替換這些元素。其中1表示“低”,2表示“中”,3表示“高”。通過這種類型的編碼,我們試圖保留元素的含義,其中較高的權重被分配給具有較高優(yōu)先級的元素。

標簽編碼

標簽編碼是一種用于將分類列轉換為數(shù)值列的技術,以便它們可以通過僅采用數(shù)值數(shù)據(jù)的機器學習模型進行擬合。它是機器學習項目中重要的預處理步驟。

標簽編碼示例

假設我們在某個數(shù)據(jù)集中有一個列Height,其中包含Tall,Medium和short元素。要將此分類列轉換為數(shù)值列,我們將對此列應用標簽編碼。在應用標簽編碼之后,“高度”列被轉換為具有元素0、1和2的數(shù)值列,其中0是高的標簽,1是中等的標簽,2是矮的標簽。

在這里插入圖片描述

我們將在目標列Species上的虹膜數(shù)據(jù)集上應用Label Encoding。它包含三個物種Iris-setosa,Iris-versicolor,Iris-virginica。

# Import libraries 
import numpy as np
import pandas as pd
# Import dataset
df = pd.read_csv('../../data/Iris.csv')
df['species'].unique()
'''
array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object)
'''

使用LabelEncoder()應用Label Encoding后,我們的分類值將替換為數(shù)值[int]。

# Import label encoder
from sklearn import preprocessing
# label_encoder object knows 
# how to understand word labels.
label_encoder = preprocessing.LabelEncoder()
# Encode labels in column 'species'.
df['species']= label_encoder.fit_transform(df['species'])
df['species'].unique()
'''
array([0, 1, 2], dtype=int64)
'''

標簽編碼的局限

標簽編碼將分類數(shù)據(jù)轉換為數(shù)字數(shù)據(jù),但它為每個數(shù)據(jù)類別分配一個唯一的數(shù)字(從0開始)。這可能導致在數(shù)據(jù)集的模型訓練期間產(chǎn)生優(yōu)先級問題。具有高值的標簽可以被認為具有比具有較低值的標簽高的優(yōu)先級。

具有輸出類Mexico、Paris、Dubai的屬性。在“標簽編碼”上,此列允許將“Mexico”替換為“0”,將“Paris”替換為“1”,將“Dubai”替換為“2”。由此,可以解釋為在訓練模型時,Dubai具有比Mexico和Paris更高的優(yōu)先級,但實際上,這些城市之間不存在這種優(yōu)先級關系。

獨熱編碼

我們在數(shù)據(jù)科學項目開發(fā)過程中遇到的大多數(shù)現(xiàn)實數(shù)據(jù)集都具有混合數(shù)據(jù)類型的列。這些數(shù)據(jù)集由分類列和數(shù)值列組成。然而,各種機器學習模型不適用于分類數(shù)據(jù),為了將這些數(shù)據(jù)擬合到機器學習模型中,需要將其轉換為數(shù)值數(shù)據(jù)。例如,假設數(shù)據(jù)集有一個Gender列,其中包含Male和Female等分類元素。這些標簽沒有特定的偏好順序,而且由于數(shù)據(jù)是字符串標簽,機器學習模型會誤解其中存在某種層次結構。解決這個問題的一種方法是標簽編碼,我們將為這些標簽分配一個數(shù)值,例如映射到0和1的男性和女性。但這可能會在我們的模型中增加偏差,因為它將開始對女性參數(shù)給予更高的偏好,因為1>0,但理想情況下,兩個標簽在數(shù)據(jù)集中同等重要。為了解決這個問題,我們將使用獨熱編碼技術。

獨熱編碼是我們用來在機器學習模型中將分類變量表示為數(shù)值的技術。

使用獨熱編碼的優(yōu)點包括:

  • 它允許在需要數(shù)值輸入的模型中使用分類變量。
  • 它可以通過向模型提供有關分類變量的更多信息來提高模型性能。
  • 它可以幫助避免排序問題,當分類變量具有自然排序時可能發(fā)生這種情況(例如,“小”、“中”、“大”)。

使用獨熱編碼的缺點包括:

  • 它可能導致維度增加,因為為變量中的每個類別創(chuàng)建了單獨的列。這可能會使模型更加復雜,訓練速度更慢。
  • 它可能導致稀疏數(shù)據(jù),因為大多數(shù)觀測值在大多數(shù)獨熱編碼列中的值為0。
  • 它可能會導致過度擬合,特別是當變量中有許多類別并且樣本量相對較小時。
  • 獨熱編碼是一種處理分類數(shù)據(jù)的強大技術,但它可能導致增加的維度,稀疏性和過擬合。重要的是要謹慎使用它,并考慮其他方法,如序數(shù)編碼或二進制編碼。

示例

在獨熱編碼中,分類參數(shù)將為男性和女性標簽準備單獨的列。因此,只要有男性,男性列中的值將為1,女性列中的值將為0,反之亦然。讓我們用一個例子來理解:考慮給定水果、其對應的分類值和價格的數(shù)據(jù)。

在這里插入圖片描述

在對數(shù)據(jù)應用獨熱編碼之后的輸出如下給出,

在這里插入圖片描述

創(chuàng)建一個dataframe來實現(xiàn)CSV文件的獨熱編碼。

# Program for demonstration of one hot encoding
# import libraries
import numpy as np
import pandas as pd
# import the data required
data = pd.read_csv('employee_data.csv')
print(data.head())

在這里插入圖片描述

分類列中的唯一元素

print(data['Gender'].unique())
print(data['Remarks'].unique())
'''
array(['Male', 'Female'], dtype=object)
array(['Nice', 'Good', 'Great'], dtype=object)
'''

列中元素的計數(shù)

data['Gender'].value_counts()
data['Remarks'].value_counts()
'''
Female    7
Male      5
Name: Gender, dtype: int64
Nice     5
Great    4
Good     3
Name: Remarks, dtype: int64
'''

我們有兩種方法可用于對分類列執(zhí)行one-hot編碼。

利用Pandas庫實現(xiàn)分類列的獨熱編碼

我們可以使用pandas中的pd.get_dummies()函數(shù)對分類列進行one-hot編碼。

one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender'])
print(one_hot_encoded_data)

在這里插入圖片描述

我們可以觀察到數(shù)據(jù)中有3個備注和2個性別列。但是,如果它有n個唯一標簽,則可以只使用n-1列來定義參數(shù)。例如,如果我們只保留Gender_Female列并刪除Gender_Male列,那么我們也可以傳達整個信息,當標簽為1時,它表示女性,當標簽為0時,它表示男性。通過這種方式,我們可以對分類數(shù)據(jù)進行編碼,并減少參數(shù)的數(shù)量。

使用Scikit Learn Library進行獨熱編碼

Scikit-learn(sklearn)是Python中一個流行的機器學習庫,它提供了許多用于數(shù)據(jù)預處理的工具。它提供了一個OneHotEncoder函數(shù),我們使用該函數(shù)將分類和數(shù)值變量編碼為二進制向量,也是在實現(xiàn)該算法之前。確保分類值必須被標記和編碼,因為獨熱編碼僅采用數(shù)字分類值。

# importing libraries
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
# Retrieving data
data = pd.read_csv('Employee_data.csv')
# Converting type of columns to category
data['Gender'] = data['Gender'].astype('category')
data['Remarks'] = data['Remarks'].astype('category')
# Assigning numerical values and storing it in another columns
data['Gen_new'] = data['Gender'].cat.codes
data['Rem_new'] = data['Remarks'].cat.codes
# Create an instance of One-hot-encoder
enc = OneHotEncoder()
# Passing encoded columns
enc_data = pd.DataFrame(enc.fit_transform(
    data[['Gen_new', 'Rem_new']]).toarray())
# Merge with main
New_df = data.join(enc_data)
print(New_df)

在這里插入圖片描述

注意:這里我們已經(jīng)將enc.fit_transform()方法轉換為數(shù)組,因為OneHotEncoder的fit_transform方法返回SpiPy稀疏矩陣,因此當我們有大量分類變量時,首先轉換為數(shù)組可以保存空間。

到此這篇關于Python中的標簽編碼和獨熱編碼的文章就介紹到這了,更多相關Python標簽編碼和獨熱編碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

泗洪县| 封丘县| 娄底市| 沈阳市| 宜丰县| 乐业县| 沁阳市| 怀集县| 奎屯市| 宁河县| 德庆县| 乃东县| 东乡族自治县| 楚雄市| 高密市| 云浮市| 锡林浩特市| 来安县| 葫芦岛市| 台中县| 象山县| 保康县| 社会| 阿瓦提县| 三明市| 仲巴县| 板桥市| 师宗县| 中阳县| 治县。| 军事| 通化市| 汝南县| 辰溪县| 车致| 长子县| 若尔盖县| 奉节县| 从化市| 新宾| 和田县|