一、類別變量中“有序”和“無序”的區分
類別變量轉化為數字,需要區分是否是有序類別,如 male和female,就是無序的,應該轉化成(1,0)和(0,1),但衣服大小,M,L,XL,則應轉化為1,2,3
若將無序屬性連續化,則會不恰當的引入序關系,對后續處理如距離計算等造成誤導,具體參加9.3。(待補充)
二、類別變量轉化的Python實現
1、有序的類別變量
有序的類別變量轉化,一般直接采用賦值、映射的方法即可,可以采用Python帶的map函數。
比如size:[X,XL,XXL],使用數值的映射{X:1,XL:2,XXL:3}。
2、無序的類別變量
無序的類別變量轉化,一般對應的轉碼方式為 one-hot編碼,采用pd.get_dummies(df) 就可以。
具體代碼如下
(1)有序:
import pandas as pd
df = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']],
)
df.columns = ['color', 'size', 'prize', 'class label']
# DataFrame相當于一個數據表,DataFrame(data,columns=['a','b','c'],index=['one','two','three']) ,有這些參數
#上面的代碼可以寫成,data = [
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']]
# df = pd.DataFrame (data,columns = ['color', 'size', 'prize', 'class label'])
size_mapping = { 'XL': 3, 'L': 2,'M': 1} #建立一個字典,構建鍵值對,即數據映射。
df['size'] = df['size'].map(size_mapping) # map函數的使用
將 M,L,XL轉化成了1,2,3
(2)無序
pd.get_dummies(df)
將color和class兩列,轉化成了one_hot編碼。