python - scikit-learn 的 BaggingClassifier 和自定义基础估计器的问题:操作数不能一起广播?
问题描述
我正在尝试将自定义分类器与 SciKit-Learn's 一起使用BaggingClassifier
,但我遇到了一个我无法确定其来源的错误。我的分类器对象通过check_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_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)
解决方案
我想问题出在predict_proba
你的customEstimator
.
看起来您当前的实现返回的输出带有一个(n_samples, 1)
不兼容的维度。确保您的predict_proba
输出维度(n_samples, 2)
适用于二元分类问题。
推荐阅读
- firebase - 如何解决从应用程序收到的错误 -32000:服务协议无法处理或找到请求方法的处理程序。错误
- ios - 使用沙盒购买 Apple In App 时出现错误,因为“您的帐户已在 App Store 和 iTunes 中被禁用”
- json - 使用 powershell 5.1 基于现有文档创建 json 文档
- javascript - 如何在 ExpressJS 中插入或更新数据库
- struct - 使用 Pyspark 将大量结构字段类型转换为字符串
- java - 如何向我的 spigot 插件添加前缀/后缀命令?
- c++ - 显示窗口控件的“全尺寸”
- python - AttributeError:模块“comtypes.gen.SpeechLib”没有属性“ISpeechVoice”
- sql - 多行数据到一个表中的多列
- typescript - 将 shell 脚本与 GitHub 操作捆绑在一起的首选方式