scikit中的后处理分类器输出学习管道

时间:2015-11-06 14:06:26

标签: python scikit-learn pipeline post-processing

我在scikit中使用Pipeline学习将一些预处理与OneClassSVM组合在一起作为最终分类器。为了计算合理的度量,我需要一个后处理,它将OneClassSVM的-1,1输出转换为0和1.是否有任何结构化的方法将这样的后处理添加到Pipeline? 变形金刚不能在最终估算之后使用。

3 个答案:

答案 0 :(得分:2)

我们开发了PipeGraph,它是Scikit-Learn Pipeline的扩展,允许您获取中间数据,构建类似工作流的图形,特别是解决此问题(请参阅http://mcasl.github.io/PipeGraph库中的示例)

答案 1 :(得分:0)

您可以将类 public function show(Posts $posts) { //$id = $posts; //dd($id); return view('dashboard.demo',compact('posts',$posts)); } 与SVM分类器一起用作回归器,并使用 Posts {#227 ▼ #fillable: array:13 [▶] #connection: null #table: null #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] #perPage: 15 +exists: false +wasRecentlyCreated: false #attributes: [] #original: [] #changes: [] #casts: [] #dates: [] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] #relations: [] #touches: [] +timestamps: true #hidden: [] #visible: [] #guarded: array:1 [▶] } 参数在分类后转换标签。

但是,由于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, # 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]]) 分类器,例如在使用OneClassSVM的网格搜索中,则需要添加{{1 }}设置为Pipeline和参数名之间的参数键名。例如,GridSearchCV变为regressor__

答案 2 :(得分:0)

另外2种考虑方式:

(1)创建OneClassSVM的包装程序分类器。在包装器分类器的预测函数内,您调用OneClassSVM的预测,然后在返回之前进行转换。请参阅下面的链接以获取分类器模板: https://scikit-learn.org/stable/developers/develop.html

(2)创建一个简单的分类器进行转换,然后使用StackingClassifier将OneClassSVM和简单的分类器链接在一起: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.StackingClassifier.html