我试图模仿非常简单的例子
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radiuses
print(type(x),type(y))
print('training samples ',len(x),len(y))
plt.scatter(x, y, c=colors, alpha=0.5)
plt.show()
这显示
<class 'numpy.ndarray'> <class 'numpy.ndarray'>
training samples 50 50
如预期的那样,情节也出现了。现在我试图将GradientBoostingRegressor
的结果绘制为
base_regressor = GradientBoostingRegressor()
base_regressor.fit(X_train, y_train)
y_pred_base = base_regressor.predict(X_test)
print(type(X_train),type(y_train))
print('training samples ',len(X_train),len(y_train))
print(type(X_test),type(y_pred_base))
print('base samples ',len(X_test),len(y_pred_base))
plt.figure()
plt.scatter(X_train, y_train, c="k", label="training samples")
plt.plot(X_test, y_pred_base, c="g", label="n_estimators=1", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Base Regression")
plt.legend()
plt.show()
请注意X_train
,y_train
和X_test
都是numpy数组。对于上面的代码,我得到
<class 'numpy.ndarray'> <class 'numpy.ndarray'>
training samples 74067 74067
<class 'numpy.ndarray'> <class 'numpy.ndarray'>
base samples 166693 166693
但情节没有显示,我收到错误
ValueError: x and y must be the same size
在
plt.scatter(X_train, y_train, c="k", label="training samples")
但是如输出中所示,x
和y
具有相同的大小和类型。我做错了什么?
答案 0 :(得分:3)
您的X_train数组是二维的,每个样本有163列。您无法针对整个X_train数组绘制y_train数组,该数组仅为1维。类似地,针对X_test的y_pred_base图。
您必须选择X阵列中的一个列进行绘图,编辑代码如下:
plt.scatter(X_train[:, 17], y_train, c="k", label="training samples")
plt.plot(X_test[:, 17], y_pred_base, c="g", label="n_estimators=1", linewidth=2)
您的因变量(X)存在于163维空间中。每个y值取决于每个维度的相应x值。简单的二维散点图或线图不能一次显示所有信息。
您可以做的一件事是找出您的y值最依赖于哪个x变量。您可以使用base_regressor.feature_importances_
属性访问此项。文档here中有一个示例。然后你可以制作一个针对最重要的情节。您可以使用3D散点图在多个维度中执行此操作,或者使用类似corner.py