【问题标题】:Numpy array shape mismatch with modAL and skLearnNumpy 数组形状与 modAL 和 skLearn 不匹配
【发布时间】:2021-07-14 02:57:29
【问题描述】:

我遇到了一个 numpy 数组形状不匹配错误。 StackOverflow 上有很多这样的问题,但没有一个能帮助我解决问题。我正在努力调试,因为库代码引发了错误。以下是相关部分:

from modAL.models import ActiveLearner

# ... fetch data

print("Beginning debugging logs:")
print(f"classifier: {clf}")
print(f"X_train shape: {X_train.shape}")
print(f"y_train shape: {y_train.shape}")
print(f"X_pool shape: {X_POOL.shape}")

learner = ActiveLearner(
    estimator=clf,
    X_training=X_train,
    y_training=y_train
    )

result = learner.query(X_POOL)

这是回溯:

classifier: DecisionTreeClassifier(max_depth=4)
X_train shape: (84, 4926)
y_train shape: (84, 51)
X_pool shape: (997, 4926)


  File "rpc_server.py", line 139, in <module>
    result = learner.query(X_POOL)
  File "/home/ubuntu/venv/lib/python3.8/site-packages/modAL/models/base.py", line 261, in query
    query_result = self.query_strategy(self, X_pool, *query_args, **query_kwargs)
  File "/home/ubuntu/venv/lib/python3.8/site-packages/modAL/uncertainty.py", line 152, in uncertainty_sampling
    uncertainty = classifier_uncertainty(classifier, X, **uncertainty_measure_kwargs)
  File "/home/ubuntu/venv/lib/python3.8/site-packages/modAL/uncertainty.py", line 82, in classifier_uncertainty
    uncertainty = 1 - np.max(classwise_uncertainty, axis=1)
  File "/home/ubuntu/venv/lib/python3.8/site-packages/numpy/core/fromnumeric.py", line 2504, in amax
    return _wrapreduction(a, np.maximum, 'max', axis, None, out, keepdims=keepdims,
  File "/home/ubuntu/venv/lib/python3.8/site-packages/numpy/core/fromnumeric.py", line 86, in _wrapreduction
    return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
ValueError: could not broadcast input array from shape (997,1) into shape (997)

环境是Python3.8,带有:

pandas==1.1.4
numpy==1.16.0
sklearn==0.0
modAL==0.4.0

我相信 (997,1) 只是一个简单嵌套的 (997) 数组?它似乎与这里需要的东西相去甚远。

如何调试此错误?谢谢!

【问题讨论】:

    标签: python pandas numpy scikit-learn


    【解决方案1】:

    您收到的 ValueError 似乎是该行的问题:

    uncertainty = 1 - np.max(classwise_uncertainty, axis=1)
    

    也许您可以简单地避免在 ufunc.reduce 级别完全广播:

    uncertainty = 1 - (np.max(classwise_uncertainty, axis=1, keepdims=1)).flatten()
    

    但我应该注意,我无法在我的机器上重现错误。在最坏的情况下,您可以简单地手动重新编写该代码行(使用一两个循环)以反映它编码的相同数学。

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 2019-10-20
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多