您可以使用类
sklearn.preprocessing.TransformedTargetRegressor
作为回归器,将
inverse_func
参数用于分类后的标签转换。
然而,由于
TransformedTargetRegressor
需要在拟合之前将标签转换为新空间并将预测结果重新映射到原始空间,因此它需要一组要在拟合之前转换的标签,并且不接受空目标或
None
作为输入。因此,您需要为您的管道提供一个虚拟目标,这可能会让您的代码有点混乱。
例如:
import numpy as np
from sklearn.compose import TransformedTargetRegressor
from sklearn.svm import OneClassSVM
from sklearn.pipeline import Pipeline
X = np.random.random((10, 2))
regressor = OneClassSVM(gamma='auto')
svm = TransformedTargetRegressor(regressor=regressor,
inverse_func=lambda x: (x+1)//2,
check_inverse=False)
pipeline = Pipeline([
('svm', svm)
])
pipeline.fit(X, np.zeros((1,1)))
pipeline.predict(X)
输出:
array([[0],
[1],
[1],
[1],
[1],
[0],
[1],
[0],
[0],
[0]])
请注意,如果您需要通过字典将参数传递给
OneClassSVM
分类器,并使用
Pipeline
进行实例化,例如在
GridSearchCV
中进行网格搜索,则需要在参数键名之间添加
regressor__
,并在
svm__
和参数名称之间。例如,
svm__kernel
变成了
svm__regressor__kernel
。
transform
。 - languitar