Python scikit学习问题';s BaggingClassifier和自定义基估计器:操作数可以';不能一起广播吗?

Python scikit学习问题';s BaggingClassifier和自定义基估计器:操作数可以';不能一起广播吗?,python,scikit-learn,valueerror,Python,Scikit Learn,Valueerror,我试图将自定义分类器与SciKit Learn的BaggingClassifier一起使用,但我遇到了一个无法确定错误来源的错误。我的分类器对象通过了check\u estimator(),我对fit()函数没有任何问题: model = ensemble.BaggingClassifier(customEstimator, max_samples=1/n_estimators, n_estimators=n_estimators) model.fit(trainfeat, trainlabel

我试图将自定义分类器与SciKit Learn的
BaggingClassifier
一起使用,但我遇到了一个无法确定错误来源的错误。我的分类器对象通过了
check\u estimator()
,我对
fit()
函数没有任何问题:

model = ensemble.BaggingClassifier(customEstimator, max_samples=1/n_estimators, n_estimators=n_estimators)
model.fit(trainfeat, trainlabels)
model.predict(testfeat)
这将产生下面的错误跟踪。基估计器本身通过sigmoid阈值进行二元预测。我知道这些值必须与测试数据相对应,但我不明白这三个运算符应该是什么?而且,这似乎是错误来自于
BaggingClassifier
,但问题一定是我出的,不是吗

我试图避免为我的整个估计器粘贴代码,但它继承了
BaseEstimator
,我只编写/重载函数:
fit
predict
predict\u proba
。我是否在这方面遗漏了什么

我尝试过重塑功能/标签,但没有效果,甚至没有改变错误。我还试图让我的估计器继承
ClassifierMixin
,但这最终给了我很多新问题

  File "Main_File.py", line 76, in <module>
    model.predict(testfeat)

  File "G:\Software\Anaconda\lib\site-packages\sklearn\multiclass.py", line 310, in predict
    indices.extend(np.where(_predict_binary(e, X) > thresh)[0])

  File "G:\Software\Anaconda\lib\site-packages\sklearn\multiclass.py", line 98, in _predict_binary
    score = estimator.predict_proba(X)[:, 1]

  File "G:\Software\Anaconda\lib\site-packages\sklearn\ensemble\bagging.py", line 698, in predict_proba
    for i in range(n_jobs))

  File "G:\Software\Anaconda\lib\site-packages\joblib\parallel.py", line 1003, in __call__
    if self.dispatch_one_batch(iterator):

  File "G:\Software\Anaconda\lib\site-packages\joblib\parallel.py", line 834, in dispatch_one_batch
    self._dispatch(tasks)

  File "G:\Software\Anaconda\lib\site-packages\joblib\parallel.py", line 753, in _dispatch
    job = self._backend.apply_async(batch, callback=cb)

  File "G:\Software\Anaconda\lib\site-packages\joblib\_parallel_backends.py", line 201, in apply_async
    result = ImmediateResult(func)

  File "G:\Software\Anaconda\lib\site-packages\joblib\_parallel_backends.py", line 582, in __init__
    self.results = batch()

  File "G:\Software\Anaconda\lib\site-packages\joblib\parallel.py", line 256, in __call__
    for func, args, kwargs in self.items]

  File "G:\Software\Anaconda\lib\site-packages\joblib\parallel.py", line 256, in <listcomp>
    for func, args, kwargs in self.items]

  File "G:\Software\Anaconda\lib\site-packages\sklearn\ensemble\bagging.py", line 129, in _parallel_predict_proba
    proba += proba_estimator

ValueError: operands could not be broadcast together with shapes (100000,2) (100000,) (100000,2)
文件“Main_File.py”,第76行,在
模型预测(testfeat)
文件“G:\Software\Anaconda\lib\site packages\sklearn\multiclass.py”,第310行,在predict中
扩展指数(np.where(_predict_binary(e,X)>thresh)[0])
文件“G:\Software\Anaconda\lib\site packages\sklearn\multiclass.py”,第98行,二进制
分数=估计员。预测概率(X)[:,1]
文件“G:\Software\Anaconda\lib\site packages\sklearn\employee\bagging.py”,第698行,在predict\u proba中
适用于范围内的i(n_工作))
文件“G:\Software\Anaconda\lib\site packages\joblib\parallel.py”,第1003行,在调用中__
如果self.dispatch\u一批(迭代器):
文件“G:\Software\Anaconda\lib\site packages\joblib\parallel.py”,第834行,一批批发送
自我分配(任务)
文件“G:\Software\Anaconda\lib\site packages\joblib\parallel.py”,第753行,在调度中
作业=self.\u后端.apply\u异步(批处理,回调=cb)
文件“G:\Software\Anaconda\lib\site packages\joblib\\u parallel\u backends.py”,第201行,在apply\u async中
结果=立即结果(func)
文件“G:\Software\Anaconda\lib\site packages\joblib\\u parallel\u backends.py”,第582行,在初始化中__
self.results=batch()
文件“G:\Software\Anaconda\lib\site packages\joblib\parallel.py”,第256行,在调用中__
对于self.items中的func、args、kwargs]
文件“G:\Software\Anaconda\lib\site packages\joblib\parallel.py”,第256行,在
对于self.items中的func、args、kwargs]
文件“G:\Software\Anaconda\lib\site packages\sklearn\employee\bagging.py”,第129行,并行预测
概率+=概率估计量
ValueError:操作数无法与形状(100000,2)(100000,)(100000,2)一起广播

我想问题是由您的
customEstimator
predict\u proba
的输出引起的

看起来您当前的实现返回的输出带有维度
(n_samples,1)
,该维度不兼容。对于二进制分类问题,确保您的
predict\u proba
输出维度为
(n\u样本,2)