在带有 OneVsRestClassifier 的 Neuraxle Pipeline 中使用 predict_proba() 代替 predict()
Posted
技术标签:
【中文标题】在带有 OneVsRestClassifier 的 Neuraxle Pipeline 中使用 predict_proba() 代替 predict()【英文标题】:Using predict_proba() instead predict() in Neuraxle Pipeline with OneVsRestClassifier 【发布时间】:2020-11-01 02:34:57 【问题描述】:我正在尝试设置一个使用 sklearns OneVsRestClassifier (OVR) 的 Neuraxle 管道。
Neuraxle 管道中的每个有效步骤都必须实现 fit()
和 transform()
方法。
为了使用 sklearns 管道步骤,Neuraxle 使用 SKLearnWrapper 将 OVR predict()
方法映射到 SKLearnWrapper 的 transform()
方法。
有没有办法修改此行为,以便将 predict_proba()
方法映射到 OVR 的 transform()
方法?
或者是否有其他方法可以检索计算出的概率?
【问题讨论】:
【参考方案1】:很好的问题!
我们已经有办法解决这个问题了。
假设你编写一个这样的类:
class MyWrapper(BaseStep):
def transform(self, data_inputs):
return sigmoid(data_inputs)
def predict_proba(self, data_inputs):
return data_inputs
你可以这样做:
step = MyWrapper()
然后,一旦你准备好替换方法,使用Neuraxle's mutate函数:
step = step.mutate(new_method='predict_proba', method_to_assign_to='transform')
然后,每当调用.transform()
时,都会调用predict_proba
方法。即使您的 step
在其他步骤中被包裹(嵌套)得更深,变异也会起作用。
请注意,我们可能应该修改 sklearn 包装器以允许这样做。我在这里添加了问题: https://github.com/Neuraxio/Neuraxle/issues/368
因此,在解决此问题之前,您可以执行 class MySKLearnWrapper(SKLearnWrapper): ...
(继承自 SKLearnWrapper 以对其进行修改)并自行定义 predict_proba
,就像这里建议的那样:https://github.com/Neuraxio/Neuraxle/pull/363/files
【讨论】:
以上是关于在带有 OneVsRestClassifier 的 Neuraxle Pipeline 中使用 predict_proba() 代替 predict()的主要内容,如果未能解决你的问题,请参考以下文章
带有 SVC 的 OneVsRestClassifier 和带有 decision_function_shape='ovr' 的 SVC 有啥区别?
OneVsRestClassifier(svm.SVC()).predict() 给出连续值