今天一个项目模型编译转化的过程中使用到了sklearn的函数转化器,之前虽也有接触过,但是使用频率可以说是非常低了,今天既然接触到了,就正好再详细看下。
FunctionTransformer官方文档地址在这里。
对应的介绍我都在代码中,就不啰嗦了,直接贴出来,如下所示:
#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__: 沂水寒城
sklearn自定义转化器实践
官方链接:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.FunctionTransformer.html
函数定义:
class sklearn.preprocessing.FunctionTransformer(func=None, inverse_func=None, *, validate=False, accept_sparse=False,
check_inverse=True, kw_args=None, inv_kw_args=None)
功能介绍:
sklearn.preprocessing.FunctionTransformer
从任意可调用对象构造转换器。
FunctionTransformer将其X(和可选的y)参数转发给用户定义的函数或函数对象,并返回此函数的结果。
这对于无状态转换非常有用,例如获取频率日志、进行自定义缩放等。
注意:如果lambda被用作函数,则生成的转换器将不可pickleable。
'''
import math
import numpy as np
from sklearn.preprocessing import FunctionTransformer
def Func1(x):
'''
原数返回
'''
return x
def Func2(x):
'''
倍乘
'''
return x*2
def Func3(x):
'''
减半
'''
return x/2
def Func4(x):
'''
log1p=log(x+1)
'''
return np.log1p(x)
def Func5(x):
'''
expm1=exp(x)-1
'''
return np.expm1(x)
#Func1
transformer = FunctionTransformer(Func1)
X = np.array([[0, 1], [2, 3], [4, 5]])
newX = transformer.transform(X)
print("newX: ", newX)
#Func2
transformer = FunctionTransformer(Func2)
X = np.array([[0, 1], [2, 3], [4, 5]])
newX = transformer.transform(X)
print("newX: ", newX)
#Func3
transformer = FunctionTransformer(Func3)
X = np.array([[0, 1], [2, 3], [4, 5]])
newX = transformer.transform(X)
print("newX: ", newX)
#Func4
transformer = FunctionTransformer(Func4)
X = np.array([[0, 1], [2, 3], [4, 5]])
newX = transformer.transform(X)
print("newX: ", newX)
#Func5
transformer = FunctionTransformer(Func5)
X = np.array([[0, 1], [2, 3], [4, 5]])
newX = transformer.transform(X)
print("newX: ", newX)
结果输出如下: