2017-02-13 111 views
0

機器學習/ Python Noob here。有人可以向我解釋下面的代碼嗎?我不明白下面的線路是如何工作的。需要Scikit代碼說明

# This line in the code below, what does it do? 
label_encoder.append(preprocessing.LabelEncoder()) 

label_encoder = [] 
X_encoded = np.empty(X.shape) 
for i,item in enumerate(X[0]): 
    if item.isdigit(): 
     X_encoded[:, i] = X[:, i] 
    else: 
     label_encoder.append(preprocessing.LabelEncoder()) 
     X_encoded[:, i] = label_encoder[-1].fit_transform(X[:, i]) 

謝謝!

+0

它將'LabelEncoder'的一個實例添加到列表中;該實例適用於後續行。 (投票遷移。) –

回答

3

label_encoder是一個列表,它在python中是一個有序集合,您可以使用它來存儲任何類型的對象。它被錯誤地命名,它應該是label_encoders,plurl。

我們首先創建一個空的:

label_encoders = [] 

然後,當我們遇到需要編碼列

if item.isdigit(): 
    # Don't need to endcode. 
else: 
    # Do need to encode. 

我們創建了一個新的preprocessing.LabelEncoder()對象,並將其保存以備後用

label_encoders.append(preprocessing.LabelEncoder()) 

最後,我們使用最近創建的LabelEncoder對象實際編碼列

X_encoded[:, i] = label_encoders[-1].fit_transform(X[:, i]) 

我們需要存儲新LabelEncoder對象地方,因爲我們幾乎肯定會遇到在未來的測試集或新的生產數據,並且將需要編碼數據就像我們編碼我們的訓練數據一樣。

我可能會寫這樣的代碼,這是稍微更清晰

label_encoders = [] 
X_encoded = np.empty(X.shape) 
for i, item in enumerate(X[0]): 
    if item.isdigit(): 
     X_encoded[:, i] = X[:, i] 
    else: 
     label_encoder = preprocessing.LabelEncoder() 
     X_encoded[:, i] = label_encoder.fit_transform(X[:, i]) 
     label_encoders.append(label_encoder) 

謝謝!我沒有意識到preprocessing.LabelEncoder()返回一個列表。

它不!列表來自行

label_encoders = [] 

preprocessing.LabelEncoder()調用返回一個LabelEncoder類型的對象。這實現了sklearn transformation interface,它允許您使用fit_transformtransform方法對您的要素進行編碼。

+0

謝謝!我沒有意識到preprocessing.LabelEncoder()返回一個列表。最後的追加現在更有意義。 – adamcamroon

+0

@adamcamroon我認爲你仍然有一個誤解。我對我的答案進行了更多解釋。 –