Как определить oneHotEncoder для титанического набора данных

Я пытаюсь работать с титаническим набором данных. Данные имеют категориальные значения, поэтому я использовал labelEncoder, чтобы преобразовать данные в числа вместо текста. До:

     PassengerId  Survived  Pclass     Sex    Age  SibSp  Parch      Fare Embarked
0              1         0       3    male  22.00      1      0    7.2500        S
1              2         1       1  female  38.00      1      0   71.2833        C
2              3         1       3  female  26.00      0      0    7.9250        S

После:

     PassengerId  Survived  Pclass  Sex    Age  SibSp  Parch      Fare  Embarked
0              1         0       3    1  22.00      1      0    7.2500         2
1              2         1       1    0  38.00      1      0   71.2833         0
2              3         1       3    0  26.00      0      0    7.9250         2

Это код:

from sklearn.preprocessing import LabelEncoder

labelencoder_X = LabelEncoder()    
data['Embarked'] = labelencoder_X.fit_transform(data['Embarked'])
data['Sex'] = labelencoder_X.fit_transform(data['Sex'])

Теперь, поскольку пол пассажира имеет такое же значение, я хочу использовать oneHotEncoder. Насколько я понимаю, данные должны выглядеть следующим образом:

     PassengerId  Survived  Pclass  Male Female    Age  SibSp  Parch      Fare  Embarked
0              1         0       3    1     0     22.00  1      0    7.2500         2
1              2         1       1    0     1     38.00  1      0   71.2833         0
2              3         1       3    0     1     26.00  0      0    7.9250         2  

Как я могу написать код для этого? Я пытался работать с аналогичным методом для oneHotEncoder:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

labelencoder_X = LabelEncoder()    
data['Embarked'] = labelencoder_X.fit_transform(data['Embarked'])
data['Sex'] = labelencoder_X.fit_transform(data['Sex'])

onehotencoder = OneHotEncoder()
data['Embarked'] = onehotencoder.fit_transform(data['Embarked'].values.reshape(-1,1))

Но он просто возвращает тот же результат. Как я могу это исправить? Я новичок в Scikit и ML, надеюсь, я все делаю правильно.

Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
1
0
1 152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как вы можете это сделать.

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# Sample data
   Sex
0    1
1    0
2    0
3    1

# OneHotEncoder
result = OneHotEncoder().fit_transform(df['Sex'].reshape(-1, 1)).toarray()

# Appending columns
df[['Female', 'Male']] = pd.DataFrame(result, index = df.index)

# Resulting dataframe
df
   Sex  Female  Male
0    1     0.0   1.0
1    0     1.0   0.0
2    0     1.0   0.0
3    1     0.0   1.0

Здесь вообще не нужен LabelEncoder, так как Scikit-learn 0.20 OneHotEncoder умеет работать со строками. Если вам нужны плотные массивы, вы должны установить sparse=False.

Andreas Mueller 30.05.2019 16:49

Другие вопросы по теме