|
- from sklearn.preprocessing import OneHotEncoder,LabelBinarizer,LabelEncoder
- import pandas as pd
- import numpy as np
- X1=['XL','M','L']
- print(X1.__class__)
- X2=pd.DataFrame(X1)
- print(X2)
- print('OneHotEncoder')
- lb1=OneHotEncoder().fit_transform(X2).toarray()
- print(lb1)
- print('LabelBinarizer1')
- lb2=LabelBinarizer().fit_transform(X1)
- print(lb2)
- print(lb2.__class__)
- print('LabelBinarizer2')
- lb2=LabelBinarizer().fit_transform(X2)
- print(lb2)
- print(lb2.__class__)
- print('LabelEncoder1')
- lb3=LabelEncoder().fit_transform(X1)
- print(lb3)
- print('LabelEncoder2')
- lb3=LabelEncoder().fit_transform(X2)
- print(lb3)
複製代碼 X1 = ['XL', 'M', 'L']
X2 =
0
0 XL
1 M
2 L
1.必須以column為單位
2.依據資料不同會產生多個column
3.每一個內容與原點的距離相同 OneHotEncoder =
[[0. 0. 1.]
[0. 1. 0.]
[1. 0. 0.]]
XL M L
1.可用row或著column為單位
2.不支援多個column的資料
3.每一個內容與原點的距離相同 LabelBinarizer1 =
[[0 0 1]
[0 1 0]
[1 0 0]]
XL M L
1.可用row或著column為單位
2.不支援多個column的資料
3.依據資料編碼進行轉換,不會設定為固定距離 LabelEncoder1=
[2 1 0]
XL M L
多個column的資料-->只有OneHotEncoder可以做編碼轉換 - from sklearn.preprocessing import OneHotEncoder,LabelBinarizer,LabelEncoder
- X1=[['US','M'],['UK','M'],['FR','F']]
- print(X1)
- lb1=OneHotEncoder().fit_transform(X1).toarray()
- print(lb1)
- #lb2=LabelBinarizer().fit_transform(X1)
- #print(lb2)
- #lb3=LabelEncoder().fit_transform(X1)
- #print(lb3)
複製代碼
多種編碼轉換方式的選擇
• 不會產生新的欄位(數值不會與原點同距離)
• LabelEncoder 轉換後的資料不會產生新的欄位,他的數值不會與原點同距離,當資料的項目 >=3,數值資料就會有大小區別可能引導模型進行大小的判斷,不建議使用LabelEncoder。
• 產生新欄位(數值與原點同距離),
• 請留意以row或column方式操作
• 如果資料以row方式操作,無法使用OneHotEncoder進行轉換。
• 如果資料是多個columns操作,無法使用LabelBinarizer進行轉換。
OneHotEncoder的參數
• ( )內可以省略,或著建議加入categories='auto'
• ( )內也可以指定欄位,建議交由語法自己決定。
• 編碼執行方式可分為兩種 1.循序漸進的方式
1.1 先產生OneHot物件
1.2 物件再執行訓練與轉換特定欄位內容維陣列
one1=OneHotEncoder( )
X2=one1.fit_transform(Sex1).toarray( )
|
|