gpt4 book ai didi

python - 我怎样才能对列的子集进行热编码?

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:13 24 4
gpt4 key购买 nike

我有一个包含一些分类列的数据集。这是一个小样本:

Temp    precip dow  tod
-20.44 snow 4 14.5
-22.69 snow 4 15.216666666666667
-21.52 snow 4 17.316666666666666
-21.52 snow 4 17.733333333333334
-20.51 snow 4 18.15

这里,dowprecip 是分类的,而其他的是连续的。

有没有一种方法可以为这些列创建 OneHotEncoder?我不想使用 pd.get_dummies 因为除非每个 dowprecip 都以正确的格式放置数据在新数据中。

最佳答案

您可以检查两件事:sklearn-pandas正如@Grr pipelines 所提到的有了这个好intro .

所以我更喜欢管道,因为它们是一种整洁的方式,可以轻松地与 grid-seach 之类的东西一起使用,避免交叉验证中折叠之间的泄漏等。所以我通常最终会得到这样的管道(假设你有 precip LabelEncoded优先):

from sklearn.pipeline import Pipeline, FeatureUnion, make_pipeline, make_union
from sklearn.preprocessing import OneHotEncoder
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.linear_model import LinearRegression

class Columns(BaseEstimator, TransformerMixin):
def __init__(self, names=None):
self.names = names

def fit(self, X, y=None, **fit_params):
return self

def transform(self, X):
return X[self.names]

class Normalize(BaseEstimator, TransformerMixin):
def __init__(self, func=None, func_param={}):
self.func = func
self.func_param = func_param

def transform(self, X):
if self.func != None:
return self.func(X, **self.func_param)
else:
return X

def fit(self, X, y=None, **fit_params):
return self


cat_cols = ['precip', 'dow']
num_cols = ['Temp','tod']

pipe = Pipeline([
("features", FeatureUnion([
('numeric', make_pipeline(Columns(names=num_cols),Normalize())),
('categorical', make_pipeline(Columns(names=cat_cols),OneHotEncoder(sparse=False)))
])),
('model', LinearRegression())
])

关于python - 我怎样才能对列的子集进行热编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348350/

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