您可以将类 sklearn.preprocessing.TransformedTargetRegressor 与您的 SVM 分类器一起用作回归器,并使用 inverse_func 参数在分类后转换您的标签。
但是,由于TransformedTargetRegressor 应该在拟合之前将您的标签转换为新空间并将预测的标签重新映射到原始空间,因此它希望在拟合之前转换标签数组并且不接受空或@987654324 @目标作为输入。因此,您需要为您的管道提供一个虚拟目标,这会使您的代码有点混乱。
例子:
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, # Function that remaps your labels
check_inverse=False) # If not set to False, this code will generate an error since the provided inverse_func is not the inverse of the default func argument, which is the identity function
pipeline = Pipeline([
('svm', svm)
])
pipeline.fit(X, np.zeros((1,1))) # An array of fake label is provided to the pipeline
pipeline.predict(X)
输出:
array([[0],
[1],
[1],
[1],
[1],
[0],
[1],
[0],
[0],
[0]])
请注意,如果您需要使用字典通过Pipeline 将参数传递给OneClassSVM 分类器,例如在使用GridSearchCV 的网格搜索中,您需要将regressor__ 添加到您的参数键名之间svm__ 和您的参数名称。例如,svm__kernel 变为 svm__regressor__kernel。