Matplotlib:形状不匹配:对象不能广播到单个形状

Posted

技术标签:

【中文标题】Matplotlib:形状不匹配:对象不能广播到单个形状【英文标题】:Matplotlib: shape mismatch: objects cannot be broadcast to a single shape 【发布时间】:2021-09-12 17:41:10 【问题描述】:

我有一个看起来像这样的数据框(显然要大得多):

id     points isAvailable frequency   Score
abc1   325    0           93          0.01
def2   467    1           80          0.59
ghi3   122    1           90          1 
jkl4   546    1           84          0
mno5   355    0           93          0.99

我想看看pointsisAvailablefrequencyScore 的影响有多大。我想使用像in this example这样的随机森林:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
#from sklearn.inspection import permutation_importance
#import shap
from matplotlib import pyplot as plt

plt.rcParams.update('figure.figsize': (12.0, 8.0))
plt.rcParams.update('font.size': 14)

list_of_columns = ['points','isAvailable', 'frequency']
X = df[list_of_columns]
target_column = 'Score'
y = df[target_column]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=12)

rf = RandomForestRegressor(n_estimators=100)
rf.fit(X_train, y_train)
rf.feature_importances_ #the array below is the output 
>>> array([0.44326132, 0.01666047, 0.        , 0.5400782 ])

plt.barh(df.columns, rf.feature_importances_)

在最后一行我收到以下错误:ValueError: shape mismatch: objects cannot be broadcast to a single shape。我应该在一开始就创建这些列吗? (更大的)数据有问题吗?

【问题讨论】:

【参考方案1】:

rf 模型是在 X 上训练的,这只是 df 的一个子集,因此应根据 X.columns(或 list_of_columns)而不是 df.columns 绘制特征重要性:

plt.barh(X.columns, rf.feature_importances_)

【讨论】:

以上是关于Matplotlib:形状不匹配:对象不能广播到单个形状的主要内容,如果未能解决你的问题,请参考以下文章

形状不匹配:无法将对象广播到单个形状如何解决python中的此类错误?

Python ValueError:形状不匹配:无法将对象广播到单个形状

尝试绘制堆积条形图时收到形状不匹配错误消息

形状不匹配:索引数组无法与形状一起广播

ValueError:形状 (3,1) 的不可广播输出操作数与广播形状 (3,4) 不匹配

SVR ValueError:形状为 (1,1) 的不可广播输出操作数与广播形状 (1,9) 不匹配