2016-11-16 1 views
1

을 그릴 수 없습니다Pyplot가 나는 아주 간단한 예를 모방하려고 회귀

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 

를 표시하고 플롯은 잘 보여줍니다. 지금은 X_train, y_trainX_test 모든 NumPy와 배열이라는 것을

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() 

참고로 GradientBoostingRegressor의 결과를 플롯하는 것을 시도하고있다. 위의 코드를 위해 나는

<class 'numpy.ndarray'> <class 'numpy.ndarray'> 
training samples 74067 74067 
<class 'numpy.ndarray'> <class 'numpy.ndarray'> 
base samples 166693 166693 

를 얻을 수 있지만 줄거리는 표시되지 않습니다 나는

plt.scatter(X_train, y_train, c="k", label="training samples") 

에서 오류

ValueError: x and y must be the same size 

를 얻을 수 있지만으로는, 출력에 xy을 볼 수 같은 크기와 유형입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+5

대신'len (X_test)'를 출력 할 수 있습니다.'X_test.shape'를 출력 할 수 있습니까? – MMF

+0

내 훈련 차원에서 의미가있는 훈련 샘플 (74067, 163) (74067,)과 기본 샘플 (166693, 163) (166693,)이 – AbtPst

+0

인데, – AbtPst

답변

3

X_train 배열은 각 샘플마다 163 개의 열이있는 2 차원입니다. 전체 X_train 배열에 대해 1 차원 인 y_train 배열을 플롯 할 수 없습니다. 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 값에 따라 다릅니다. 간단한 2 차원 분산 또는 선 그래프는 모든 정보를 한 번에 표시 할 수 없습니다.

당신이 할 수있는 한 가지는 y 값이 가장 많이 의존하는 x 변수를 찾는 것입니다. base_regressor.feature_importances_ 속성을 사용하여 액세스 할 수 있습니다. 문서 here에 예제가 있습니다. 그럼 당신은 가장 중요한 것들에 대한 음모를 꾸밀 수 있습니다. 당신은 여러 차원에서 3D scatter plot을 사용하거나 더 높은 차원에서 corner.py

+0

이 맞습니다.나는 아직도 내가보고 싶은 것을 성취하는 방법을 이해하지 못한다. 기본적으로, 나는 훈련 데이터에 대해 x에 대해 y에 대해 차트를 작성한 다음 테스트 데이터 (예측 후)에 대해 x에 대한 y의 다른 차트와 비교하려고합니다. 말이 돼? 난 단지 모양/분포를 비교하고 싶다. – AbtPst

+0

설명에 포함 시키기에는 내 대답을 편집했다. 왜냐하면 주석에 너무 길기 때문이다. 희망이 도움이 :) – kiliantics

관련 문제