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