gpt4 book ai didi

python - scikit-learn:转换器按名称选择列

转载 作者:行者123 更新时间:2023-12-05 01:36:58 25 4
gpt4 key购买 nike

上下文

我正在使用 scikit-learn 并寻找一个转换器,它允许我简单地选择要保留哪些列或删除哪些列。

问题

实际上,我想在我的管道中包含一个附加 转换器步骤,允许我选择要保留或删除哪些列。我知道在下面的示例中我可以简单地使用余数,但这在我需要参数化列选择以便轻松将其应用于训练、测试和最终评分的实际实现中不起作用。

例子

import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn import preprocessing
prep_pipeline = ColumnTransformer(transformers=[("std_num", preprocessing.StandardScaler(), ["a", "b"])],
remainder = "passthrough")
X = pd.DataFrame([[0., 1., 2., 2.],
[1., 1., 0., 1.]])
X.columns = ["a", "b", "c", "d"]
prep_pipeline.fit_transform(X)

预期的解决方案

解决方案我需要通过管道传输一个附加 转换器步骤,该步骤专用于选定的列 ["a", "d"],因此预期输出为:

array([[-1.,  1.],
[ 1., -1.]])

最佳答案

我认为你应该使用 sklearn 的管道和该管道中的后续类(当前 StandardScaler 不支持数据帧的缩放部分)

import pandas as pd
from sklearn.base import BaseEstimator, TransformerMixin

class DropSomeColumns(BaseEstimator, TransformerMixin):

def __init__(self, cols):
if not isinstance(cols, list):
self.cols = [cols]
else:
self.cols = cols

def fit(self, X: pd.DataFrame, y: pd.Series):
# there is nothing to fit
return self

def transform(self, X:pd.DataFrame):
X = X.copy()
return X[self.cols]

关于python - scikit-learn:转换器按名称选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61556766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com