मैं डेटा विश्लेषण के लिए स्केलेर और पायथन का उपयोग करने के लिए अपेक्षाकृत नया हूं और एक डेटासेट पर कुछ रैखिक प्रतिगमन चलाने की कोशिश कर रहा हूं जिसे मैंने .csv फ़ाइल से लोड किया था।

मैंने अपना डेटा बिना किसी समस्या के train_test_split में लोड कर दिया है, लेकिन जब मैं अपने प्रशिक्षण डेटा को फिट करने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है ValueError: Expected 2D array, got 1D array instead: ... Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

model = lm.fit(X_train, y_train) पर त्रुटि

इन पैकेजों के साथ काम करने के साथ मेरी ताजगी के कारण, मैं यह निर्धारित करने की कोशिश कर रहा हूं कि यह रिग्रेशन चलाने से पहले मेरे आयातित सीएसवी को पांडा डेटा फ्रेम में सेट नहीं करने का परिणाम है या यदि इसे किसी और चीज से करना है।

मेरा सीएसवी प्रारूप में है:

Month,Date,Day of Week,Growth,Sunlight,Plants
7,7/1/17,Saturday,44,611,26
7,7/2/17,Sunday,30,507,14
7,7/5/17,Wednesday,55,994,25
7,7/6/17,Thursday,50,1014,23
7,7/7/17,Friday,78,850,49
7,7/8/17,Saturday,81,551,50
7,7/9/17,Sunday,59,506,29

यहां बताया गया है कि मैंने रिग्रेशन कैसे सेट किया:

import numpy as np
import pandas as pd
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from matplotlib import pyplot as plt


organic = pd.read_csv("linear-regression.csv")

organic.columns
Index(['Month', 'Date', 'Day of Week', 'Growth', 'Sunlight', 'Plants'], dtype='object')

# Set the depedent (Growth) and independent (Sunlight)
y = organic['Growth']
X = organic['Sunlight']

# Test train split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

print (X_train.shape, X_test.shape)
print (y_train.shape, y_test.shape)
(192,) (49,)
(192,) (49,)

lm = linear_model.LinearRegression()
model = lm.fit(X_train, y_train)

# Error pointing to an array with values from Sunlight [611, 507, 994, ...]
0
cphill 27 मार्च 2018, 16:47

3 जवाब

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

आप केवल एक सुविधा का उपयोग कर रहे हैं, इसलिए यह आपको बताता है कि त्रुटि में क्या करना है:

यदि आपके डेटा में एक ही विशेषता है, तो array.reshape(-1, 1) का उपयोग करके अपने डेटा को फिर से आकार दें।

स्किकिट-लर्न में डेटा हमेशा 2डी होना चाहिए।

(X = organic['Sunglight'] में टाइपो को न भूलें)

1
Stev 27 मार्च 2018, 16:04

एक बार जब आप डेटा को train_test_split(X, y, test_size=0.2) में लोड कर देते हैं, तो यह पांडा श्रृंखला X_train और X_test को (192, ) और (49, ) आयामों के साथ लौटा देता है। जैसा कि पिछले उत्तरों में बताया गया है, स्केलेर [n_samples,n_features] आकार के मैट्रिसेस को X_train, X_test डेटा के रूप में अपेक्षित करता है। आप पंडों की श्रृंखला X_train और X_test को पांडा डेटाफ़्रेम में बदलने के लिए उनके आयामों को (192, 1) और (49, 1) में बदल सकते हैं।

lm = linear_model.LinearRegression()
model = lm.fit(X_train.to_frame(), y_train)
0
Ehsan 7 नवम्बर 2019, 12:15

आपको बस अपने अंतिम कॉलम को समायोजित करने की आवश्यकता है

lm = linear_model.LinearRegression()
model = lm.fit(X_train.values.reshape(-1,1), y_train)

और मॉडल फिट होगा। इसका कारण यह है कि स्केलेर से रैखिक मॉडल अपेक्षा करता है

एक्स: आकार का संख्यात्मक सरणी या विरल मैट्रिक्स [n_samples,n_features]

तो इस विशेष मामले में हमारा प्रशिक्षण डेटा फॉर्म [7,1] का होना चाहिए

3
pythonic833 27 मार्च 2018, 16:13