python - 特征工程:针对不同分布进行缩放
问题描述
我正在尝试了解扩展我的功能的最佳方式,并学习如何使用 SciKit 包来转换/适应我的预测数据集。
我有两组数据。
第一组具有正态分布,所以我只是想使用 minmax 缩放器缩放值(20-100 之间的正值)。
第二组特征有异常值,所以我相信鲁棒缩放器会给出更好的结果。
我的问题是
- 我可以在我的数据集上使用多个缩放器来解决使用 RF 的分类问题吗?
- 在 SciKit 中,当我尝试在训练数据上使用鲁棒缩放器仅缩放 1 个功能时,我收到了这个错误。ValueError: Expected 2D array, got 1D array instead: 我不确定如何读取这个错误,我不能只缩放一个特征吗?
- 如果我对我的数据使用两个缩放器,如果我希望一次进行一行预测,那么实现特征工程的最佳方法是什么?我只使用变换吗?
解决方案
- 是的,如果你觉得它有用,你可以。
- 您可以缩放单个特征。如果你做这样的事情,你会得到一个错误:
import pandas as pd
from sklearn.preprocessing import StandardScaler
df = pd.DataFrame({
"feature1": [1,2,3,4,5],
"feature2": [100, 200, 300, 400, 500],
"feature3": [200, 300, 400, 500, 600],
})
scaler = StandardScaler()
scaler.fit_transform(df["feature1"])
# output
ValueError: Expected 2D array, got 1D array instead:
如果这是单列,则需要另外重塑输入:
scaler = StandardScaler()
scaler.fit_transform(df["feature1"].values.reshape(-1, 1))
# output
array([[-1.41421356],
[-0.70710678],
[ 0. ],
[ 0.70710678],
[ 1.41421356]])
- 您可以使用 ColumnTransformer 进行分支预处理。
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, MinMaxScaler
df = pd.DataFrame({
"feature1": [1,2,3,4,5],
"feature2": [100, 200, 300, 400, 500],
"feature3": [200, 300, 400, 500, 600],
})
transformers = ColumnTransformer(
transformers=[
("scaling1", MinMaxScaler(), ["feature1"]),
("scaling2", StandardScaler(), ["feature2", "feature3"])
]
)
transformed_df = transformers.fit_transform(df)
transformed
# output
array([[ 0. , -1.41421356, -1.41421356],
[ 0.25 , -0.70710678, -0.70710678],
[ 0.5 , 0. , 0. ],
[ 0.75 , 0.70710678, 0.70710678],
[ 1. , 1.41421356, 1.41421356]])
例如,如果您想使用第一个缩放器 (scaling1) 进行逆变换:
scaler_1 = transformers.named_transformers_["scaling1"]
scaler_1.inverse_transform(transformed[:, 0].reshape(-1, 1))
# output
array([[1.],
[2.],
[3.],
[4.],
[5.]])
推荐阅读
- javascript - 组件未使用钩子更新 Map(字典)状态更改
- intellij-idea - 像intellij的文本选择一样崇高丢失
- c# - 打开新页面时,它与 NavigationView 菜单重叠
- java - 与 compareTo 相关的溢出错误
- c - 在C中将数字数组乘以int
- python - 顽固分子使用 python 的原始二进制流
- php - 邮件服务器收到邮件后执行 PHP 脚本
- node.js - 如何在 MEAN 堆栈中的 angularjs 文件中加载控制器
- graphql - 使用 apollo 服务器运行此查询时出现 GraphQL 错误。任何人都知道它有什么问题吗?
- java - 为什么 Kotlin JDK8 还在类路径中包含 Kotlin JDK7?