python - 如何在训练测试拆分后仅标准化 int64 列?
问题描述
我有一个准备好建模的数据框,它包含连续变量和单热编码变量
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)
解决方案
设法使用以下代码解决了这个问题,其中标准缩放器仅应用于连续变量而不是单热编码变量
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)
推荐阅读
- android - 使用 PageView 小部件的 Tinder 风格的滑动功能
- r - 当输出是代码块中的文本时,如何在 Rmarkdown 中的每个注释之间添加空格?
- java - Android 手机上的“受保护的应用程序”设置
- javascript - 更改类时未应用 D3 css
- pysimplegui - 如何在 PySimpleGUI 中创建时间输入字段
- azure - 希望让 Azure B2C 自定义策略使用自定义错误页面(并传递一个值)
- c# - WPF TreeView在不同级别绑定多个不同的字典并按TKey排序
- microsoft-graph-api - Graph API - 访问本地邮箱时在某些数据中心返回 404
- java - Axon:设置分布式命令总线
- ocaml - OCaml 动态链接和 -nodynlink 编译标志