मैं एकाधिक रैखिक प्रतिगमन चलाने की कोशिश कर रहा हूं लेकिन मुझे अपने परिणामों की साजिश रचने में परेशानी हो रही है। मैं अपने 3D प्लॉट को प्लॉट करने की कोशिश कर रहा हूं, मुझे यह आउटपुट मिलता है ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (4,) and requested shape (34,)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train,y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X.iloc[:, 0], X.iloc[:, 1], Y)
ax.plot(X.iloc[:, 0], X.iloc[:, 1], y_pred, color='red')

ax.set_xlabel('Annual Income (k$)')
ax.set_ylabel('Age')
ax.set_zlabel('Spending Score')
plt.show()

संपादित: यहां छवि विवरण दर्ज करें

2 संपादित करें: यहां छवि विवरण दर्ज करें

0
Arben geze 14 जून 2020, 20:46

1 उत्तर

सबसे बढ़िया उत्तर

प्लॉट कमांड होना चाहिए:

ax.plot(X_test.iloc[:, 0], X_test.iloc[:, 1], y_pred, color='red')

क्योंकि y_pred में केवल उपसमुच्चय X_test के लिए y मान हैं, संपूर्ण इनपुट X के लिए नहीं।

कनेक्टेड लाइनों (ax.plot) के साथ प्लॉटिंग का कोई मतलब नहीं है, क्योंकि इनपुट डेटा को शायद सार्थक तरीके से ऑर्डर नहीं किया जाता है और इनपुट डेटा ऑर्डर किए जाने पर भी टेस्ट सेट निश्चित रूप से ऑर्डर नहीं किया जाता है।

मैं इसे इस तरह प्लॉट करूंगा:

enter image description here

from sklearn.model_selection import train_test_split
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# generate some data as an example.
np.random.seed(1)
n = 20
X = pd.DataFrame(np.random.uniform(size=(n, 2)), columns=['foo', 'bar'])
Y = X['foo'] + 2*X['bar'] + np.random.normal(scale=0.2, size=n)

X_train, X_test, y_train,y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X['foo'], X['bar'], Y, label='data')

for x0, x1, yt, yp in zip(X_test['foo'], X_test['bar'], y_test, y_pred):
    ax.plot([x0, x0], [x1, x1], [yt, yp], color='red')

ax.scatter(X_test['foo'], X_test['bar'], y_pred, color='red', marker='s', label='prediction') 

ax.set_xlabel('X0')
ax.set_ylabel('X1')
ax.set_zlabel('y')
ax.legend()
fig.show()

विज़ुअलाइज़ेशन करने के अन्य तरीके हैं। आप ग्रिड पर X मान उत्पन्न करने के लिए np.meshgrid का उपयोग कर सकते हैं और अपने भविष्यवक्ता से y मान प्राप्त कर सकते हैं और इसे plot_wireframe का उपयोग करके प्लॉट कर सकते हैं और ऊर्ध्वाधर लाइनों का उपयोग करके ट्रेन और परीक्षण डेटा दोनों को प्लॉट कर सकते हैं। वायरफ्रेम से उनकी ऊर्ध्वाधर दूरी को इंगित करने के लिए। यह डेटा पर निर्भर करता है कि क्या समझ में आता है।

1
Han-Kwang Nienhuys 14 जून 2020, 19:31