gpt4 book ai didi

python - scikit-learn 中重复的FeatureUnion

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

我正在 scikit-learn 中学习 Pipelines 和 FeatureUnions,因此想知道是否可以在类上重复应用“make_union”?

考虑以下代码:

import numpy as np
import pandas as pd
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.linear_model import LogisticRegression
import sklearn.datasets as d

class IrisDataManupulation(BaseEstimator, TransformerMixin):
"""
Raise the matrix of feature in power
"""
def __init__(self, power=2):
self.power = power

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

def transform(self, X):
return np.power(X, self.power)

iris_data = d.load_iris()

X, y = iris_data.data, iris_data.target


# feature union:
fu = FeatureUnion(transformer_list=[('squared', IrisDataManupulation(power=2)),
('third', IrisDataManupulation(power=3))])

问题有什么巧妙的方法可以创建FeatureUnion而不重复相同的转换器,而是传递参数列表?

例如:

fu_new = FeatureUnion(transformer_list=[('raise_power', IrisDataManupulation(), 
param_grid = {'raise_power__power':[2,3]})

最佳答案

您可以在单个自定义 Transformer 中移动所有功能。我们可以更改您的 IrisDataManupulation 来处理其中的权限列表:

class IrisDataManupulation(BaseEstimator, TransformerMixin):

def __init__(self, powers=[2]):
self.powers = powers

def transform(self, X):
powered_arrays = []
for power in self.powers:
powered_arrays.append(np.power(X, power))

return np.hstack(powered_arrays)

然后你可以使用这个新的转换器而不是FeatureUnion:

fu = IrisDataManupulation(powers=[2,3])

注意:如果您想从原始特征生成多项式特征,我建议 see PolynomialFeatures ,除了功能之间的其他交互之外,它还可以生成您想要的能力。

关于python - scikit-learn 中重复的FeatureUnion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698624/

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