6.9. 轉換預測目標 (y)#

這些轉換器不應在特徵上使用,而僅在監督式學習目標上使用。另請參閱迴歸中轉換目標,如果您想轉換用於學習的預測目標,但在原始(未轉換)空間中評估模型。

6.9.1. 標籤二元化#

6.9.1.1. LabelBinarizer#

LabelBinarizer 是一個實用類別,用於幫助從多類別標籤列表中建立標籤指示矩陣

>>> from sklearn import preprocessing
>>> lb = preprocessing.LabelBinarizer()
>>> lb.fit([1, 2, 6, 4, 2])
LabelBinarizer()
>>> lb.classes_
array([1, 2, 4, 6])
>>> lb.transform([1, 6])
array([[1, 0, 0, 0],
       [0, 0, 0, 1]])

使用此格式可以讓支援標籤指示矩陣格式的估計器進行多類別分類。

警告

如果您使用的估計器已經支援多類別資料,則不需要 LabelBinarizer。

有關多類別分類的更多資訊,請參閱多類別分類

6.9.1.2. MultiLabelBinarizer#

多標籤學習中,二元分類任務的聯合集合使用標籤二元指示器陣列表示:每個樣本是形狀為(n_samples,n_classes)的二維陣列的一列,其中二元值 1 (即非零元素) 對應於該樣本的標籤子集。例如,np.array([[1, 0, 0], [0, 1, 1], [0, 0, 0]]) 這樣的陣列表示第一個樣本中的標籤 0、第二個樣本中的標籤 1 和 2,以及第三個樣本中沒有標籤。

以標籤集列表形式產生多標籤資料可能會更直觀。MultiLabelBinarizer 轉換器可以用於在標籤集合的集合與指示器格式之間進行轉換

>>> from sklearn.preprocessing import MultiLabelBinarizer
>>> y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]
>>> MultiLabelBinarizer().fit_transform(y)
array([[0, 0, 1, 1, 1],
       [0, 0, 1, 0, 0],
       [1, 1, 0, 1, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 0, 0]])

有關多標籤分類的更多資訊,請參閱多標籤分類

6.9.2. 標籤編碼#

LabelEncoder 是一個實用類別,用於幫助正規化標籤,使其僅包含 0 到 n_classes-1 之間的值。這有時對於編寫高效的 Cython 常式很有用。LabelEncoder 可以如下使用

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()
>>> le.classes_
array([1, 2, 6])
>>> le.transform([1, 1, 2, 6])
array([0, 0, 1, 2])
>>> le.inverse_transform([0, 0, 1, 2])
array([1, 1, 2, 6])

它也可用於將非數值標籤(只要它們是可雜湊且可比較的)轉換為數值標籤

>>> le = preprocessing.LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"])
LabelEncoder()
>>> list(le.classes_)
['amsterdam', 'paris', 'tokyo']
>>> le.transform(["tokyo", "tokyo", "paris"])
array([2, 2, 1])
>>> list(le.inverse_transform([2, 2, 1]))
['tokyo', 'tokyo', 'paris']