Как мне стандартизировать только столбцы int64 после разделения на поезд-тест? - PullRequest
0 голосов
/ 28 марта 2020

У меня есть готовый для моделирования фрейм данных, он содержит непрерывные переменные и переменные с горячим кодированием

ID   Limit   Bill_Sep  Bill_Aug  Payment_Sep   Payment_Aug   Gender_M   Gender_F  Edu_Uni DEFAULT_PAYMT
1    10000   2000      350       1000          350           1          0         1          1
2    30000   3000      5000      500           500           0          1         0          0
3    20000   8000      10000     8000          5000          1          0         1          1
4    45000   450       250       450           250           0          1         0          1
5    60000   700       1000      700           1000          1          0         1          1
6    8000    300       5000      300           2000          1          0         1          0
7    30000   3000      10000     1000          5000          0          1         1          1
8    15000   1000      1250      500           1750          0          1         1          1

Все числовые переменные имеют тип int64, а переменные с горячим кодированием - uint8 ». Двоичная переменная результата - DEFAULT_PAYMT.

Я пошел по обычному способу разделения тестов поездов здесь, но я хотел посмотреть, смогу ли я применить стандартизатор только для переменных int64 (т. Е. Переменных, которые не были закодированы в горячем виде)?

featurelist = df.drop(['ID','DEFAULT_PAYMT'],axis = 1)
X = featurelist
y = df['DEFAULT_PAYMT']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Я пытаюсь выполнить следующий код и, похоже, работает, однако я не уверен, как объединить категориальные переменные (которые не были масштабированы) обратно в массивы X_scaled_tr и X_scaled_t. Спасибо за любую помощь, спасибо!

featurelist = df.drop(['ID','DEFAULT_PAYMT'],axis = 1)
X = featurelist
y = df['DEFAULT_PAYMT']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)

sc = StandardScaler()
X_scaled_tr = X_train.select_dtypes(include=['int64'])
X_scaled_t = X_test.select_dtypes(include=['int64'])

X_scaled_tr = sc.fit_transform(X_scaled_tr)
X_scaled_t = sc.transform(X_scaled_t)

1 Ответ

0 голосов
/ 29 марта 2020

Удалось решить вопрос с помощью следующего кода, где стандартизатор применяется только к непрерывным переменным, а НЕ к переменным с горячим кодированием

from sklearn.compose import ColumnTransformer

ct = ColumnTransformer([('X_train', StandardScaler(), ['LIMIT','BILL_SEP','BILL_AUG','PAYMENT_SEP','PAYMENT_AUG'])], remainder ='passthrough')

X_train_scaled = ct.fit_transform(X_train)
X_test_scaled = ct.transform(X_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...