Python 中 NumPy 陣列的一位有效編碼
- 在 Python 中使用 NumPy 模組對 NumPy 陣列執行一位有效編碼
-
在 Python 中使用
sklearn
模組的 NumPy 陣列上執行一位有效編碼 -
在 Python 中使用
pandas
模組的 NumPy 陣列上執行一位有效編碼 -
在 Python 中使用
keras
模組的 NumPy 陣列上執行一位有效編碼
Python 具有可用於機器學習的龐大框架。我們可以輕鬆地訓練和測試模型。但是,當涉及分類資料時,某些演算法無法使用此類資料標籤,並且需要數字值。
因此,一位有效編碼是在將資料用於演算法之前對其進行編碼的一種高度使用的技術。
在本教程中,我們將學習如何對 numpy 陣列執行一位有效編碼。
在 Python 中使用 NumPy 模組對 NumPy 陣列執行一位有效編碼
在這種方法中,我們將生成一個包含編碼資料的新陣列。我們將使用 numpy.zeros()
函式建立所需大小的 0 陣列。然後,使用 numpy.arange()
函式在對應的位置將 0 替換為 1。
例如,
import numpy as np
a = np.array([1, 0, 3])
b = np.zeros((a.size, a.max()+1))
b[np.arange(a.size),a] = 1
print(b)
輸出:
[[0. 1. 0. 0.]
[1. 0. 0. 0.]
[0. 0. 0. 1.]]
我們還可以使用 eye()
函式對陣列執行一位有效編碼。預設情況下,它返回一個二維,在主對角線處為 1,在其他位置為 0。我們可以使用此方法並指定我們希望 1 的位置,如下所示。
import numpy as np
values = [1, 0, 3]
n_values = np.max(values) + 1
print(np.eye(n_values)[values])
輸出:
[[0. 1. 0. 0.]
[1. 0. 0. 0.]
[0. 0. 0. 1.]]
在 Python 中使用 sklearn
模組的 NumPy 陣列上執行一位有效編碼
sklearn.preprocessing.LabelBinarizer
是 Python 中可用的類,可以有效地執行此編碼。它用於通過將多標籤轉換為數字形式來進行二進位制化。我們將使用 transform()
函式使用此類的物件來轉換資料。
以下程式碼對此進行了說明。
import sklearn.preprocessing
import numpy as np
a = np.array([1,0,3])
label_binarizer = sklearn.preprocessing.LabelBinarizer()
label_binarizer.fit(range(max(a)+1))
b = label_binarizer.transform(a)
print(b)
輸出:
[[0 1 0 0]
[1 0 0 0]
[0 0 0 1]]
在 Python 中使用 pandas
模組的 NumPy 陣列上執行一位有效編碼
機器學習演算法的資料集通常採用 pandas
DataFrame 的形式。因此,pandas
模組可以很好地執行資料編碼。get_dummies()
可用於將分類資料集轉換為數字指示符,從而執行一位有效編碼。最終結果是一個 DataFrame。
例如,
import pandas as pd
import numpy as np
a = np.array([1,0,3])
b = pd.get_dummies(a)
print(b)
輸出:
0 1 3
0 0 1 0
1 1 0 0
2 0 0 1
在 Python 中使用 keras
模組的 NumPy 陣列上執行一位有效編碼
keras
模組被廣泛用於 Python 的機器學習。該模組中的 to_categorical()
函式可以對資料執行一位有效編碼。
下面的程式碼段顯示瞭如何。
from keras.utils.np_utils import to_categorical
import numpy as np
a = np.array([1,0,3])
b = to_categorical(a,num_classes = (len(a)+1))
print(b)
輸出:
[[0. 1. 0. 0.]
[1. 0. 0. 0.]
[0. 0. 0. 1.]]
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn