1. 程式人生 > 其它 >機器學習sklearn(45): 特徵工程(十二) 特徵編碼(六)處理分型別特徵:編碼與啞變數/處理連續型特徵:二值化與分段

機器學習sklearn(45): 特徵工程(十二) 特徵編碼(六)處理分型別特徵:編碼與啞變數/處理連續型特徵:二值化與分段

1處理分型別特徵:編碼與啞變數

from sklearn.preprocessing import LabelEncoder
y = data.iloc[:,-1] #要輸入的是標籤,不是特徵矩陣,所以允許一維
le = LabelEncoder() #例項化
le = le.fit(y) #匯入資料
label = le.transform(y)  #transform介面調取結果
le.classes_ #屬性.classes_檢視標籤中究竟有多少類別
label #檢視獲取的結果label
le.fit_transform(y) #也可以直接fit_transform一步到位
le.inverse_transform(label) #
使用inverse_transform可以逆轉 data.iloc[:,-1] = label #讓標籤等於我們執行出來的結果 data.head() #如果不需要教學展示的話我會這麼寫: from sklearn.preprocessing import LabelEncoder data.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])
from sklearn.preprocessing import OrdinalEncoder
#介面categories_對應LabelEncoder的介面classes_,一模一樣的功能
data_ = data.copy() data_.head() OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_ data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:,1:-1]) data_.head()
data.head()
from sklearn.preprocessing import OneHotEncoder
X = data.iloc[:,1:-1]
enc = OneHotEncoder(categories='auto
').fit(X) result = enc.transform(X).toarray() result #依然可以直接一步到位,但為了給大家展示模型屬性,所以還是寫成了三步 OneHotEncoder(categories='auto').fit_transform(X).toarray() #依然可以還原 pd.DataFrame(enc.inverse_transform(result)) enc.get_feature_names() result result.shape #axis=1,表示跨行進行合併,也就是將量表左右相連,如果是axis=0,就是將量表上下相連 newdata = pd.concat([data,pd.DataFrame(result)],axis=1) newdata.head() newdata.drop(["Sex","Embarked"],axis=1,inplace=True) newdata.columns = ["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"] newdata.head()

2處理連續型特徵:二值化與分段

#將年齡二值化
data_2 = data.copy()
from sklearn.preprocessing import Binarizer
X = data_2.iloc[:,0].values.reshape(-1,1) #類為特徵專用,所以不能使用一維陣列
transformer = Binarizer(threshold=30).fit_transform(X)
transformer
from sklearn.preprocessing import KBinsDiscretizer
X = data.iloc[:,0].values.reshape(-1,1) 
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
est.fit_transform(X) #檢視轉換後分的箱:變成了一列中的三箱
set(est.fit_transform(X).ravel())
est = KBinsDiscretizer(n_bins=3, encode='onehot', strategy='uniform') #檢視轉換後分的箱:變成了啞變數
est.fit_transform(X).toarray()