从documentation我已经准备好了:
FunctionTransformer将其X(和可选的y)参数转发给用户定义的函数或函数对象,并返回结果 这个功能。这对于无状态转换非常有用,例如 记录频率,进行自定义缩放等
但是,我不明白这个功能有什么用处。有人可以解释这个功能的目的吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
除了简单地包装给定的用户定义函数之外,FunctionTransformer还提供了其他sklearn估计器的一些标准方法(例如fit
和transform
)。这样做的好处是,您可以将任意的无状态转换引入到sklearn Pipeline,它结合了多个处理阶段。这样可以更轻松地执行处理管道,因为您只需将数据(X
)传递给fit
对象的transform
和Pipeline
方法,而无需明确应用每个阶段单独管道。
以下是直接从sklearn文档(位于here)复制的示例:
def all_but_first_column(X):
return X[:, 1:]
def drop_first_component(X, y):
"""
Create a pipeline with PCA and the column selector and use it to
transform the dataset.
"""
pipeline = make_pipeline(
PCA(), FunctionTransformer(all_but_first_column),
)
X_train, X_test, y_train, y_test = train_test_split(X, y)
pipeline.fit(X_train, y_train)
return pipeline.transform(X_test), y_test
请注意,未从数据中明确删除第一个主要组件。在调用pipeline.transform
时,管道会自动将转换链接在一起。
答案 2 :(得分:0)
X = [[5,6,7],
[8,9,10],
[1,2,3]]
def exampleFunctionTransformer(X):
return X**2
def exampleofFunctionTransfor():
fx = FunctionTransformer(exampleFunctionTransformer)
Y1= fx.transform(X)
print(Y1)
return Y1
Z = exampleofFunctionTransfor()
print(Z)
o/p
[[ 25 36 49]
[ 64 81 100]
[ 1 4 9]]
答案 3 :(得分:0)
假设您有一个已知值范围在 0-255
之间的图像数组,您希望在 0-1
之间缩小,但您不想使用 StandardScaler
,因为并非所有图像其中会有 0 和 255 的值。
简单来说。没有人在测试中获得 100% 的分数,但您仍然希望在 0-100 之间进行调整。
from sklearn.preprocessing import FunctionTransformer
import numpy as np
data = np.array([[100, 2], [240, 80], [139, 10], [10, 150]])
def div255(X): return X/255 #encode
def mult255(X): return X*255 #decode
scaler = FunctionTransformer(div255, inverse_func=mult255)
# --- encode ---
mutated = scaler.fit_transform(data)
"""
array([[0.39215686, 0.00784314],
[0.94117647, 0.31372549],
[0.54509804, 0.03921569],
[0.03921569, 0.58823529]])
"""
# --- decode ---
scaler.inverse_transform(mutated)
"""
array([[100., 2.],
[240., 80.],
[139., 10.],
[ 10., 150.]])
"""
确保将这些自定义函数定义在程序的其余部分可以引用的位置(例如,帮助函数)。特别是在需要inverse_transform
预测和/或编码新样本时!