2017-02-13 3 views
0

Обучение машинам/Python Noob здесь. Может кто-нибудь объяснить мне код ниже? Я не понимаю, как работает нижняя строка.Необходимый код 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, шт.

Сначала мы создаем пустой один:

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_transform и transform для кодирования ваших функций.

+0

Спасибо! Я не понял, что preprocessing.LabelEncoder() вернул список. Последнее дополнение имеет больше смысла. – adamcamroon

+0

@adamcamroon Я думаю, что у вас все еще есть недоразумение. Я отредактировал немного больше объяснений в моем ответе. –